浏览器窗口可能已关闭。 (硒:: webdriver的::错误::不明错误)

时间:2013-04-22 15:14:27

标签: ruby selenium cucumber capybara selenium-webdriver

我一起运行时有多个功能抛出此错误。如果我自己运行场景,则没有问题。我认为问题是弹出窗口是在测试运行期间生成的,并且没有正确关闭。我有一个After钩子中的代码,它关闭所有打开的窗口,除了第一个打开的窗口。

错误:会话[2c50a228-3ad7-a544-a6ca-5d173b86bc86]没有驱动程序。浏览器窗口可能已关闭。 (硒::的webdriver ::错误::不明错误)

我在代码中添加了一堆print语句来获取当前状态:
之后:会话 - > #<>豚::会话:0x00000100f811b8>
之前:司机 - >硒
之前:会话对象 - #<> Capybara ::会话:0x00000100f811b8>

之前:(开始)驱动程序对象#<> Capybara :: Selenium ::驱动程序:0x000001028ad790>

在此特定场景失败之前的情景,这是罪魁祸首,但为什么?谁能指出我正确的方向?

挂钩后

#assume ONLY last window opened is to be closed
page.driver.browser.switch_to.window(page.driver.browser.window_handles.last)
page.execute_script "window.close();"

#switch back to first window opened, make it the default window now
page.driver.browser.switch_to.window(page.driver.browser.window_handles.first)  

#assume ONLY last window opened is to be closed page.driver.browser.switch_to.window(page.driver.browser.window_handles.last) page.execute_script "window.close();" #switch back to first window opened, make it the default window now page.driver.browser.switch_to.window(page.driver.browser.window_handles.first)
ENV: 水豚(2.0.3)
黄瓜(1.1.9)
selenium-webdriver(2.29.0)
ruby 1.9.3p0

2 个答案:

答案 0 :(得分:1)

require 'selenium-webdriver'

driver = Selenium::WebDriver.for :firefox
driver.get "https://www.google.co.in/"
address = driver.find_element(:link_text, "Gmail").attribute('href')
driver.execute_script( "window.open()" )
p driver.window_handles.length
p driver.window_handles.first #=> "{f17eac79-daf9-4a6c-a1ff-1b524fef9faf}"
driver.switch_to.window( driver.window_handles.last )
driver.get address
driver.execute_script "window.close()"
driver.execute_script "window.close()"
# => Window not found. The browser window may have been closed. (Selenium::WebDriver::Error::NoSuchWindowError)

在上面的代码中,我只是尝试重新生成错误,并且它发生了。Error非常符合逻辑,因为我试图关闭已经关闭的,不存在的窗口。

现在我想以这种方式调试:

p driver.browser.window_handles.length # if this is 0,then below line obvious throw error.
page.driver.browser.switch_to.window(page.driver.browser.window_handles.last)
page.execute_script "window.close();"
p driver.browser.window_handles.length # if this is 0,then below line obvious throw error.
page.driver.browser.switch_to.window(page.driver.browser.window_handles.first)

现在调试并告诉我你的结果。

答案 1 :(得分:0)

解决方案是首先使窗口最大化。我还没有找到最大化窗口的方法。在测试过程中,我手动单击最大化浏览器按钮,测试运行完美。

https://github.com/fahenao/_bot