【问题标题】:Firefox Gecko driver cannot click on input element with type "file"Firefox Gecko 驱动程序无法单击类型为“文件”的输入元素
【发布时间】:2019-02-23 23:11:26
【问题描述】:

我正在使用所有浏览器中的两个文件上传按钮自动创建一个页面。这是代码sn-p:

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">

【问题讨论】:

  • 你确定元素在时间码执行吗?你试过线程睡眠吗?
  • 是的,它确实存在,我确实尝试过睡眠以确保这一点。抛出同样的错误。如果它还没有加载,它会抛出一个 ElementNotFound 错误
  • @NickaBrick 用相关的 HTML 更新问题
  • @Newcontributor 添加了 HTML 元素,但是考虑到它在 Chrome 上完美运行,驱动程序语句不是问题,并且 firefox 上的 HTML 与 Chrome 完全相同
  • 你试过这个吗? stackoverflow.com/questions/9726005/… 使用 xpath 导航可能会更棘手,因为您有多个上传按钮,但我认为它可能会成功-.-

标签: java selenium testng selenium-firefoxdriver


【解决方案1】:

Firefox(通过 geckodriver)在此处表现正确,而 Chrome 则不然。 W3C WebDriver Specification,在其对 Element Click algorithm in Section 14.1 的描述中,第 3 步指出:“如果元素是文件上传状态的输入元素1,则返回错误,错误代码无效参数。”

当 Chromium 团队完成 chromedriver 的规范合规性时,它将像 geckodriver、IEDriverServer.exe、Microsoft 的 Edge 驱动程序实现的当前预览版以及 Apple 刚刚发布的 Safari 12 驱动程序实现一样运行。

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

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

【讨论】:

  • 感谢您的信息!使用sendKeys 方法时,文件资源管理器是否也会打开到浏览器选择的默认位置?这是当前在 chrome 驱动程序中单击它时的行为
  • 对于 ChromeDriver,我可以在 sendKeys 方法中使用直接路径,但是我要上传的文件的相同直接路径在 GeckoDriver 中不起作用。这有什么原因吗?
  • geckodriver 通过 sendKeys 上传的文件不会被全局破坏。 WebDriver Herald 显示了在 Selenium 项目测试套件和 Web 平台测试项目测试套件中工作的文件上传测试。
  • 全球可能都是这种情况,但是在我的情况下,Chrome 驱动程序会找到我的 .jpg 文件,而 gecko 驱动程序却没有。 gecko 驱动程序的行为方式是否仍然不同,因为您我们之前引用了上传文件行为之间的差异?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-31
  • 1970-01-01
  • 2019-05-04
  • 1970-01-01
相关资源
最近更新 更多