如何回到第一个窗口并使selenium webdriver与之交互?

时间:2016-08-22 19:55:36

标签: ruby selenium selenium-webdriver webdriver

我使用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`

1 个答案:

答案 0 :(得分:2)

这是因为窗口的引用或id(selenium webdriver方面的句柄)设置为新窗口。关闭新窗口时,selenium webdriver中的此引用不会更改。

这可以通过在关闭窗口之前和之后调用selenium webdriver的window_handle函数来确定。如果在关闭窗口之前调用此方法,您将获得窗口的id。但关闭窗口后,如果你试图调用它,那么selenium webdriver将抛出错误说"没有这样的窗口:目标窗口已经因未知错误而关闭:找不到Web视图"

因此,如果要返回默认窗口,则必须再次切换窗口句柄,然后才能对该窗口执行任何操作。关闭新窗口后添加以下代码段:

 $driver.switch_to.window( $driver.window_handles.last )

希望这有帮助。