对于 Capybara,我已经切换到 window,如何切换到新的 window?
With Capybara, how do I switch to the new window when i have already switched to the window?
我需要在我的助手中调用另一个助手(在新 window 中打开)然后打开并切换到另一个 window,但是当我尝试这样做时 - 我'我收到此错误:
Capybara::ScopeError:
`switch_to_window` is not supposed to be invoked from `within`'s, `within_frame`'s' or `within_window`'s' block.
有没有办法打开并切换到另一个window?
[编辑1]
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)
(目前)无法从 within_window
内部切换到另一个 window(不放弃驱动程序特定方法)。您可以切换到只在任何地方使用 switch_to_window
而不是 within_window
,但是您必须非常小心地手动管理作用域堆栈,然后切换回原始 windows。更好的方法可能是重组您的测试,这样您就不需要同时在多个 windows 之间跳跃。
话虽这么说,现在的 Capybara 实际上不需要限制,并且可能会在下一个版本中放宽 - https://github.com/teamcapybara/capybara/pull/1882
我需要在我的助手中调用另一个助手(在新 window 中打开)然后打开并切换到另一个 window,但是当我尝试这样做时 - 我'我收到此错误:
Capybara::ScopeError:
`switch_to_window` is not supposed to be invoked from `within`'s, `within_frame`'s' or `within_window`'s' block.
有没有办法打开并切换到另一个window?
[编辑1]
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)
(目前)无法从 within_window
内部切换到另一个 window(不放弃驱动程序特定方法)。您可以切换到只在任何地方使用 switch_to_window
而不是 within_window
,但是您必须非常小心地手动管理作用域堆栈,然后切换回原始 windows。更好的方法可能是重组您的测试,这样您就不需要同时在多个 windows 之间跳跃。
话虽这么说,现在的 Capybara 实际上不需要限制,并且可能会在下一个版本中放宽 - https://github.com/teamcapybara/capybara/pull/1882