2013-09-24 47 views
5

在RSpec中,我可以使用这样的代码切换到弹出窗口,link,我如何在黄瓜步骤中做这样的事情?切换到黄瓜,水豚的弹出窗口

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 

回答

13

我不认为有这样做的黄瓜/水豚方式。

但你仍然可以使用这样的硒驾驶员的命令改变窗口:

#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变化来实现。

+2

水豚现在提供了一个用于与弹出窗口进行交互的DSL。请参阅下面的答案。 – Andrew

+0

请在下面使用Andrew的答案,因为如果您想在模式窗口关闭后访问主窗口,此实现将导致错误。 –

+0

如果您使用的是水豚,请不要使用此方法,特别是如果您要使用Chrome驱动程序。使用switch_to_window()方法时会遇到异常。 https://github.com/teamcapybara/capybara/issues/1861。请使用Andrew下面的答案。 – ibaralf

13

您可以使用您的黄瓜步骤Capybara与弹出窗口交互:

login_window = window_opened_by do 
    click_button 'Open Login Window' 
end 
within_window(login_window) do 
    fill_in :email, with: "[email protected]" 
    fill_in :password, with: "password" 
    click_button 'Log In' 
end 
+0

到目前为止最好的答案 –

+0

给这个人一些更多upvotes – Doydle

+0

这是正确的答案。 –

0

在一个简单的方法,我们可以做到这一点,没有within_window,无硒当地人。

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 - 是最后一个窗口

窗口函数返回所有窗口阵列。

另一种方式,使用页面的标题。

page.switch_to_window {title =='Google'}