【问题标题】:How to close all the windows before the next test in a test suite?如何在测试套件中的下一次测试之前关闭所有窗口?
【发布时间】:2012-11-08 04:26:41
【问题描述】:
[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' 不是指打开的标签

【问题讨论】:

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


    【解决方案1】:

    两种方法

    1. 符合您使用 JS 的技术。您首先需要切换回您的第一个浏览器窗口 (window_handle),然后执行“window.close()”。 (不推荐)(不知道为什么它现在不适合你,你升级了服务器版本还是不同的浏览器?)

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

    更新


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

      after(:each) do
        @driver.quit
      end
    

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

    @driver.close();
    

    【讨论】:

    • 我在每次测试结束时都使用了 driver.quit,但他们以 An error occurred in an after hook Selenium::WebDriver::Error::NoSuchWindowError: getUrl execution failed; The window could not be found 失败了
    • 不要两者都做,只做选项 2 并且只做一次。看看我的更新。
    • 我都分别尝试过。在每个测试中,我打开两个窗口并想在第二个测试开始之前关闭它们。使用page.driver.quit 得到Failure/Error: Unable to find matching line from backtrace Errno::ECONNREFUSED: Connection refused - connect(2)
    • 当我使用 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' does not refer to an open tab
    • 完美。谢谢
    【解决方案2】:

    page.driver.browser.close 在最后关闭当前选项卡,最后一个(第二个)选项卡在每个示例之后自行关闭。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2022-01-24
        • 2021-05-21
        • 1970-01-01
        • 2018-07-23
        • 1970-01-01
        • 1970-01-01
        • 2021-09-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多