Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何关闭带有弹出消息的IE9浏览器会话;是否要打开或保存文件";显示_Ruby_Webdriver_Selenium Webdriver - Fatal编程技术网

Ruby 如何关闭带有弹出消息的IE9浏览器会话;是否要打开或保存文件";显示

Ruby 如何关闭带有弹出消息的IE9浏览器会话;是否要打开或保存文件";显示,ruby,webdriver,selenium-webdriver,Ruby,Webdriver,Selenium Webdriver,在我的web应用程序中,单击下载按钮后,页面底部将显示一条弹出消息,内容为“您想从该网站打开或保存abc.txt吗?”以及3个按钮(“打开”、“保存”和“取消”) 我正在使用以下代码关闭/退出此浏览器会话: @driver.execute_script "window.onbeforeunload = function(e){};" @driver.quit 但是,浏览器未(但应)关闭。我使用的是Selenium Ruby Webdriver。请给我一个解决这个问题的方法。非常感谢 请注意,使

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

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

@driver.execute_script "window.onbeforeunload = function(e){};"
@driver.quit
但是,浏览器未(但应)关闭。我使用的是Selenium Ruby Webdriver。请给我一个解决这个问题的方法。非常感谢


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

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

请仔细阅读这篇关于这个主题的文章(注意,他的例子是用Java编写的,但是它们都可以很容易地移植,并且用Ruby编写的代码更少)

因此,我建议不要点击有问题的链接并尝试处理对话框。相反,抓取
href
值并像这样向其发起
Net::HTTP
请求,以便响应向您展示如何执行:。然后,您可以使用标准的Ruby和文件解析器来检查文件的正确内容。它是为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)));