使用Capybara,当我已经切换到窗口时,如何切换到新窗口?

时间:2017-06-22 15:39:40

标签: ruby selenium rspec automated-tests capybara

我需要在我的帮助器中调用另一个帮助器(在新窗口中打开)并打开并切换到另一个窗口,但是当我尝试这样做时 - 我收到此错误:

Capybara::ScopeError:
   `switch_to_window` is not supposed to be invoked from `within`'s, `within_frame`'s' or `within_window`'s' block.

有没有办法打开并切换到另一个窗口?

[EDIT1]

def create_ticket(kind, products = [])
  visit('inventory/parcels/')
  products.each do |product|
    if product[:serialized]
      serialized = find_device(product[:status], product[:id])

所以这是find_device帮助器:

def find_device(status_id, product_id)
  within_window open_new_window do
  visit('inventory/items?per=25)

1 个答案:

答案 0 :(得分:0)

无法(当前)从within_window内部切换到另一个窗口(不依赖于特定于驱动程序的方法)。您可以切换到仅使用switch_to_window而不是within_window,但是您必须非常小心地手动管理范围堆栈,然后切换回原始窗口。一种更好的方法可能是重构您的测试,这样您就不需要同时在多个窗口之间跳跃。

话虽如此,现在Capybara的限制实际上是不必要的,并且可能会在下一个版本中放宽 - https://github.com/teamcapybara/capybara/pull/1882