おそらくこれを行うより良い方法があり、100回コピー貼り付けることができます。Capybara/Rspec:複数のラジオボタンを記入
しかし、本質的に私は多くのラジオボタン(正確には95)を持つフォームページを持っています。それでpage.find(:xpath)
〜trigger('click')
を使って
XPathは、このようなビットに見える:
page.find(:xpath, '/html/body/div/div[2]/div/div[2]/form/div[2]/table/tbody/tr[1]/td[2]/div/label').trigger('click')
TR [x]が選択するTD [X]された状態で、ラジオボタンオプションの行ごとに上がる(1-10)
私は実際には、各TD毎に1〜10の間の乱数を選んで、オートメーションテスト(ちょうどそれが動作することを確認する)が必要です。
forループのいくつかの並べ替えはこれを達成するだろうか? (ないルビーを熟知し、これは、私はちょうど簡単にGoogleから引き上げものですイム)
for i in 1..85
$h = 1 + rand(10)
page.find(:xpath, '/html/body/div/div[2]/div/div[2]/form/div[2]/table/tbody/tr[i]/td[h]/div/label').trigger('click')
end
だろうと仕事:ような何か?
編集:ここでは、行のHTMLです:
<tr class="all no-rate complete" data-original="2" change-check="false" the-row="17">
<td class="face">
<td class="face">
<td class="face">
<td class="face">
<div class="radio-inline radio-inline--empty">
<input id="set_stuff_17_rating_3" type="radio" name="set[stuff][17][rating]" value="3" data-control="" data-rating="" filter-class="complete">
<label class="integer opt" for="set_stuff_17_rating_3">Number Rating</label>
</div>
</td>
<td class="face">
<td class="face">
<td class="face">
テーブルまたはdivには、クラスまたはID、またはそれらを識別するテキストがありませんか?そのような長いxpathsを使用すると、本当に信じられないほど壊れやすいテストにつながります。私はそのxpathを使用しなければならなかった場合、 '行= page.all(:xpath、 '/ html/body/div/div [2]/div/div [2]/form/div [2] /テーブル/ tbody/tr '、カウント:85); rows.each {| row | row.find(:xpath、 ".//td[#{rand(10)+1}]/div/label").click}'私はそれが何が起こっているのかを明確にしていると思うので、 85または95あなたの質問に1つ、もう1つはあなたのコードに言いました –
@TomWalpole彼らはすべて同じクラス名を共有していますので、私はそのIDを使ってみました...しかし何らかの理由で、 "capybaraが機能しないためのセレクタメソッドを選んでください。私はxpathセレクタで" find "を使うことになりました。 私はIDがうまくいかない理由は分かりません。 – msmith1114
しかし、祖先のテーブルにはIDがありますか?そういうものはありませんか?私は選択がうまくいかないと思うのは、ラジオ/チェックボックスが非表示になっています - これはラベルをクリックしている理由です(FYI Capybara 2.8がリリースされると、ラジオ/チェックボックスがノーであれば自動的にラベルをクリックします)。私が見ることができるように、ページ全体のhtmlを添付してください。 –