如何使用Selenium Webdriver在浏览器中单击<input type =“file”/>?

时间:2012-03-15 18:37:18

标签: selenium webdriver

我正在使用Selenium 2 - WebDriver处理文件选择器对话框。信不信由你,我的问题不是处理操作系统原生文件选择器。那部分我可以处理!

问题是让Selenium正确点击“选择文件”按钮。由于原始源html只是<input type='file'>,因此浏览器会确定如何将其呈现为字段和按钮。因此,按钮的放置和命名会根据浏览器而改变。我已经在Chrome中使用了它,但仅仅因为Chrome将按钮放在最左边的路线上,而Selenium默认会点击那里。

有什么想法吗?我不清楚这种类型的输入是否真的可以从DOM中导航......

3 个答案:

答案 0 :(得分:40)

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

  1. 找到<input type='file'>元素。您无需担心不同的实现和精确定位。只需通过xpath //input[@type='file']
  2. 找到元素即可
  3. sendKeys()type()(或任何方法将文本写入您的语言中的元素)文件到该输入元素的路径。
  4. 示例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中的每个操作系统和浏览器。

答案 1 :(得分:4)

与元素<input type='file'>具有完全相同的情况。在我的例子中,它是使用ExtJS创建的。

我不知道你是否已经解决了这个问题,但让我提供我的解决方案。

JavascriptExecutor executor = (JavascriptExecutor)getDriver();
executor.executeScript("arguments[0].click();", element);

sendKeys()或type()以及使用ActionBuilder对我都没有帮助。唯一的JavascriptExecutor就像魅力一样。

答案 2 :(得分:0)

我测试了以下元素:

<INPUT style="WIDTH: 550px; background-color:yellow" type="file">

结果:

    在元素的任何区域
  • IE:双击,会出现“选择文件”对话框;
  • Firefox:点击元素的任何区域,会出现“选择文件”对话框。