Проверьте, появляется ли сообщение "Пожалуйста, введите адрес электронной почты"
Учитывая простую страницу:
<form>
<input type="email">
<button>click</button>
</form>
Если я введу что-либо в текстовое поле, которое не является электронной почтой, и нажму кнопку, Please enter an email address
сообщение появляется.
Есть ли способ проверить, появляется ли сообщение с использованием Selenium или Watir? Насколько я вижу, в браузере DOM ничего нового не появляется.
Поскольку на странице используется проверка электронной почты, встроенная в функцию браузера, имеет ли смысл проверять, появляется ли сообщение об ошибке? Это на том же уровне, что и проверка, работает ли полоса прокрутки браузера. Мы больше не проверяем веб-приложение, а платформу (браузер).
Более ранний связанный здесь вопрос о SO: как проверить условия ошибок на страницах HTML5 с огурцом?
3 ответа
Я согласен, что это начинает приближаться к "тестированию браузера", о-о-о, если ваш код зависит от этой функции браузера, то сайт должен создать правильный HTML-код (5), чтобы браузер знал, что вы хотите этот уровень проверки, и это то, что вы можете проверить.
Некоторые хорошие знания об этом в искусстве Интернета
Проверка на стороне браузера запускается комбинацией определенного типа ввода (который вы можете проверить через watir .type
метод) и новый required
атрибут (который может быть сложным для проверки) Учитывая это, я думаю, что на самом деле я вижу довольно хорошую причину здесь для новой функции в Watir. Я думаю, что мы могли бы использовать .required?
метод, который должен поддерживаться для всех входных элементов, которые поддерживают новый атрибут 'required', и возвращает true, если этот атрибут 'required' присутствует.
Поэтому в данный момент вы можете сделать следующее: если вы знаете, что работаете в браузере HTML5, который поддерживает эту функцию, вы можете одновременно проверить, что тип ввода - "электронная почта", а также атрибут "required". (У меня нет идеи, как это сделать, но, возможно, кто-то другой может предложить способ).
Другой вещью, в которой нужно быть уверенным, будет предоставление недопустимого значения и проверка того, что форма не позволит себя отправить. Например, является ли проверка обязательной или просто консультативной. (и не забудьте проверить серверную часть, отправив неверные данные в любом случае, используя что-то вроде curl или httparty, поскольку враждебный пользователь может легко обойти любую проверку inbrowser и отправить эту форму с поддельными или даже "враждебными" значениями, предназначенными для создания буфера переполнение или атака внедрения. Ни один сайт не должен зависеть исключительно от проверки на стороне клиента.)
Конечно, нужно учитывать и то, что, если пользователь находится в браузере, который НЕ поддерживает эту особую функцию проверки, что тогда делает страница? Я бы предположил какой-нибудь клиентский JavaScript и сообщение, которое отображается.
В этом случае это действительно зависит от того, каким образом сообщение сделано, чтобы "появиться". В тестируемом приложении сообщения такого рода оказываются в удобных элементах div с уникальными классами, которые контролируются css и обычно скрываются, а затем устанавливаются на отображение, когда JS на стороне клиента обнаруживает необходимость отображать сообщение для пользователь. Поэтому, конечно, у меня есть тесты на подобные вещи. Вот пример того, кто согласен с нашими условиями. (Примечание: мы используем Cucumber и гем Test-Factory для создания объектов страниц и объектов данных)
Давайте начнем с сообщения, и что показывает правой кнопкой мыши элемент exexine
Сценарий на grower_selfregister.feature
файл выглядит так
Scenario: self registering grower is required to agree to terms and conditions
Given I am a unregistered grower visiting www.climate.com
When I try to self-register without agreeing to the terms and conditions
Then I am informed that Acceptance of the terms and conditions is required
And I remain on the register page
Критические шаги огурца:
When /^I try to self-register without agreeing to the terms and conditions$/ do
@my_user.self_register(:agree_to_terms => FALSE)
end
Then /^I am informed that Acceptance of the terms and conditions is required$/ do
on Register do |page|
page.agree_to_terms_required_message.should be_visible
end
end
Then /^I remain on the register page$/ do
on Register do |page|
#ToDo change this to checking the page title (or have the page object do it) once we get titles
page.url.should == "#{$test_site}/preso/register.html"
end
end
Соответствующие части register.rb
объект страницы
class Register < BasePage
#bunch of other element definitions removed for brevity
element(:agree_to_terms_required_message) {|b|b.div(:class => "terms-error")}
end
Это помогает привести пример?
Примечание: можно легко утверждать, что вторая проверка (оставаясь на странице) является излишней, так как я вряд ли увижу сообщение, если я еще не на странице. Но это добавляет ясности ожидаемому взаимодействию с пользователем, описанному в сценарии. Кроме того, это может быть очень важно, если реализация, где измениться, например, если было решено использовать что-то вроде предупреждения javascript, тогда может быть важно проверить, что после закрытия (что, скорее всего, сделает шаг "Я вижу сообщение"), пользователь все равно не зашел на сайт.
Вы можете попробовать вот так
JavascriptExecutor js = (JavascriptExecutor) driver;
driver.findElement(By.cssSelector("input[type='email']")).sendKeys("asd");
Object s=js.executeScript("return document.getElementById(\"a\").validity.valid");
System.out.println(s);
driver.findElement(By.cssSelector("input[type='email']")).sendKeys("asd@gmail.com");
s=js.executeScript("return document.getElementById(\"a\").validity.valid");
System.out.println(s);
Выход для вышеуказанной строки
false
true
Таким образом, на основании этого вы можете сделать вывод, является ли данное значение действительным или нет.
Ниже логика javascript вернет истину / ложь в зависимости от действительности поля
document.getElementById(\"a\").validity.valid
PS: я предполагаю, что входной тег имеет идентификатор "а"
Я не нашел способ проверить фактическое сообщение об ошибке. Тем не менее, вы можете проверить, что поле ввода недействительно после ввода не электронной почты, используя :invalid
CSS псевдо-селектор.
WebElement invalidInput = driver.findElement(By.cssSelector("input:invalid"));
assertThat(invalidInput.isDisplayed(), is(true));