2011-11-28 91 views
102

我正在使用Rspec和水豚。如何查看水豚的複選框?

如何編寫一個步驟來檢查checkbox?我試過check的價值,但它找不到我的checkbox。我不知道該怎麼辦,因爲我有不同的價值觀

這裏其實相同的ID代碼:

<input id="cityID" type="checkbox" style="text-align: center; opacity: 0;" value="61" name="cityID"> 
<input id="cityID" type="checkbox" style="text-align: center; opacity: 0;" value="62" name="cityID"> 
<input id="cityID" type="checkbox" style="text-align: center; opacity: 0;" value="63" name="cityID"> 
+4

您的投入shou沒有相同的ID - 它們應該具有相同的名稱,但具有不同的ID。 – SamStephens

回答

131

我發現我下面的工作:

# Check 
find(:css, "#cityID[value='62']").set(true) 

# Uncheck 
find(:css, "#cityID[value='62']").set(false) 
+0

謝謝@Jon M :) It works –

+0

很高興聽到它!也許你會把這個答案標記爲'接受',也許upvote它... :) –

+1

已經完成... :) –

1

你也可以使用:XPath的,而不是:CSS,如果你有一些問題找到它。

find(:xpath , '//*[@id="example"]').set(true)

在Chrome(和肯定其他瀏覽器),你可以在「檢查元素」,然後你有興趣在元素上單擊鼠標右鍵,有「複製XPath」如果你不知道什麼是XPath的, 你現在做。

48

運行水豚測試時,您得到了page對象。這可以用來檢查/取消選中任何複選框。正如@buruzaemon已經提到:

to find and check a checkbox by name, id, or label text.

所以讓我們假設你在你的HTML有一個複選框,如:

page.check('myid') 
page.check('MyLabel') 
page.check('myname') 

取消選中是一樣的:

<label> 
    <input type="checkbox" value="myvalue" name="myname" id="myid"> 
    MyLabel 
</label> 

你可以用這個檢查使用page.uncheck方法。

+1

可靠的答案,似乎比使用CSS選擇器接受的答案更清潔(即使這是檢查方法在封面下面做的) – agmin

+1

是的,這是最好的答案。它更乾淨,並且模仿用戶的操作。它不會污染帶有額外ID的表單,並且使測試易於閱讀。 –

+0

我同意這是更清潔。有趣的是,接受的答案與在水豚中實施「檢查」方法沒有多大區別。 'def check(locator,options = {}) find(:checkbox,locator,options).set(true) end' – bigtunacan

110

所以最好不要創建多個元素與同ID,使(而不是僅適用於),您可以輕鬆地檢查/取消選中複選框與優雅

check 'cityID' 
uncheck 'cityID' 

如果一個人不能避免多個元素具有相同ID,仍然需要檢查一個複選框具有一定價值,他可以這樣做

​​

更多在水豚輸入操作的信息,可以發現here

+2

最好不要使用相同的ID創建多個元素,因爲它不是有效的HTML。這應該不是一個問題,如果正確使用rails形成助手。 – ihaztehcodez

+0

我想補充說,複選框/取消選中只接受以下值:id,名稱或相關的標籤元素。 [這裏](https://kolosek.com/rails-capybara-setup/)你可以閱讀更多關於它。 –

4

我知道這是一個老問題,但我已經通過這個工作我自己,已經嘗試了所有上述情況,這是最終爲我工作:

find("input[type='checkbox'][value='#{cityID.id}']").set(true) 

希望這對某人有幫助。我正在使用水豚2.4.4。

1

您還可以檢查是否所有複選框都沒有被選中。

all('input [type = checkbox]')。each do | checkbox | checkbox.should_not be_checked 結束

1

.SET(真),我沒有工作,所以我不得不打電話。點擊:

find(...).click

+0

(1)我不認爲自己的「點擊」是一個有效的水豚命令(或者至少如果是,它似乎不在文檔上),(2)如果是,它可能會切換複選框,不確定它是開啓還是關閉 – NotAnAmbiTurner

0
check find(".whenever input")[:id] 

我想這會讓水豚等任何附加到該輸入的事件監聽器,如果它不等待,它有時是一個痛苦的屁股...... 如果該輸入沒有ID,請選擇另一個屬性(必須有一個)。 ..