Rails + Minitest + Capybara: как сделать assert_select с идентификатором span - PullRequest
0 голосов
/ 16 октября 2019

На мой взгляд, у меня есть:

<span class = "info">
    <span id="<%= account.id %>" data-account_id="<%= account.id %>" data-activated="<%= account.starts_at? %>">
        <%= t(".account_activated") %>
    </span>
</span>

Каков наилучший способ проверки (проверка системы с использованием капибары), если внутри отображается текст «аккаунт был активирован»?

Я пытался:

assert_selector "span##{acount.id}", text: "account has been activated"

, но получаю Selenium :: WebDriver :: Error :: InvalidSelectorError: недопустимый селектор: указан недопустимый или недопустимый селектор

Ответы [ 2 ]

1 голос
/ 17 октября 2019

В HTML5 определения были изменены, чтобы идентификаторы могли начинаться с цифр, но CSS требует, чтобы начальные числа были экранированы правильно (#\31 234 будет соответствовать идентификатору '1234'). По этой причине, если вам нужно сопоставить элемент с помощью CSS с идентификатором, который может начинаться с цифры, лучше всего использовать опцию id (поддерживается всеми селекторами Capybara) и позволить Capybara объединить его с CSS

* 1004. *

, который будет корректно экранироваться и применяться к CSS. Если вы просто хотите указать идентификатор, а не тип элемента (поскольку идентификатор должен быть уникальным на странице), вы можете использовать тип селектора: id (а не тип селектора CSS по умолчанию)

assert_selector :id, account.id, text: "account has been activated"
0 голосов
/ 16 октября 2019

Я решил эту проблему.

Это потому, что ID не должны начинаться с цифр (см. здесь )

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

Код вида следует изменить следующим образом:

<span class = "info">
    <span id="**account_**<%= account.id %>" data-account_id="<%= account.id %>" data-activated="<%= account.starts_at? %>">
        <%= t(".account_activated") %>
    </span>
</span>

и

assert_selector "#account_#{account.id}", text: "account has been activated"
...