2017-09-26 68 views
0

Click for image)我正在編寫一個項目來編寫測試登錄功能的場景。由於某種原因,水豚不訪問動態元素: 重現步驟: 1)訪問Redfin.com(例如) 2)單擊登錄按鈕 3)出現動態彈出對話框 4)單擊「繼續電子郵件「,然後嘗試輸入詳細信息並點擊提交。如何使用黃瓜和水豚處理動態元素

我找不到任何帶有find(#)的元素,並且無法點擊提交或輸入詳細信息。

另外我相信webapp是用React構建的。 請讓我知道如何處理這個。

<div class="emailSignInButtonWrapper" style="position: relative;"> 
<button class="button Button tertiary emailSignInButton v3" type="button" tabindex="0" data-rf-test-name="submitButton"> 
<span> 
<span class="signInText">Continue with Email</span> 
</span> 
</button> 
+1

我不知道如何代碼的樣子,一個例子會很好。然而,正如你所提到的,應用程序是用React編寫的,我的第一個猜測是使用'js:true'切換到'Capybara.javascript_driver'。你可能會覺得這很有用。 https://github.com/teamcapybara/capybara#drivers – hyphenbash

+0

@hyphenbash對於html代碼,您可以訪問(redfin.com網站), – user8673269

+0

[切換到黃瓜,水豚的彈出窗口](https:// stackoverflow.com/questions/18983684/switch-to-popup-windows-in-cucumber-capybara) –

回答

0

你正在談論的元素都沒有ID,這樣一個CSS發現使用#<id>find('#my_button').click)是行不通的。但是點擊該按鈕,你就應該能夠做到

click_button('Continue with Email') # case of the text matters 

click_button(class: 'emailSignInButton') 

這一切都假定您使用的驅動程序與支持JS水豚 - https://github.com/teamcapybara/capybara#drivers

這裏的代碼演示它可以工作,如果使用支持JS的驅動程序

require 'capybara/dsl' 
require 'selenium-webdriver' 

session = Capybara::Session.new(:selenium_chrome) 
session.visit "https://www.redfin.com" 

session.click_link('Sign In', href: nil) 

session.click_button('Continue with Email') 
+0

我試圖使用這些沒有運氣,得到一個錯誤_無法找到可見按鈕零類[emailSignInButton](水豚:: ElementNotFound)_ – user8673269

+0

@ user8673269然後您要麼實際上沒有使用硒進行這些測試,要麼您的Capybara.default_max_wait_time對於您正在測試的硬件來說太低。嘗試截取屏幕截圖,查看實際頁面狀態爲 –

+0

@ user8673269添加了代碼,顯示它的工作原理 - 很可能您實際上並沒有使用硒標籤 –

0

這裏' s什麼工作在我的紅場網站:

scenario "bring up signup form on redfin" do 
    visit 'https://www.redfin.com' 
    find('a', :text => 'Sign In').click 
    click_button('Continue with Email') 
end