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

Как хранить локаторы для нескольких окружений

locators
page-object
java
selenide
selenium
webdriver
Теги: #<Tag:0x00007fedb7c33140> #<Tag:0x00007fedb7c33000> #<Tag:0x00007fedb7c32ec0> #<Tag:0x00007fedb7c32d80> #<Tag:0x00007fedb7c32c18> #<Tag:0x00007fedb7c32ad8>

(Sergey Brit) #1

Доброго времени суток.
А вот хотел бы спросить экспертов.
Например у меня есть 2 приложения: вэб и десктоп
Структура и поведение идентичны.
Есть уже готовые тесты для web. Работают нормально. Содержат пейдж обжекты с локаторами.
Хотелось бы это же запускать и для десктопа.
Вопрос как быть с локаторами?
Действия одни и теже, но локаторы в десктопе и вэбе разные.
Как быть тогда?


(Viktor Yakushenko) #2

Можно попробовать для каждого типа приложения, хранить в двух разных классах (для каждого page object), реализующих один интерфейс. В зависимости от приложения инициализировать нужные локаторы.


(Taras) #3

я б просто анотации на них разние ставил и в коде хендлил


(Дмитрий Мирошник) #4

ИМХО самый простой вариант - иметь 2 property файла с локаторами. Имена локаторов (пропертей) должны 100% совпадать, значения - различаться.
Затем добавляем параметр на запуск теста, определяющий тип приложения. В зависимости от этого параметра где-нибудь на BeforeTest или любой другой фазе инициализации по выбору подставлять соответствующий property файл. Профит.

Таким образом, любые изменения в локаторах не будут приводить к изменению кода тестов.


(Yaroslav Pernerovskyy) #5

Зачем 2? можно в одной XMLке хранить


(Дмитрий Мирошник) #6

Если локаторов много - в 1 xml можно будет потеряться.


(Yaroslav Pernerovskyy) #7

Потому хранить локаторы в файлах это плохая идея вообще. )


(Sergey Brit) #8

Пока решил использовать вариант при котором прописываю 2 локатора в одном.
Например, есть элемент с именем Element. Для вэб это будет //[@name=‘Element’] для десктопа - //[@Name=‘Element’]. Объединяем все:
By.xpath(//[@name=‘Element’] | //[@Name=‘Element’]) и получаем вполне нормальный вариант как для вэб так и для десктопа. Также можно использовать нотацию @FindAll. В коде выглядет неплохо.
Всем спасибо.


(Евгений Салмин) #9

Необычный подход


(Sergey Brit) #10

Зато работает. :slight_smile:


(Sergey Brit) #11

Для FindAll это будет виглядеть как:


@FindBy(
@FindBy(xpath="//[@name=‘Element’]"),
@FindBy(xpath="//
[@Name=‘Element’]")
)
public SelenideElement element;


(Oleksandr Khotemskyi) #12

А почему бы собственно и нет?

Единственное что смущает - не решает проблему разной структуры страниц для десктопа и мобайла


(Sergey Brit) #13

В моем случае действия над страницей и сама структура одинакова как для вэба так и для десктопа


(Oleksandr Khotemskyi) #14

Дай бог так и будет дальше. Но почему то ощущение что потом обязательно будет -

НА ДЕСКТОПЕ ДРОПДАУН А НА МОБАЙЛЕ СДЕЛАЕМ ГАМБУРГЕР СЛАЙДМЕНЮ