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

[7] pry(#)> page.execute_script "window.close()" Selenium::WebDriver::Error::NoSuchWindowError: Script execution failed. Script: window.close(); The window could not be found [8] pry(#)> 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'不引用打开的选项卡

有两种方法可以做到

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

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

更新


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

  after(:each) do @driver.quit end 

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

 @driver.close(); 

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

如果你正在使用黄瓜,你可以使用BEFORE/AFTER钩子。请参阅stackoverflow上的类似问题以获取更多关于黄瓜的信息,请参考这个黄瓜钩子