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

时间:2011-10-05 20:45:44

标签: ruby-on-rails ruby cucumber capybara

使用黄瓜和水豚来测试rails应用程序。假设我无法更改标记,是否可以使用capybara在充满类似td s和select s的页面中选择以下选项?

<td>
  <select name="attributes[ruby][category]">
    <option value="2" selected="selected">Languages</option>
    <option value="3">Communication</option>
  </select>
</td>

这似乎失败了(我假设是因为嵌套的“[”和“]”)。

find("select[name=attributes[ruby][category]]")

逃避也不起作用。想法?

3 个答案:

答案 0 :(得分:18)

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

答案 1 :(得分:4)

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

find("select[name='attributes[ruby][category]']")

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

答案 2 :(得分:1)

更一般地说,您可以使用XPath

find(:xpath, "//select[@name='attributes[ruby][category]'")

这种方法的优点是它可以用于任何属性。