在Cucumber和Capybara中切换到弹出窗口

8
在RSpec中,我可以使用这样的代码切换到弹出窗口,链接,那么在Cucumber步骤中我该如何做同样的事情呢?
login_window = page.driver.find_window('PPA_identity_window')
    main_window = page.driver.find_window('')

    # We use this to execute the next instructions in the popup window
    page.within_window(login_window) do
      #Normally fill in the form and log in
      fill_in 'email', :with => "<your paypal sandbox username>"
      fill_in 'password', :with => "<your paypal sandbox password>"
      click_button 'Log In'
    end
3个回答

26

你可以在Cucumber步骤中使用Capybara来与弹出窗口交互:

login_window = window_opened_by do
  click_button 'Open Login Window'
end
within_window(login_window) do
  fill_in :email, with: "email@example.com"
  fill_in :password, with: "password"
  click_button 'Log In'
end

迄今为止最佳答案 - C.J.
对于使用Capybara技术的情况,这个是最适合的例子。 - Sunil Kumar

15

我认为并没有黄瓜/卡比巴拉方法可以这样做。

但是您仍然可以使用Selenium驱动程序命令来更改窗口,如下所示:

    #Get the main window handle
    main = page.driver.browser.window_handles.first
    #Get the popup window handle
    popup = page.driver.browser.window_handles.last

    #Then switch control between the windows
    page.driver.browser.switch_to.window(popup)

编辑: 由于新的 DSL 更改已经实施,因此以下是 Andrews 的答案。


2
Capybara现在提供了一个用于与弹出窗口交互的DSL。请查看下面的我的答案。 - Andrew
请使用下面Andrew的答案,因为这种实现方式会在模态窗口关闭后访问主窗口时导致错误。 - jetset
如果您正在使用Capybara,请不要使用此方法,特别是如果您将使用Chrome驱动程序。当使用switch_to_window()方法时,您将遇到异常情况。https://github.com/teamcapybara/capybara/issues/1861。请使用Andrew下面的答案。 - ibaralf

-2
以简单的方式,我们可以做到这一点,不需要 within_window 和 selenium natives。
page.switch_to_window page.windows.first

page.switch_to_window page.windows.last 

或者

page.switch_to_window page.windows[0]

page.switch_to_window page.windows[-1]

0 - 是第一个窗口
-1 - 是最后一个窗口

windows 函数返回所有窗口的数组。

另一种方法是使用页面标题。

page.switch_to_window { title == 'Google' }


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接