Capybara::Poltergeist::InvalidSelector 在具有 id 和 class 的元素上

Capybara::Poltergeist::InvalidSelector on element with id and class

我有这样的代码:

<td class="activities" id="3">
  <a id="3" class="btn add_activity" href="#">+</a>
</td>

我想点击 + link。生成的表单使用 javascript 打开,因此我需要 Poltergeist 才能单击它。但它 returns 一个错误:

Capybara::Poltergeist::InvalidSelector:
       The browser raised a syntax error while trying to evaluate css selector ".activities#28"

这是我的测试:

it "can open form", js: true do
  within(".activities#28") do
    click_link "+"
  end
end

那为什么找不到元素呢?

你这里有一些问题

  1. 您的 CSS 选择器“.activities#28”在技术上是非法的。这是因为 CSS 选择器中的 id 标识符不能以数字开头,除非它被转义。要修复您的 CSS 选择器需要变为 .activities# 8

  2. 修复后它将与您显示的 HTML 不匹配,因为显示的 HTML 的 ID 为“3”而不是“28”[=12] =]

  3. 显示的 HTML 有两个具有相同 ID(“3”)的元素。这是非法的 HTML 因为 id 在页面上必须是唯一的。您是否正在尝试存储需要绑定到页面上该元素的记录的 ID?如果是这样的话,它可能在数据属性中(这也会改变你的 CSS 选择器)——尽管多次存储相同的内容也没有多大意义。

    <td class="activities" data-id="3">
      <a class="btn add_activity" href="#" data-id="3">+</a>
    </td>