Capybara - 如何查看是否选择了下拉元素?

时间:2016-02-22 00:40:08

标签: selenium drop-down-menu webdriver capybara html-select

我的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'

我可以在浏览器中看到它。

3 个答案:

答案 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 

虽然该选项可以在页面上的任何选项中,除非您使用了内部块或将查找范围限定为特定选择。