我使用Selenium-WebDriver,黄瓜和Ruby API。我试图关闭最后一个窗口并切换回默认窗口继续与此交互。但是当我点击任何按钮时,我收到错误:'无法找到元素'
`Then(/^Click the Twitter icon$/) do
$driver = Selenium::WebDriver.for :firefox
$driver.manage.timeouts.implicit_wait = 2
$driver.manage.delete_all_cookies
$driver.get 'http://url.com'
$driver.manage.window.maximize
#Click control that opens new window
$driver.find_element(:xpath => "xpath_goes_here").click
#Switch to window
$driver.switch_to.window( $driver.window_handles.last ){
#Do actions in new window
$driver.find_element(:xpath => "xpath_goes_here").click
$driver.close
}
wait = Selenium::WebDriver::Wait.new(:timeout => 40)
wait.until {$driver.find_element(:xpath => "xpath_goes_here").click}
end`
答案 0 :(得分:2)
这是因为窗口的引用或id(selenium webdriver方面的句柄)设置为新窗口。关闭新窗口时,selenium webdriver中的此引用不会更改。
这可以通过在关闭窗口之前和之后调用selenium webdriver的window_handle函数来确定。如果在关闭窗口之前调用此方法,您将获得窗口的id。但关闭窗口后,如果你试图调用它,那么selenium webdriver将抛出错误说"没有这样的窗口:目标窗口已经因未知错误而关闭:找不到Web视图"
因此,如果要返回默认窗口,则必须再次切换窗口句柄,然后才能对该窗口执行任何操作。关闭新窗口后添加以下代码段:
$driver.switch_to.window( $driver.window_handles.last )
希望这有帮助。