【问题标题】:Getting Cucumber/Capybara to close and open another browser after scenarios在场景之后让 Cucumber/Capybara 关闭并打开另一个浏览器
【发布时间】:2011-08-10 22:26:04
【问题描述】:

假设我有 3 个场景大纲,我需要使用 Firefox 运行场景 1,关闭浏览器,然后使用 Chrome 运行场景 2,关闭浏览器,最后使用 Firefox 运行场景 3。 在每个场景之后,有什么方法可以关闭/退出 Cucumber/Capybara 中的浏览器?

到目前为止,我已经注册了两个驱动程序,一个用于 Firefox,一个用于 Chrome:

Capybara.register_driver :selenium_firefox do |app|
  Capybara::Driver::Selenium.new(app, :browser => :firefox)
end

Capybara.register_driver :selenium_chrome do |app|
  Capybara::Driver::Selenium.new(app, :browser => :chrome)
end

然后在 hooks.rb 中,我使用了一个“自定义”标签“@alternate_browser”

Before('@alternate_browser') do
  driver = Capybara.current_driver
  if driver == :selenium_firefox
    Capybara.current_driver = :selenium_chrome
  else
    Capybara.current_driver = :selenium_firefox
  end
end

有没有办法在每个场景之后强制关闭浏览器?

编辑:我试过了:

page.evaluate_script("window.close()")
page.execute_script("window.close()")

但是这两种说法都没有效果。

【问题讨论】:

    标签: ruby cucumber capybara


    【解决方案1】:

    这是你应该做的。

    • 停止关闭窗户。
    • 更改为显式浏览器标签(@firefox、@chrome)

    我没试过,但这应该可以。

    Capybara.register_driver :selenium_firefox do |app|
      Capybara::Driver::Selenium.new(app, :browser => :firefox)
    end
    
    Capybara.register_driver :selenium_chrome do |app|
      Capybara::Driver::Selenium.new(app, :browser => :chrome)
    end
    
    
    Before('@firefox') do
      Capybara.current_driver = :selenium_firefox
    end
    
    Before('@chrome') do
      Capybara.current_driver = :selenium_chrome
    end
    

    【讨论】:

    • 我在测试场景时遇到的问题是缓存/cookie 以某种方式导致场景中的第二个/第三个...示例失败。它仅在浏览器在运行一个示例后关闭、为下一个示例再次打开等情况下才有效。都在同一个场景中。这就是为什么我想知道是否有可能以某种方式强制关闭浏览器。
    • 您是否设法关闭了这些窗口?在某些情况下我需要关闭窗户。
    • 您可以这样做来清除会话。 “Capybara.current_session.driver.reset!”或者你可以用javascript关闭它。但是在下一个场景之前打开一个新窗口并选择该新窗口很重要。查看 Selenium 文档。 seleniumhq.org/docs/…
    猜你喜欢
    • 1970-01-01
    • 2018-06-09
    • 1970-01-01
    • 2012-12-15
    • 2020-05-10
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多