Tom*_*ghe 41 selenium ruby-on-rails cucumber capybara
如何使用Capybara检查选择框是否将某些值列为选项?它必须与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>
Run Code Online (Sandbox Code Playgroud)
这就是我想要做的:
Then the "cars" field should contain the option "audi"
Run Code Online (Sandbox Code Playgroud)
Jef*_*rin 64
尝试使用capybara rspec matcher has_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
Run Code Online (Sandbox Code Playgroud)
Jo *_*iss 22
对于它的价值,我称之为下拉菜单,而不是字段,所以我写道:
Then the "cars" drop-down should contain the option "audi"
Run Code Online (Sandbox Code Playgroud)
要回答你的问题,这里是实现这个(未经测试)的RSpec代码:
Then /^the "([^"]*)" drop-down should contain the option "([^"]*)"$/ do |id, value|
page.should have_xpath "//select[@id = '#{id}']/option[@value = '#{value}']"
end
Run Code Online (Sandbox Code Playgroud)
如果要测试选项文本而不是value属性(这可能会产生更多可读方案),您可以编写:
page.should have_xpath "//select[@id = '#{id}']/option[text() = '#{value}']"
Run Code Online (Sandbox Code Playgroud)
Mau*_*aes 12
作为替代解决方案,并且由于我不熟悉xpath,我这样做是为了解决类似的问题:
page.all('select#cars option').map(&:value).should == %w(volvo saab mercedes audi)
Run Code Online (Sandbox Code Playgroud)
它很简单,但花了我一些时间才弄明白.
Dan*_*iel 11
好吧,因为我在附近,看到了问题(并且今天进行了测试)决定发布我的方式:
within("select#cars") do
%w(volvo saab mercedes audi).each do |option|
expect(find("option[value=#{option}]").text).to eq(option.capitalize)
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27218 次 |
| 最近记录: |