Skip to content

Commit

Permalink
@devtools: Enable file uploads by changing input elements' value (#5347)
Browse files Browse the repository at this point in the history
  • Loading branch information
nextlevelbeard committed May 2, 2020
1 parent 185dffc commit 63da01a
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 1 deletion.
6 changes: 6 additions & 0 deletions e2e/element.test.js
Expand Up @@ -105,6 +105,12 @@ describe('elements', () => {
expect(await browser.getElementProperty(textarea[ELEMENT_KEY], 'value')).toBe('foobar')
})

it('elementSendKeys for file-type input', async () => {
const fileInput = await browser.findElement('css selector', '#upload-test')
await browser.elementSendKeys(fileInput[ELEMENT_KEY], 'README.md')
expect(await browser.getElementProperty(fileInput[ELEMENT_KEY], 'value')).toBe('C:\\fakepath\\README.md')
})

it('elementClear', async () => {
const textarea = await browser.findElement('css selector', 'textarea')
await browser.elementClear(textarea[ELEMENT_KEY])
Expand Down
11 changes: 10 additions & 1 deletion packages/devtools/src/commands/elementSendKeys.js
@@ -1,4 +1,5 @@
import { getStaleElementError } from '../utils'
import path from 'path'

export default async function elementSendKeys ({ elementId, text }) {
const elementHandle = this.elementStore.get(elementId)
Expand All @@ -9,7 +10,15 @@ export default async function elementSendKeys ({ elementId, text }) {

await elementHandle.focus()
const page = this.getPageHandle()
await page.keyboard.type(text)
const tagName = await (await elementHandle.getProperty('tagName')).jsonValue()
const type = await (await elementHandle.getProperty('type')).jsonValue()

if(tagName === 'INPUT' && type === 'file'){
const paths = (text || '').split('\n').map(p => path.resolve(p))
await elementHandle.uploadFile(...paths)
} else {
await page.keyboard.type(text)
}

return null
}

0 comments on commit 63da01a

Please sign in to comment.