如何在使用Selenium Webdriver的浏览器上点击<input type = file>?
我正在处理使用Selenium 2 – WebDriver的文件select器对话框。 相信与否,我的问题是不处理操作系统本机文件select器。 我可以处理的那部分!
问题是让Selenium正确点击“select文件”button。 由于原始HTML源代码只是<input type='file'>
,所以浏览器决定了如何将其渲染为一个字段和一个button。 因此,button的位置和命名会根据浏览器而改变。 我已经在Chrome中工作了,但只是因为Chrome将button放在最左边的alignment方式,而Selenium恰好在默认情况下点击了button。
有任何想法吗? 不知道这种types的input是否真的可以从DOM内导航…
上传任何操作系统上的文件的正确方法是
- find
<input type='file'>
元素。 您不必担心不同的实现和确切的位置。 只需find元素,例如xpath//input[@type='file']
-
sendKeys()
或type()
(或任何方法将文本写入您的语言的元素)文件path到该input元素。
示例Java代码:
// find the input element WebElement elem = driver.findElement(By.xpath("//input[@type='file']")); // 'type' the file location to it as it were a usual <input type='text' /> element elem.sendKeys("C://path/To/File.jpg");
这适用于WebDriver中的每个操作系统和浏览器。
与元素<input type='file'>
具有完全相同的情况。 在我的情况下,它是使用ExtJS创build的。
我不知道你是否已经解决了这个问题,但让我提供我的解决scheme。
JavascriptExecutor executor = (JavascriptExecutor)getDriver(); executor.executeScript("arguments[0].click();", element);
sendKeys()或type()也不使用ActionBuilder对我很有帮助。 唯一的JavascriptExecutor就像一个魅力。
我testing了以下元素:
<INPUT style="WIDTH: 550px; background-color:yellow" type="file">
结果:
- IE: 双击元素的任何区域,将出现“select文件”对话框;
- Firefox: 点击元素的任何区域,将出现“select文件”对话框。