我的HTML
<select id="auto_policy_autos_attributes_0_ownership" name="auto_policy[autos_attributes][0][ownership]">
<option value="Owned">Owned</option>
<option value="Financed">Financed</option>
<option value="Leased" selected="selected">Leased</option></select>
我可以选择
find('select#auto_policy_autos_attributes_0_ownership option[value="Leased"]')
正确,但如何查看是否已经检查过?
我试过
find('select#auto_policy_autos_attributes_0_ownership option[value="Leased" selected="selected"]')
但我得到
Selenium::WebDriver::Error::InvalidSelectorError: invalid selector:
An invalid or illegal selector was specified
我有希望
'select#auto_policy_autos_attributes_0_ownership option[value="Leased"], selected')).to be
但我得到假阳性
'select#auto_policy_autos_attributes_0_ownership option[value="Owned"], selected')).to be
返回true,即使我选择了Leased with
select 'Leased', from: 'auto_policy_autos_attributes_0_ownership'
我可以在浏览器中看到它。
答案 0 :(得分:1)
您可以使用be_selected
matcher:
expect(@session.find('select#auto_policy_autos_attributes_0_ownership option[value="Leased"]')).to be_selected
答案 1 :(得分:1)
一个选项是
expect(has_select?('auto_policy_autos_attributes_0_ownership', selected: 'Leased')).to be true
答案 2 :(得分:0)
这正是capybara has_select matcher专为
设计的expect(page).to have_select('auto_policy_autos_attributes_0_ownership', selected: 'Leased')
描述了您正在检查的内容 - 具有特定选项的特定选择元素,并在发生故障时提供了一条很好的错误消息。
如果你真的想坚持使用谓词匹配器,你也可以这样做
expect(find(:option, 'Leased')).to be_selected
虽然该选项可以在页面上的任何选项中,除非您使用了内部块或将查找范围限定为特定选择。