t.me/atinfo_chat Telegram группа по автоматизации тестирования

кастомизация @FindBy для разных локаторов

Теги: #<Tag:0x00007f748ae42a68> #<Tag:0x00007f748ae42928> #<Tag:0x00007f748ae42810>

Есть два различных андроид нативных мобильных приложения с общей логикой и дизайном но различными локаторами. Проект разрабатываю используя selenium + appium + java + maven.
Есть идея использовать page factory pattern - одном классе где задаются локаторы кастомизировать @AndroidFindBy_ProjectX или @AndroidFindBy_ProjectY -вопрос как это сделать или как переключать AndroidFindBy в зависимости от приложения?

Пишите свой декоратор для InitElements, который будет знать как искать элементы.

1 Симпатия

Можно юзать аннотацию @HowToUseLocators(androidAutomation=LocatorGroupStrategy.ALL_POSSIBLE)
В итоге у вас будет пейдж обджект

@HowToUseLocators(androidAutomation=LocatorGroupStrategy.ALL_POSSIBLE)
@AndroidFindBy (id = locator_projectX )
@AndroidFindBy (id = locator_projectY )
MobileElement button;

Какой-то метод где вы взаимодействуете с локатором :

public void clickButton() {
button.click()
}

В вебе я такие проблемы решаю через логический оператор: | в xpath селекторе. Тоесть когда у одного и того же логического элемента разные селекторы в разных местах, я их пишу в одном месте, выглядит так: @FindBy(xpath="(//[@class=‘бла’])[1] | //[@id=‘бла-бла’]")

ага, и завтра добавиться еще один env. и будет еще один if … решение не SOLID

вам нужно декоратор свой написать - нужно ковирять в сторону AppiumFieldDecorator