2
[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'不是指打开的选项卡

4

3 回答 3

1

有两种方法可以做到

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

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

更新


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

  after(:each) do
    @driver.quit
  end

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

@driver.close();
于 2012-11-08T14:43:35.873 回答
1

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

于 2013-07-19T12:45:08.160 回答
0

如果你使用的是黄瓜,你可以使用BEFORE/AFTER钩子。请参考stackoverflow 上的类似问题, 了解更多关于黄瓜的信息,请参考这个Cucumber Hooks

于 2013-07-19T11:47:25.417 回答