如何在使用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内导航…

上传任何操作系统上的文件的正确方法是

  1. find<input type='file'>元素。 您不必担心不同的实现和确切的位置。 只需find元素,例如xpath //input[@type='file']
  2. 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文件”对话框。