我正在尝试更新代码,因为当前正在运行时收到以下弃用警告:

“不建议使用警告:不建议将字符串参数传递给#within_window。传递窗口对象或lambda。”

这是代码:

new_window=page.driver.browser.window_handles.last
    page.within_window new_window do
        expect(current_url).to eq("url")
    end
page.driver.browser.switch_to.window(page.driver.browser.window_handles.last)

我应该如何编辑以上内容,以便不再收到弃用警告?谢谢!

最佳答案

within_window方法已更改为可以使用Capybara::Window或proc/lamda。不建议使用window_handles.last返回的字符串来查找窗口。

要获取最后的Capybara::Window,请使用 windows method。它的工作类似于window_handles所做的工作:

new_window = windows.last
page.within_window new_window do
    expect(current_url).to eq("url")
end

请注意,文档指出“未定义返回数组中窗口的顺序。驱动程序可以按窗口的创建时间对其进行排序,但这不是必需的。”我认为使用window_handles时也是如此,因此可以安全地假设最后一个窗口是新窗口。

但是,在可能的情况下,最好通过一些特定的东西(例如标题)来定位窗口:
within_window(->{ page.title == 'New window title' }) do
  expect(current_url).to eq("url")
end

关于capybara - 不建议将字符串参数传递给#within_window,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25436923/

10-10 21:59