Как проверить, есть ли на странице средство выбора даты? - PullRequest
0 голосов
/ 18 января 2019

Я указываю мою форму, в которой будут некоторые средства выбора даты.

expect(page).to have_select('Start date') и expect(page).to have_select('deal[start_date]') оба не возвращают совпадений.Последнее имеет смысл, учитывая, что html для сборщиков дат немного забавен (name="deal[start_date(2i)])

expect(page).to have_date_select('deal[start_date]') говорит, что Capybara не распознает has_date_select.

Есть ли способ сделать это?

1 Ответ

0 голосов
/ 19 января 2019
Предикат

Капибары has_select? и сопоставитель have_select ищут элементы HTML <select>. В зависимости от того, что вы подразумеваете под средством выбора даты, вам придется использовать средство сопоставления, которое будет соответствовать правильному типу элемента, или have_selector, если нет конкретного сопоставителя. Если вы действительно проверяете элемент <input type="date"> со связанной меткой, содержащей текст «Дата начала», тогда вы можете использовать have_field matcher:

expect(page).to have_field 'Start date', type: 'date'

Если вы используете помощник вида Rails date_select, он генерирует HTML как

<div class="field">
  <label for="post_start_date">Start date</label>
  <select id="post_start_date_1i" name="post[start_date(1i)]">
     <option value="2014">2014</option>
     <option value="2015">2015</option>
     ...
  </select>
  <select id="post_start_date_2i" name="post[start_date(2i)]">
     <option value="1" selected="selected">January</option>
     <option value="2">February</option>
     ...
  </select>
  <select id="post_start_date_3i" name="post[start_date(3i)]">
     <option value="1">1</option>
     <option value="2">2</option>
     <option value="3">3</option>
     ...
  </select>
</div>

Из этого HTML видно, что элемент

expect(page).to have_select('post_start_date_1i')
expect(page).to have_select('post[start_date(2i)]')
...

или вы можете использовать фильтр id с регулярным выражением и счетчиком, чтобы проверить, что есть 3 элемента, соответствующих

expect(page).to have_select(id: /^post_start_date_[123]i$/, count: 3)

Обратите внимание, что это технически не так "правильно", как делать их по отдельности, поскольку у вас может быть 3 элемента с идентификатором post_start_date_1i, и он все равно будет проходить, но в этом случае ваш HTML также будет недействительным.

Если вы проверяете не тот тип HTML-элемента, вам необходимо предоставить HTML-код, чтобы получить точный ответ.

...