Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

Selenium WebDriver нахождение элемента на странице

page-object
junit
webdriver
selenium
Теги: #<Tag:0x00007fedbaf6f5e0> #<Tag:0x00007fedbaf6f4a0> #<Tag:0x00007fedbaf6f360> #<Tag:0x00007fedbaf6f1f8>

(Miss QA) #1

Всем привет! Пишу тест на проверку нахождения элементов на странице. Элементов около 20. Реализовала следующим способом, все работает, но хотелось бы услышать советов и критики. Лично меня смущает реализация d тесте метода siteSearchInput.

Пример для одного элемента





(Богдан Ткаченко) #2

А зачем ты устанавливаешь неявное ожидание 2 раза? Сначала ты устанавливаешь ожидание 15 сек. потом создаешь объект класс HomePage, в который ты передаешь драйвер с ожиданием 15 сек. с конструктора HomePage по super ты переходишь в конструктор класса Page в котором ты устанавливаешь ожидание в 20 сек. вопрос зачем? Не понятно зачем определять поле driver в классе Tests, если она кроме метода getBrowser нигде не используется. Определять поля driver и homepage в классе HomePageTestCase1 статическими необязательно. Использовать скролл страницы до элемента тоже не обязательно браузер под selenium сам проскролит ее. А если по коду то как-то слишком запутано и такое чувство, что код писался в попыхах на коленке. И еще вопрос, при поиске других элементов вы учли, что они могут быть обнаружены при явных ожиданиях? И зачем проверять нахождение элемента, если что selenium кинет эксепшин, какой элемент не найден по какому пути.


(Danteg233) #3

Не пойму зачем везде в страницу передавать webdriver? Можно же в абстракнтой странице его присвоить, и не кидать каждый раз через конструкторы, меньше кода будет, и не нужно постоянно будет getWebDriver() вызывать, а сам драйвер инициализировать допустим в какой нибудь WebDriverFactory, где он будет синглтом и т.п.
По тесту, зачем писать реализацию find в странице? Напишите нормальный wrapper веб элемента, в котором будет метод isElementDisplayed(WebElement webElement) который будет возвращать webElement.isDisplayed(), вы что собираетесь для каждой страницы писать find метод? Зачем усложнять вещи.
Так же я бы вынес searchElement и openSite так же из абстрактой страницы, не думаю что страница может сама себя открыть, так же бы вынес это в отдельный класс, что то на подобие util класса, можете посмотреть как это реализовано в Selenide, класс так же называется Selenide.


(Miss QA) #4

Спасибо за ответ. Учту замечания)

Ожидание совсем случайно там оказалось, перенесла в другое место, а там не удалила:woman_facepalming:


(asolntsev) #5

Я таки встряну с вашего позволения.

Используйте Selenide вместо голого Selenium - ваш код сразу станет в тыщу раз короче и понятнее. Большинство описанных выше строк станут просто не нужны.