2014-01-17 115 views
1

我正在用水豚點擊一個複選框,但無論如何它似乎無法找到它。我能夠在跨度內正確找到跨度和標籤,但不能實際需要輸入。水豚:找不到元素

這裏是複選框

<span class="checkbox tos"> 
    <input id="agreement" name="agreement" onclick="agreeValidate();" type="checkbox" value="false"> 
    <label for="agreement">I accept the <a href="http://www.dev.com:3000/terms" target="_blank">Terms of Use</a>, <a href="http://www.dev.com:3000/privacy" target="_blank">Privacy Policy</a>, and am at least 13 years old</label> 
</span> 

這裏是一些我曾嘗試

page.check('agreement') 
find(:css, '#agreement').set(true) 
find('#agreement').set(true) 
find('#agreement').click 

不過的事情,他們都給予我同樣的錯誤

Unable to find css "#agreement" (Capybara::ElementNotFound) 

我也我想知道這些方法中的任何一個會在點擊複選框時觸發onclick方法嗎?我覺得find(:css, '#agreement').set(true)不會觸發onclick事件。但是,我不確定其餘的。

編輯** 我也試過通過xpath選擇元素。下面是我發現

find(:xpath, '//*[@id="registration"]/span[2]') 

這是能夠找到span元沒問題

find(:xpath, '//*[@id="registration"]/span[2]/input') 

這不能找到我需要的元素的各種事情,但這個XPath正確選擇在鉻合金元素控制檯

find(:xpath, '//*[@id="agreement"]') 

這不能找到我需要的元素,但XPath的選擇中鉻合金控制檯元素

find(:xpath, '//*[@id="registration"]/span[2]/label') 

這能夠在span中找到label元素,沒有問題。

回答

1

可以使用的cheatsheet爲水豚在這裏:http://learn.thoughtbot.com/test-driven-rails-resources/capybara.pdf

這是一個壞主意,通過CSS與形式的互動。一個更好的方式來做這樣的事情:

check 'I accept cool agreement' 
click_button 'Submit' 

所以你不需要知道元素或類的ID。只需使用用戶可以在頁面上看到的內容。

+2

你能證明你的觀點(與例子/原因),爲什麼通過類/ ID與表單交互是一個壞主意嗎?至少根據我的經驗,這些改變的可能性比問題的文本要小得多。 – pixelearth