Подтвердить что ты не робот

Как проверить условия ошибки на страницах HTML5 с огурцом?

Я тестирую поведение веб-приложений с помощью Cucumber (используя Selenium и Watir под капотом). Мое веб-приложение имеет HTML5-страницы и использует новый атрибут "required". Если у меня есть форма ввода данных с обязательным полем, и я отправляю эту форму с пустым полем, я хотел бы убедиться, что веб-приложение правильно отвечает с ошибкой.

К сожалению, при тестировании с использованием веб-браузера HTML5 сообщение об ошибке, которое появляется при неудачной проверке поля, кажется, не доступно для Cucumber через веб-драйвер. В любом случае, форма не отправляется, и страница остается в форме ввода данных.

С другой стороны, при тестировании в автономном режиме или в браузере, не поддерживающем HTML5, форма может отправляться, что позволяет моему веб-приложению перехватить ошибку и отправить пользователя обратно на страницу формы с сообщением об ошибке.

Во втором случае я легко могу проверить наличие сообщения об ошибке, поскольку оно является частью HTML-кода, представленного на странице. Моя проблема в том, что я не могу понять, как написать один тестовый сценарий, который проверит состояние ошибки как в ситуациях без браузера, так и в браузере HTML5.

Возможно, это невозможно при текущем состоянии веб-драйверов Selenium и Watir. Но если у кого-то есть идеи, как я могу проверить всплывающее сообщение об "требуемой" ошибке HTML5, это очень поможет.

ОБНОВЛЕНИЕ 2012-06-02:

Вот пример страницы sample page с выборкой предупреждений браузера HTML5.

Есть обязательный текст и выберите, текстовое поле, показывающее внутренний текст подсказки, и текстовое поле с проверкой ввода регулярных выражений. На странице нет ни CSS, ни javascript, чтобы запутать проблему, это просто ванильный HTML5. См. страницу w3schools об атрибутах полей HTML5 для полной разбивки. Форма отправляется в простой CGI-скрипт, который просто повторяет ввод формы, предполагая, что форма выполнена успешно. Ошибка отправки останется на странице примера формы.

4b9b3361

Ответ 1

Я раньше не работал с атрибутом HTML5 required. Но из-за внешнего вида этот атрибут required просто предупреждает браузер о том, что это поле формы должно быть заполнено (т.е. DOM не изменяется).

Мне кажется, что было бы разумно просто утверждать, что этот атрибут required присутствует в HTML соответствующих полей формы. Этот тест должен пройти для BOTH-браузеров HTML5 и браузеров, отличных от HTML5.

Попытка утверждать что-то большее, чем кажется мне, как будто вы тестируете функциональность браузера.

Ответ 2

Помимо проверки правильности созданного HTML, чтобы включить проверку браузера, я не уверен, сколько вы можете сделать, это не означает проверку браузера, а не вашего кода.

Используя watir или watir-webdriver, вы можете использовать .type для проверки того, что вход имеет правильный тип (например, адрес электронной почты), который является одним из элементов управления проверкой браузера. Другой - наличие требуемого атрибута, который является небольшим трюком. Потенциально .attribute_value ( "требуется" ) может работать, но обычно это возвращает значение атрибута, поэтому не уверен, как этот метод будет отвечать на логический атрибут. Другими альтернативами может быть просмотр .attribute_list и

Похоже, что это хорошая причина для Ватира, чтобы добавить .required? метод для ввода элементов, который позволит вам легко проверить, установлен ли этот атрибут. Поэтому я попросил эту функцию https://github.com/watir/watir-webdriver/issues/189

Ответ 3

У вас должны быть CSS-селекторы для нацеливания на конкретное поле и поиска идентификатора ошибки. Если это видно или нет. Детальное определение шага должно быть там.

Ответ 4

Одним из решений было бы не использовать Cucumber для проверки поведения ошибки, а вместо этого проверить, что вы настроили поля.

Так что в терминах Кьюка у вас может быть что-то вроде

Given I am filling in my form
Then I should see that my name is required

а затем напишите что-нибудь, что ищет нужную опцию в теге html для поля имени.

Больше чем это тестирует браузер, а не ваше приложение.