2016-11-22 3 views
0

Я уже несколько дней вписываю тесты огурца/Capybara в первый раз, и у меня проблемы.Огурцы/Capybara find() не повторяет

У меня есть файл Login.feature с двумя функциями; один проверяет попытки входа с недопустимыми учетными данными, а другой - с действительными. Первый тест завершается успешно, а последний терпит неудачу.

Я тестирую их, ища Bootstrap alert, который отображается после каждого типа действия. При неудачном входе в систему страница обновляется предупреждающим сообщением. Успешно пользователь перенаправляется на свою домашнюю страницу, где отображается предупреждение.

Моя проблема заключается в том, что при поиске предупреждения о успешности в тесте с действительными учетными данными он терпит неудачу, потому что страница еще не загружена. Я понимаю, что метод find должен продолжать искать данный элемент в течение периода времени, определенного Capybara.default_wait_time.

Ниже приведен простой тест, я использую:

find('div.alert.alert-success') 

Это приводит к ошибке Capybara::ElementNotFound каждый раз. Я установил default_wait_time на разную длину (самое длинное из 500), но ошибка происходит мгновенно независимо. Я вкопался в код для find и ввел некоторый вывод, чтобы я мог видеть, продолжает или нет блок в течение этого периода времени - кажется, он пытается разобраться и останавливаться, когда возникает исключение.

Я рассматриваю это неправильно? Из того, что я прочитал, не рекомендуется явно ждать определенного периода времени, но механизм по умолчанию для меня не работает.

+0

Вы пытались использовать 'expect (page) .to has_selector ('div.alert.alert-success')'? или, может быть, 'expect (page) .to has_selector ('# flash_notice')'. Было бы лучше, если бы вы опубликовали свой html-код – fabersky

+0

Какой драйвер вы используете? –

+0

Я тоже попробовал подход 'have_selector', с тем же результатом. Я не уверен, какой драйвер я использую. Я не модифицировал его, поэтому, полагаю, какой бы драйвер не использовался по умолчанию с камнем Cucumber v2.4.0. –

ответ

0

Драйвер по умолчанию в Capybara - это стойка-тест, который не ожидает, потому что он не поддерживает JS или асинхронное поведение другого типа. Похоже, что ваши оповещения либо отображаются JS (что не произойдет с драйвером стойки), они скрыты, пока не будут показаны JS (не произойдет), или ваши учетные данные на самом деле не действительны. Вы можете проверить, какой html отображается, глядя на `page.html '. Чтобы использовать другой драйвер, см. Capybaras README - https://github.com/teamcapybara/capybara#drivers

+0

Манипулирование тестами немного подтверждает, что учетные данные некорректны, хотя я использую те же учетные данные при входе в систему вручную. –

+0

@ RyanDurel При входе в систему вручную в тестовую среду? Тесты выполняются в тестовой среде, в то время как вы обычно работаете в среде dev, каждый из них имеет свой собственный экземпляр базы данных, и в тестах вам нужно создавать записи, необходимые для каждого теста, с использованием фабрик или светильников. –

+0

Ты прав, это было то, чего я не понимал. Мне нужно было внести некоторые изменения в тестовую среду, чтобы соответствовать dev, хотя я все еще сталкиваюсь с проблемами. Это больше связано с тем, как настроен наш проект. –

Смежные вопросы