【问题标题】:With Capybara, how do I switch to the new window when i have already switched to the window?使用Capybara,我已经切换到新窗口,如何切换到新窗口?
【发布时间】:2017-11-25 23:59:55
【问题描述】:

我需要在我的助手(在新窗口中打开)中调用另一个助手并打开并切换到另一个窗口,但是当我尝试执行此操作时 - 我收到此错误:

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

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

[编辑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)

【问题讨论】:

  • 如果您发布一些有问题的代码会有所帮助。
  • @mmichael 我添加了导致错误的代码。提前致谢
  • within_window(switch_to_window(windows.last)) do YOUR CODE end 对你有用吗?
  • 是否在另一个 within_window 块内调用了 create_ticket?如果你发布了足够多的代码,我们可以真正知道发生了什么,那真的很有帮助。
  • 不,我收到“没有这样的会话”错误(认为这是因为驱动器没有打开新窗口并试图切换到它

标签: ruby selenium rspec automated-tests capybara


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-31
    • 2019-01-11
    • 2020-12-12
    • 2015-05-01
    • 2017-06-04
    • 1970-01-01
    • 2011-11-28
    相关资源
    最近更新 更多