Firefox Gecko 驱动程序无法单击类型为 "file" 的输入元素

Firefox Gecko driver cannot click on input element with type "file"

我在所有浏览器中使用两个文件上传按钮自动化一个页面。这是代码片段:

WebElement thumbnailClick = driver.findElement(By.id("PageForm_tile_src"));
jse.executeScript("scroll(0, 250)");
thumbnailClick.click();

这是第一个上传按钮的点击,在 Chrome 中完美运行,但尝试 运行 在 Firefox gecko 驱动程序上会抛出 InvalidArgumentException: Cannot click <input type=file> elements 错误

我必须通过 ID 找到这些元素,因为此页面上有多个上传按钮。为什么 firefox 会拒绝此点击,因为它很容易手动完成并且可以在任何其他浏览器上运行?

添加 HTML 个元素:

<input name="PageForm[tile_src]" id="PageForm_tile_src" type="file">

Firefox(通过 geckodriver)在这里表现正确,而 Chrome 则不然。 W3C WebDriver Specification, in its description of the Element Click algorithm in Section 14.1,第 3 步指出:“如果元素是文件上传状态中的输入元素1 return 错误,错误代码无效参数。”

当 Chromium 团队完成 chromedriver 的规范合规后,它将表现为 geckodriver,IEDriverServer.exe,Microsoft 的 Edge 驱动程序实现的当前预览版本,以及 Apple 刚刚发布的 Safari 12 驱动程序实现的所有行为.

要使用 WebDriver 成功上传文件,您应该使用 sendKeys 方法以及您要上传的文件的完整路径。

1编。注意:“在文件上传状态”是 <input type="file"> 元素的规范语言。