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

page-factory
appium
webdriver
Теги: #<Tag:0x00007f7b6912bba0> #<Tag:0x00007f7b6912b998> #<Tag:0x00007f7b6912b790>

(Anger Tamerlan ) #1

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


(Alexandr D.) #2

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


(Vladislav Sobol) #3

Можно юзать аннотацию @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()
}


(Andriy Sinchuk) #4

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


(Taras) #5

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


(Taras) #6

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