カピバラを使用して、選択ボックスにオプションとしてリストされている特定の値があることを確認するにはどうすればよいですか? Seleniumと互換性がある必要があります...
これは私が持っているHTMLです:
<select id="cars">
<option></option>
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="mercedes">Mercedes</option>
<option value="audi">Audi</option>
</select>
これは私がしたいことです:
Then the "cars" field should contain the option "audi"
代わりにカピバラのrspecマッチャー have_select(locator、options = {}) を使用してみてください:
#Find a select box by (label) name or id and assert the given text is selected
Then /^"([^"]*)" should be selected for "([^"]*)"$/ do |selected_text, dropdown|
expect(page).to have_select(dropdown, :selected => selected_text)
end
#Find a select box by (label) name or id and assert the expected option is present
Then /^"([^"]*)" should contain "([^"]*)"$/ do |dropdown, text|
expect(page).to have_select(dropdown, :options => [text])
end
価値があるのは、フィールドではなくドロップダウンメニューと呼ぶので、次のように記述します。
Then the "cars" drop-down should contain the option "audi"
あなたの質問に答えるために、これはこれを実装するためのRSpecコードです(テストされていません):
Then /^the "([^"]*)" drop-down should contain the option "([^"]*)"$/ do |id, value|
page.should have_xpath "//select[@id = '#{id}']/option[@value = '#{value}']"
end
Value属性の代わりにオプションテキストをテストしたい場合(これは より読みやすい シナリオに役立つ可能性があります)、次のように書くことができます:
page.should have_xpath "//select[@id = '#{id}']/option[text() = '#{value}']"
代替ソリューションとして、またxpathsに詳しくないので、同様の問題を解決するためにこれを行いました。
page.all('select#cars option').map(&:value).should == %w(volvo saab mercedes audi)
とてもシンプルですが、理解するのに少し時間がかかりました。
まあ、私が周りにいて、質問を見て(そして今日テストしている)、私のやり方を投稿することに決めました:
within("select#cars") do
%w(volvo saab mercedes audi).each do |option|
expect(find("option[value=#{option}]").text).to eq(option.capitalize)
end
end
Then I should see "audi" within "#cars"
トリックを行う必要があります