这是我的代码中的错误,还是 Selenium、RSpec 等中的错误?
我正在编写的 Cucumber 测试需要关闭并重新启动 Chrome 驱动程序。但是,我无法让第二个驱动程序正确关闭。下面的精简示例显示了这个问题:(下面的代码是 RSpec 只是因为它演示了这个问题而没有增加 Cucumber 的复杂性。)
require 'selenium-webdriver'
RSpec.configure do |config|
config.before(:suite) do
$driver = Selenium::WebDriver.for :chrome
end
end
describe "A potential rspec/selenium/chrome driver bug" do
it "doesn't play nice with at_exit" do
# quit the initial driver and start a new one.
$driver.quit
$driver = Selenium::WebDriver.for :chrome
end # it
end # end describe
at_exit do
$driver.quit
end
当我运行此代码时,我收到以下错误:
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/net/http.rb:878:in `initialize': Connection refused - connect(2) (Errno::ECONNREFUSED)
from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/net/http.rb:878:in `open'
from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/net/http.rb:878:in `block in connect'
from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/timeout.rb:52:in `timeout'
at_exit
我可以说,当块运行时,第二个 chromedriver 进程不再运行。这会导致问题,因为导致关闭的任何机制都会使 Chrome 窗口保持打开状态。
RSpec 的after(:suite)
机制按预期工作。Cucumber 是否有相应的机制(除了at_exit
,在这种情况下不起作用)?或者,有没有办法阻止 chomedriver 在at_exit
块运行之前退出(所以我可以使用预期的方法将其关闭quit
)?
我正在使用最新的 selenium 和 rspec 包在 Mac OS 10.9.5 上运行 Ruby 2.0.0。