通过Capybara关闭窗口

时间:2016-05-16 04:44:43

标签: ruby capybara

我正在尝试为capybara自动化启动浏览器。浏览器自动填充“错误窗口”(非浏览器窗口)。

我需要在窗口上“关闭/单击确定”以打开浏览器。我尝试使用“AutoIT”可执行文件处理此弹出窗口。当我手动运行AutoIT文件时,可执行文件成功处理它。

我无法通过水豚脚本执行。代码如下

ses = Capybara::Session.new(:selenium)
IO.popen('c:\ruby\handler.exe') #- Tried this step to execute AutoIT .exe file before visit url step. 

这里没有运气。只有在引用对象时才会显示弹出窗口。

ses.execute_script "window.close()"  #- Tried this step to close the window with  the ses object. no luck in this too.

ses.visit "https://google.com"

有没有办法以编程方式关闭窗口?

3 个答案:

答案 0 :(得分:1)

您似乎应该能够使用Chrome浏览器注册自定义selenium驱动程序并指定命令行选项以禁用所有扩展程序,并使用以下驱动程序注册表代码:

Capybara.register_driver :selenium do |app|
  Capybara::Selenium::Driver.new(app, :browser => :chrome, 
                                      :switches => %w[--disable-extensions])
end

ses = Capybara::Session.new(:selenium)
...

我使用信息here和可用命令行选项列表here将它放在一起(虽然我自己没有对此进行测试)。

答案 1 :(得分:0)

有一些弹出错误的方法是这样的:

1)最简单的方法是做你的方法 - 在调用capybara访问导致错误弹出的网站之前执行自动脚本。您应确保正在执行的自动脚本在尝试关闭之前等待窗口显示(请参阅:https://www.autoitscript.com/autoit3/docs/functions/WinWait.htm以供参考)。

2)你可以执行另一个ruby脚本/线程(请记住ruby中的线程有点复杂),它将在后台执行autoit脚本(在循环中)并等待成功的响应。

3)您可以尝试禁用导致错误的任何内容在浏览器中弹出。

如果您在解决问题时仍然遇到问题,我将能够在几个小时内按照方法1和2提供一些代码。

答案 2 :(得分:0)

错误Failed to load Extension. Loading of unpacked extensions are disabled by administrator.表示您的系统已设置为禁用Chrome扩展程序。因此,即使您设法关闭它,您也可能无法使用Selenium自动化Chrome,因为它需要以驱动程序作为扩展程序启动Chrome。

让它发挥作用的最佳机会可能是禁用限制或将扩展名添加到白名单。

以下是有关此问题的链接: https://bugs.chromium.org/p/chromedriver/issues/detail?id=639