[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'
未引用打开的标签
答案 0 :(得分:1)
你可以采取两种方式
符合您使用JS的技术。您首先需要切换回第一个浏览器窗口(window_handle),然后执行&#34; window.close()&#34;。 (不是首选)(不确定为什么它现在不适合你,你升级服务器版本或不同的浏览器?)
只需使用@driver.quit
(首选)
<强>更新强>
只需写一次。这将关闭所有窗口。
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