java – Selenium关闭文件选择器对话框

我们在Jenkins盒子(运行linux)上使用Selenium-Webdriver来驱动Firefox来测试一个相当复杂的Web应用程序. Web应用程序需要上传照片进行测试,我们已经通过将sendkeys用于输入文件对话框来实现.不幸的是(可能由于上传器的工作方式,它是通过XHR而不是FORM帖子进行上传和上传)文件选择器对话框永远不会关闭.虽然这有点令人讨厌,但在过去,测试仍然没有通过.从selenium-2.45.0切换到selenium-2.53.1并将FireFox升级到45我们发现我们的测试现在失败了,因为文件选择器对话框导致元素不再可见(至少我们假设元素不再是对点击的反应是因为它们在文件对话框后面).

我意识到没有办法点击关闭对话框按钮,我尝试以各种方式发送转义键来关闭对话框,但我尝试过的任何工作:

((RemoteWebDriver)driver).getKeyboard().pressKey(Keys.ESCAPE);

由于在测试中运行的Jenkins服务器与由Selenium驱动的Firefox不同,因此Roboto和AutoIt不是一个选项.是否有某种方法可以触发关闭不涉及与对话框交互的对话框.我的想法是在页面中注入一些javascript来创建一个围绕文件输入的表单,然后提交表单(无处),然后重新加载页面,但事实证明这是不成功的.

File Upload Dialog

最佳答案
可能有一个点击事件传输到< input type =“file”>元素,用于打开文件对话框.

解决此问题的一种方法是通过重写方法来禁用内部单击.这段JavaScript将禁用每个< input type =“file”>的内部点击.元件:

((JavascriptExecutor)driver).executeScript(
    "HTMLInputElement.prototype.click = function() {                     " +
    "  if(this.type !== 'file') HTMLElement.prototype.click.call(this);  " +
    "};                                                                  " );

然后通过调用< input type =“file”>上的.sendKeys(“完整文件路径”)来上传文件.元件.

转载注明原文:java – Selenium关闭文件选择器对话框 - 代码日志