Как проверить, была ли проверена проверка HTML5 с использованием селена?

Если вы тестируете мой webapp, используя Selenium. Вся проверка формы в webapp выполняется с помощью проверки формы HTML5. Есть ли способ утверждать, была ли запущена проверка формы/ввода с использованием Selenium?

Ответ 1

Подобный поиск делает трюк в браузерах, поддерживающих HTML5 (с использованием Java и WebDriver, но их также можно использовать в другом месте):

// looks for an element that has been marked as required on a submit attempt
WebElement elem1 = driver.findElement(By.cssSelector("input:required"));
// looks for an element that has been marked as invalid on a submit attempt
WebElement elem2 = driver.findElement(By.cssSelector("input:invalid"));

Доступны доступные классы CSS:

Ответ 2

Тестирование на наличие атрибутов HTML5, которые отвечают за проверку, достаточно адекватно. На самом деле запуск проверки правильности в браузере - это не тестирование вашей работы (а тестирование самого браузера), что может быть хорошо, но, на мой взгляд, не нужно. Как это сделать, уже описано в верхнем ответе. Мой ответ заключается в том, чтобы расширить с помощью глубокоэшелонированного подхода к проверке полей формы.

Абсолютно необходимо иметь собственную проверку в дополнение к правилам HTML5, если проверка HTML5 не поддерживается (или обойдена).

Первая проблема заключается в том, что проверка HTML5 имеет приоритет и не позволяет вам проверить свою собственную проверку. Так как же подойти к этому?

Тестовые атрибуты проверки HTML5 присутствуют

Чтобы проверить, было ли оно использовано, используйте assertAttribute:

<tr>
    <td>assertAttribute</td>
    <td>[email protected]</td>
    <td></td>
</tr>

Если по какой-то причине вы используете синтаксис XML required="required", вам нужно будет подтвердить, что значение "обязательно".

Проверка резервной проверки

JavaScript

Если проверка HTML5 не позволяет проверке JavaScript возвращать ошибки, после того как вы подтвердили наличие атрибутов проверки HMTL5, вы можете удалить атрибуты проверки HTML5, чтобы проверить запасную проверку JavaScript:

<tr>
    <td>runScript</td>
    <td>document.getElementById('myFieldId').removeAttribute('required')</td>
    <td></td>
</tr>

Теперь вы можете проверить свою проверку JavaScript. Чтобы удалить проверку электронной почты, вам нужно установить атрибут поля type на text:

<tr>
    <td>runScript</td>
    <td>document.getElementById('myFieldId').setAttribute('type','text')</td>
    <td></td>
</tr>

Тестирование на стороне сервера

Даже если вы используете проверку HTML5 и JavaScript, если вы отправляете на сервер, вам также потребуется проверить, проверяет ли ваш сервер эти поля.

Вызов функции submit() отправит форму без вызова проверки. Команда Selenium submit делает то же самое:

<tr>
    <td>submit</td>
    <td>name=myFormName</td>
    <td></td>
</tr>

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

Ответ 3

Атрибут validationMessage вернет сообщение, которое будет отображаться в случае сбоя проверки:

WebElement username = driver.findElement(By.id("username"));    
String validationMessage = username.getAttribute("validationMessage");

Если элемент имеет required атрибут, браузер покажет сообщение после отправки формы:

boolean required = Boolean.parseBoolean(username.getAttribute("required"));

Вы можете проверить правильность введенного значения:

boolean valid = (Boolean)((JavascriptExecutor)driver).executeScript("return arguments[0].validity.valid;", username);


Не: текст сообщения и проверка настраиваемы. Если вы хотите проверить настроенную проверку и сообщение.

Вот тестовый код для пользовательской проверки (Java, TestNG):

Assert.assertTrue(Boolean.parseBoolean(username.getAttribute("required")), "Username is required and message should be showin");
Assert.assertEquals(username.getAttribute("validationMessage"), "My custom message", "Message text control");

username.sendKeys("@vasy a^");
Assert.assertTrue((Boolean)((JavascriptExecutor)driver).executeScript("return arguments[0].validity.valid;", username), "Username should not contain not special characters");

Ответ 4

В дополнение к ответу от @Slanec: добавьте также следующую строку (используя С#, но она должна быть одинаковой на Java или других языках):

Assert.IsTrue(true,"<The error message which appears>",elem1);

Это означает, что вы хотите проверить, видно ли сообщение.