2016-03-08 77 views
1

無法找到帶有水豚的複選框。無法找到帶有水豚的複選框

這是HTML:

<div class='check-group'> 
<div class='checkbox'> 
    <input type="checkbox" name="accepts_fcra" id="accepts_fcra" value="1" /> 
    <label for="accepts_fcra"><span>Some text <a title="FCRA" target="_blank" href="https://www.google.com/fcra">FCRA</a> some text.</span></label> 
</div> 
</div> 

現在我要檢查id爲 「accepts_fcra」 複選框。

我已經嘗試了一堆東西,都幾乎回到同一件事:「無法找到(方法用於查找複選框)」

一些嘗試:

check("#accepts_fcra") 
Capybara::ElementNotFound: Unable to find checkbox "#accepts_fcra" 

find("#accepts_fcra").set true 
Capybara::ElementNotFound: Unable to find css "#accepts_fcra" 

within("div.checkbox") do 
    find(:xpath, "//input[@id='accepts_fcra']") 
end 
Capybara::ElementNotFound: Unable to find xpath "//input[@id='accepts_fcra']" 

但2複選框上方的類「.check-group」和「.checkbox」已找到,但未找到複選框。思考?

回答

2

想通了,想這:

find("accepts_fcra", :visible => false).click 

和它的工作,該元素是「看不見的」,所以纔不得不通過在與查找和點擊爲它工作。

+1

如果這是測試應用程序,不建議與不可見元素進行交互。此外,不是所有的Capybaras驅動程序都會點擊一個不可見的元素,以便您的測試成爲驅動程序特定的,並且在您使用的任何驅動程序切換爲不點擊不可見元素時,未來可能會中斷測試。相反,你應該執行用戶會執行的任何操作,也許點擊標籤 - 'find('label [for =「accepte_fcra」]')。點擊'例如 –

+0

@Tom,嘗試了你的方法,但它不起作用,它實際上點擊了單選按鈕的文本/標籤內的鏈接。 但是複選框實際上對用戶不可見,我可以在物理上看到它,所以在這種情況下,我認爲它應該沒問題,如果實際元素實際上不可見,我認爲您的觀點更有意義。 – Farooq

+0

如果Capybara說它不可見,我敢打賭,你在屏幕上看到的實際上並不是複選框 - 它更可能是使用圖像(通過JS/CSS)來複選多個複選框瀏覽器。既然你是上面的HTML,不會在標籤中顯示一個無法預測的鏈接:)你真的應該從實況頁面(在JS小部件運行之後)看HTML,並且弄清楚用戶會是什麼樣的實際元素點擊而不是讓水豚點擊不可見的元素 - 當前寫入的測試將停止工作,因爲驅動程序更新 –