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

Отслеживание и валидация pattern Alert с помощью Selenium

alert
webdriver
Теги: #<Tag:0x00007f7b6d1e50d8> #<Tag:0x00007f7b6d1e4c00>

(Леонид Овчаров) #1

Реально ли отследить такой alert, если да, то как?
Кусочек html-кода для большего понимания проблемы
<input id="title" class="form-control" type="text" value="выаапа" required="required" pattern=".{5,250}" maxlength="250" name="poll_title">


(Vasiliy Rakshin) #2

Вы имеете ввиду всплывающую фразу “Пожалуйста, используйте требуемый формат.”?
Это не алерт. Это называется хинт. Ищите в ДОМе что-то типа #hint* (либо рядом с элементом input, либо в самом конце страницы или в начале)


(Леонид Овчаров) #3

Я показал отрывок кода input. Это происходит, когда я нажимаю на кнопочку Выполнить. И сначала выполняется проверка я так понимаю внутри Input. При чем разные браузеры по разному сообщения выводят. Это сообщение вывел Chrome. Другой браузер выведет совершенно другой текст. Это явно не подсказка(


(MaximDae) #4

Это скорее всего HTML Notification или Web Notification, можно отключить в Capabilities драйвера, если не надо


(Леонид Овчаров) #5

А пример можно? Какую опцию в Capabilities выключать?


(MaximDae) #6

Для Сhrome:

Map<String, Object> prefs = new HashMap<String, Object>();
prefs.put("profile.default_content_setting_values.notifications", 2);
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("prefs", prefs);
WebDriver driver = new ChromeDriver(options);

(Леонид Овчаров) #7

Спасибо за помощь, но к сожалению не помогло. с данной опцией все равно всплывает хрень.
Такое сообщение выдает Chrome, на первой картинке Firefox.

Хочется отлавливать в каком input, такая хрень произошла, либо реально как-то отключить. Но пока решения не нашел((


(5am) #8

как уже было сказано, смотрите его наличие в DOM’е


(Леонид Овчаров) #9

В DOM модели нет, если бы был, то я думаю вопроса бы не возникло.
MaximDae правильно говорит, что-то надо с браузером делать, но вот что.

Короче это: HTML5 Form validation, вот его и нужно отключить, вопрос как остается открытым.


#10

Ну так браузер обязан валидировать, если ему разметка так говорит.
Нужно менять разметку: либо удалять констрейнты с поля, либо добавлять атрибут novalidate к тегу form.


(Sergey Brit) #11

Можно попробовать так (писалось на C#):

 private bool IsValidationMessagePresentWithText(string text)
        {
            bool isPresent = bool.Parse(PageHelper.ExecuteScript("window.document.getElementById(\"email-address-input\").checkValidity();", _webDriver));
            bool hasText =  PageHelper.ExecuteScript("window.document.getElementById(\"email-address-input\").validationMessage;", _webDriver).Contains(text);
            return !isPresent && hasText;
        }

где
PageHelper.ExecuteScript - это просто функция использующая IJavaScriptExecutor

Т.е. если валидатор появился, то и текст должен быть, если валидатора нет, то и текст == “”

Вы можете сначала проверить все из консоли браузера.


(Леонид Овчаров) #12

@brit_sergey, спасибо огромное.
Я уже начал копать в плане скрипта js и прикручивать его к Selenium, даже добавил поддержку xpath.
Ваш код нравится, осталось переписать на java.
Всем спасибо.


(Sergey Brit) #13

Рад был помочь.


(dirzhov) #14

это хтмл5 поведение http://htmlbook.ru/html/input/pattern , можно убрать валидацию удалением атрибута pattern у элементов: document.getElementsByTagName(“input”)[0].removeAttribute(‘pattern’), или добавить тэгу form атрибут novalidate