Есть форма авторизации, обработка валидации полей происходит в стандартных попапах браузера, смотрим скриншот http://screencast.com/t/JhSjQya5MaCe
Как к ним обратиться? Как проверить, что они появились? Пытаюсь починить сломанный тест на невалидную авторизацию.
Кому интересно, страница здесь http://cutwise.com/api/oauth/v2/auth/login
а зачем на такое писать автотест? если оно ставится по дефолту, да и у кого браузер на инглише, будет видеть на английском
Проще написать тест который проверит у этих инпутов наличие атрибута required="required"
. Если у инпутов он есть - required="required"
, то тест пройден. Именно этот атрибут добавляет такую стандартную для браузера нотификацию…
У меня, кстати не вышло нормально проверять такие атрибуты через assertThat или assertEquals , поэтому можно сделать что-то подобное:
public class Example {
@Title("Main logIn form")
@Test(enabled = true)
public void example() {
DesiredCapabilities capabilities = new DesiredCapabilities();
WebDriver driver = new ChromeDriver(capabilities);
driver.get("http://cutwise.com/api/oauth/v2/auth/login");
//Username element
WebElement loginUserNameField = driver.findElement(By.xpath("//*[@id='username']"));
//Password element
WebElement loginPasswordField = driver.findElement(By.xpath("//*[@id='password']"));
//Username
isAttributePresent(loginUserNameField, "required");
isAttributeContains(loginUserNameField, "placeholder", "Username:");
//Password
isAttributePresent(loginPasswordField, "required");
driver.quit();
}
private void isAttributePresent(WebElement element, String attribute) {
String attributeValue = element.getAttribute(attribute);
try {
if (attributeValue == null) {
String errorMessage = String.format("Attribute \"%s\" not found for element \"%s\"..", attribute, element);
throw new ExceptionInInitializerError(errorMessage);
}
} catch (Exception e) {}
}
private void isAttributeContains(WebElement element, String attribute, String attributeValue) {
boolean condition = element.getAttribute(attribute).equals(attributeValue);
try {
if (!condition || element.getAttribute(attribute) == null) {
String errorMessage = String.format("Attribute \"%s\" not contains \"%s\" for element \"%s\"..", attribute, attributeValue, element);
throw new ExceptionInInitializerError(errorMessage);
}
} catch (Exception e) {}
}
}
впишите текст сюда; также, отключить форматирование текста можно, начав строку с четырех пробелов}
поправьте пожалуйста, если можно сделать лучше…
1 лайк
evgmoskalenko:
required=“required”
спасибо, кто бы знал…теперь знаю! =)
Вот только постарайтесь проверку таких атрибутов как-то обобщить, вдруг в будущем еще понадобится какие-то атрибуты другие проверять, и желательно все же их реализовывать через assertThat , по идеи так кода меньше будет…
element.getAttribute(attribute);
- возвращает String значение атрибута
к примеру, для "placeholder"="Username:"
- код: element.getAttribute("placeholder");
вернет Username:
а для состояния:
boolean condition = element.getAttribute("placeholder").equals("Username:");
надо писать equals (равно), не contains (содержит)…
1 лайк