Capybara - assert_selector(“tr#1234”)不起作用,但find_by_id(1234)确实有效

时间:2013-08-31 19:44:50

标签: ruby-on-rails capybara poltergeist

执行page.find_by_id(id)工作的可能原因是什么,但做page.assert_selector("tr##{id}") returns a Capybara :: ElementNotFound`?

对于后台,我使用PoltergeistCapybara驱动程序。

我的HTML结构如下:

<tbody>
  <tr id="1234">
    <td>Rico Jones</td>
    <td><a href="/price_requests/5678">Price Request</a></td>
  </tr>
  <tr id="2345">
    <td>Rico Jones</td>
    <td><a href=/price_requests/6789">Price Request</a></td>
  </tr>
</tbody>

通过使用Poltergeist的page.driver.debug功能并查看测试生成的实际HTML,我已经确认我的HTML按预期出现。

当我在测试中添加这样的内容时,我收到Capybara::Poltergeist::InvalidSelector错误消息The browser raised a syntax error while trying to evaluate the selector

lead = Lead.first
assert_selector "tr##{lead.id}"

执行此操作时我也遇到错误:

lead = Lead.first
within "tr##{lead.id}" do
  click_on "Price Request"
end

但是,使用find_by_id有效:

lead = Lead.first
find_by_id(lead.id).click_on("Price Request")

根据我对水豚的理解,情况并非如此。我做错了吗?

1 个答案:

答案 0 :(得分:2)

这是因为ID不应以数字开头,如shown here

  

ID和NAME令牌必须以字母([A-Za-z])开头,可能是   后跟任意数量的字母,数字([0-9]),连字符(“ - ”),   下划线(“_”),冒号(“:”)和句点(“。”)。