web-dev-qa-db-ja.com

カピバラのチェックボックスをチェックする方法は?

RspecとCapybaraを使用しています。

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">
121
John Dow

私は次のことがうまくいったことがわかりました:

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

# Uncheck
find(:css, "#cityID[value='62']").set(false)
151
Jon M

同じidで複数の要素を作成しないことをお勧めします。そうすることで(だけでなく)checkboxをエレガントに簡単にチェック/チェック解除できます。

check 'cityID'
uncheck 'cityID'

同じIDを持つ複数の要素を避けることができず、チェックボックス特定の値をチェックする必要がある場合、彼はそうすることができます

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

capybara入力操作の詳細については、こちらをご覧ください ここ

127
installero

Capybaraテストを実行すると、pageオブジェクトが取得されました。これは、チェックボックスのチェック/チェック解除に使用できます。 @buruzaemonがすでに述べたように:

名前、ID、またはラベルテキストでチェックボックスを見つけてチェックします。

Htmlに次のようなチェックボックスがあると仮定します。

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

これは次の方法で確認できます。

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

チェックを外すのは、page.uncheckメソッドを使用するのと同じです。

55
p1100i

最初に フォーム要素に一意のidsを与える が必要かもしれません。

しかし、Capybaraとチェックボックスに関しては、 Capybara :: Node :: Actions#check instance method を使用すると、名前、ID、またはラベルテキストでチェックボックスを検索およびチェックできます。

26
buruzaemon

ボックスがテキストに関連付けられている場合、たとえば「オプション3」、それからcapybara 3.0.3の時点でできること

check 'Option 3'
6
Obromios

私はこれが古い質問であることを知っていますが、私はこれを自分で取り組んでおり、上記のすべてを試しましたが、これが最終的に私のために働いたものです:

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

これが誰かに役立つことを願っています。 Capybara 2.4.4を使用しています。

6
Michael Cruz

見つけにくい場合は、:cssの代わりに:xpathを使用することもできます。

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

Chrome(および他のブラウザ)では、「要素を検査」できます。関心のある要素を右クリックすると、xpathがわからない場合は「copy xpath」が表示されます。今やる。

1
kulssaka

.set(true)が機能しなかったため、.clickを呼び出す必要がありました。

find(...).click

1
HectorPerez

この例では、すべてのチェックボックスがチェックされていないことも確認できます。

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

1
user3853159

古いトピックですが、別の解決策は次のとおりです。

check('Option 3', allow_label_click: true)

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

これにより、カピバラはその入力に接続されたイベントリスナーを待機するようになると思います。待機しないと、場合によっては苦痛になります。その入力にIDがない場合は、別のプロパティを選択します(1つでなければなりません)...