我正在使用Selenium 2 - WebDriver处理文件选择器对话框。信不信由你,我的问题不是处理操作系统原生文件选择器。那部分我可以处理!
问题是让Selenium正确点击“选择文件”按钮。由于原始源html只是<input type='file'>
,因此浏览器会确定如何将其呈现为字段和按钮。因此,按钮的放置和命名会根据浏览器而改变。我已经在Chrome中使用了它,但仅仅因为Chrome将按钮放在最左边的路线上,而Selenium默认会点击那里。
有什么想法吗?我不清楚这种类型的输入是否真的可以从DOM中导航......
答案 0 :(得分:40)
在任何操作系统上传文件的正确方法是
<input type='file'>
元素。您无需担心不同的实现和精确定位。只需通过xpath //input[@type='file']
sendKeys()
或type()
(或任何方法将文本写入您的语言中的元素)文件到该输入元素的路径。示例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">
结果: