Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Как обратиться или проверить существование стандартного поп-апа от браузера при валидации полей

selenium
Теги: #<Tag:0x00007f7b6419a438>

(Tatyana Durova) #1

Есть форма авторизации, обработка валидации полей происходит в стандартных попапах браузера, смотрим скриншот http://screencast.com/t/JhSjQya5MaCe

Как к ним обратиться? Как проверить, что они появились? Пытаюсь починить сломанный тест на невалидную авторизацию.

Кому интересно, страница здесь http://cutwise.com/api/oauth/v2/auth/login


(Eugene Moskalenko) #2

а зачем на такое писать автотест? если оно ставится по дефолту, да и у кого браузер на инглише, будет видеть на английском

Проще написать тест который проверит у этих инпутов наличие атрибута 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) {}
    }

}

впишите текст сюда; также, отключить форматирование текста можно, начав строку с четырех пробелов}

поправьте пожалуйста, если можно сделать лучше… :slight_smile:


(Tatyana Durova) #3

спасибо, кто бы знал…теперь знаю! =)


(Eugene Moskalenko) #4

Вот только постарайтесь проверку таких атрибутов как-то обобщить, вдруг в будущем еще понадобится какие-то атрибуты другие проверять, и желательно все же их реализовывать через assertThat, по идеи так кода меньше будет…

element.getAttribute(attribute); - возвращает String значение атрибута

к примеру, для "placeholder"="Username:" - код: element.getAttribute("placeholder"); вернет Username:

а для состояния:

boolean condition = element.getAttribute("placeholder").equals("Username:");

надо писать equals (равно), не contains (содержит)… :slight_smile: