Selenium关闭文件选择器对话框

时间:2016-08-31 21:41:39

标签: java selenium firefox selenium-webdriver junit

我们在Jenkins盒子上运行Selenium-Webdriver(运行linux),以驱动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

2 个答案:

答案 0 :(得分:5)

可能会有一个点击事件传输到<input type="file">元素,这会打开文件对话框。

解决此问题的一种方法是通过覆盖方法来禁用内部click。这段JavaScript会禁用每个click元素的内部<input type="file">

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

然后通过调用.sendKeys("full file path")元素上的<input type="file">来上传文件。

答案 1 :(得分:0)

  1. 您可以将sendKeys(“\ path \ to \ your \ file”)用于输入元素而不点击任何内容 - 有时它可以正常工作。
  2. 有时会弹出对话框,以便您可以使用: 警报e = driver.switchTo()。alert()
  3. 使用编码的ui \ autoit
  4. 自动执行此对话框