Capybara — assert_selector(tr#1234) не работает, но find_by_id(1234) работает

Каковы возможные причины того, что выполнение page.find_by_id(id) работает, но выполнение page.assert_selector("tr##{id}") returns aCapybara::ElementNotFound`?

Для фона я использую драйвер Poltergeist для Капибара.

У меня есть 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>

Я подтвердил, что мой HTML-код выводится, как и ожидалось, с помощью функции page.driver.debug Полтергейста и просмотра фактического 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")

Основываясь на моем понимании Capybara, этого не должно быть. Я делаю что-то неправильно?


person Richard Jones    schedule 31.08.2013    source источник
comment
Возможно, вы видите несоответствия, потому что идентификаторы не должны начинаться с цифр: css- ricks.com/ids-cannot-start-with-a-number.   -  person Damien Roche    schedule 31.08.2013
comment
Ты прав. Изменение id для начала с буквы решило мою проблему. На самом деле я получал ошибку Capybara::Poltergeist::InvalidSelector: The browser raised a syntax error while trying to evaluate the selector, которая должна была предупредить меня. Хотите создать ответ, который я могу принять?   -  person Richard Jones    schedule 01.09.2013


Ответы (1)


Это связано с тем, что идентификаторы не должны начинаться с цифр, как здесь .

Токены ID и NAME должны начинаться с буквы ([A-Za-z]), за ними может следовать любое количество букв, цифр ([0-9]), дефисов («-»), подчеркиваний («_») , двоеточия (":") и точки (".").

person Damien Roche    schedule 01.09.2013