如何在测试套件中进行下一次测试之前关闭所有窗口?

时间:2012-11-08 04:26:41

标签: ruby-on-rails testing selenium rspec selenium-chromedriver

[7] pry(#<RSpec::Core::ExampleGroup::Nested_1>)> page.execute_script "window.close()"
Selenium::WebDriver::Error::NoSuchWindowError: Script execution failed. Script: window.close();
 The window could not be found

[8] pry(#<RSpec::Core::ExampleGroup::Nested_1>)> page.driver.browser.window_handles
=> ["f1-2"]

我打开了一个带有两个标签的浏览器,上面的命令关闭了一个,但最后一个标签永远不会关闭。它是开放的,但当我尝试运行page.execute_script "window.close()"时,它会出现上述错误。

page.driver.browser.window_handles.each do |handle|
  page.driver.browser.switch_to.window(handle)
  page.execute_script "window.close()"
end

以上代码在某个时候对我有用,但不再起作用了。它给出了同样的错误。

更新:

当我使用时,

page.driver.browser.window_handles.each do |handle| 
   page.driver.browser.switch_to.window(handle) 
   page.driver.browser.close 
end

它会出现以下错误Selenium::WebDriver::Error::UnknownError: 'auto_id'未引用打开的标签

3 个答案:

答案 0 :(得分:1)

你可以采取两种方式

  1. 符合您使用JS的技术。您首先需要切换回第一个浏览器窗口(window_handle),然后执行&#34; window.close()&#34;。 (不是首选)(不确定为什么它现在不适合你,你升级服务器版本或不同的浏览器?)

  2. 只需使用@driver.quit(首选)

  3. <强>更新


    只需写一次。这将关闭所有窗口。

      after(:each) do
        @driver.quit
      end
    

    如果您只想关闭一个浏览器标签/窗口/弹出窗口,请切换到该window_handle然后执行

    @driver.close();
    

答案 1 :(得分:1)

page.driver.browser.close关闭当前标签,最后(第二个)标签在每个示例后关闭。

答案 2 :(得分:0)

如果你使用黄瓜,你可以使用BEFORE/AFTER钩子。请参考similar question on stackoverflow  有关黄瓜的更多信息,请参阅此Cucumber Hooks