0

在我的网络应用程序上,单击下载按钮后,会弹出一条消息,内容为“您要从该站点打开或保存“abc.txt”吗?” 页面底部将显示3 个按钮(“打开”、“保存”和“取消”) 。

我正在尝试使用以下代码关闭/退出此浏览器会话

@driver.execute_script "window.onbeforeunload = function(e){};"
@driver.quit

但是,浏览器没有(但应该)关闭。我正在使用Selenium Ruby Webdriver。请指导我解决此问题的方法。非常感谢。

请注意,使用上述代码,我可以关闭 IE9 浏览器,该浏览器会弹出消息“此页面要求您确认是否要离开 - 您输入的数据很多不会被保存”,并带有“离开页面”和“留在页面上”按钮成功。但是,如果弹出消息的内容为“您要从该站点打开或保存“abc.txt”吗?”,则代码不起作用。显示 3 个按钮(“打开”、“保存”和“取消”)。

4

2 回答 2

0

WebDriver 无法控制这些类型的“保存文件”对话框提示。

请仔细阅读有关此主题的这篇文章(注意,他的示例是用 Java 编写的,但它们都可以轻松移植,并且使用 Ruby 中的代码更少)。http://ardesco.lazerycode.com/index.php/2012/07/how-to-download-files-with-selenium-and-why-you-shouldnt/

因此,我建议甚至不要单击有问题的链接并尝试处理该对话框。相反,获取该href值并向其发起Net::HTTP请求,就像此 SO 响应向您展示了如何操作:https ://stackoverflow.com/a/4581116/1221475 。然后,您可以使用标准的 Ruby 和文件解析器检查文件的内容是否正确。

于 2013-06-14T06:00:46.027 回答
0

这是Dave Haefner的 hack 。它是为 Java/Selenium 组合编写的,但您可以轻松地将其转换为 Ruby 语法。

如果您不关心文件是否已下载,并且只想确认可以下载文件,则可以使用 HTTP 请求。您将收到文件的标题信息,而不是下载文件,其中包含内容类型和长度等内容。使用此信息,您可以确认该文件是您所期望的。

    String link = driver.findElement(By.cssSelector("download-link-element")).getAttribute("href");

    HttpClient httpClient = HttpClientBuilder.create().build();
    HttpHead request = new HttpHead(link);
    HttpResponse response = httpClient.execute(request);
    String contentType = response.getFirstHeader("Content-Type").getValue();
    int contentLength = Integer.parseInt(response.getFirstHeader("Content-Length").getValue());

    assertThat(contentType, is("application/octet-stream"));
    assertThat(contentLength, is(not(0)));
于 2019-03-11T12:52:10.357 回答