capybara:find(element)使用selector来定位复杂的属性名称

Pie*_*rre 11 ruby ruby-on-rails cucumber capybara

使用黄瓜和水豚来测试rails应用程序.假设我无法更改标记,我可以使用capybara在充满类似tds和selects 的页面中选择以下选择吗?

<td>
  <select name="attributes[ruby][category]">
    <option value="2" selected="selected">Languages</option>
    <option value="3">Communication</option>
  </select>
</td>
Run Code Online (Sandbox Code Playgroud)

这似乎失败了(我假设因为嵌套的"["和"]").

find("select[name=attributes[ruby][category]]")
Run Code Online (Sandbox Code Playgroud)

转义也不起作用.思考?

mar*_*aro 20

你可以尝试find('select', :name => 'attributes[ruby][category]')find_field('attributes[ruby][category]').

  • maro的第一个答案不再适用(在Capybara 2.5.0中它给出:`ArgumentError:无效键:name,应该是:count,:minimum,:maximum,:between,:text,:visible,:exact,:match ,:wait`)但我赞成,因为使用`find_field`是一个完美的解决方案. (14认同)

And*_*ite 5

我认为您需要引用属性值:

find("select[name='attributes[ruby][category]']")
Run Code Online (Sandbox Code Playgroud)

但是 maro 建议使用 find_field 是一种更简洁的方法。