Я пытаюсь изменить структуру фреймворка и сталкиваюсь с неожиданной проблемой, когда получаю разные результаты с кодом, похожим на меня.Похоже, я не очень хорошо понимаю этот аспект Appium / Java.Может ли кто-нибудь объяснить мне, почему в первом сценарии мой код ждет 20 секунд (чего я не хочу), а во втором сценарии - требуемую 1 секунду?Спасибо!
Сценарий один:
// SubPage.java (extends BasePage)
@AndroidFindBys(value = {
@AndroidBy(id = "xx")
})
private List<MobileElement> element;
// Passing in sec=1, but it actually waits 20 seconds, which is incorrect
public SubPage tapTheButton(int sec) {
tapButton(element, sec);
return new SubPage(driver);
}
Сценарий два:
// SubPage.java (extends BasePage)
@AndroidFindBys(value = {
@AndroidBy(id = "xx")
})
private List<MobileElement> element;
// Passing in sec=1, and it waits for 1 second, which is correct
public SubPage tapTheButton(int sec) {
setTiming(sec);
tap(element);
setDefaultTiming();
return new SubPage(driver);
}
BasePage.java
protected boolean tapButton(List<MobileElement> element, int sec) {
boolean isSuccess;
setTiming(sec);
isSuccess = tap(element);
setDefaultTiming();
return isSuccess;
}
public synchronized void setTiming(int sec) {
PageFactory.initElements(new AppiumFieldDecorator(driver, Duration.ofSeconds(sec)), this);
}
public synchronized void setDefaultTiming() {
PageFactory.initElements(new AppiumFieldDecorator(driver, Duration.ofSeconds(20)), this);
}
// Part of the method, not sure if it's important
public boolean tap(MobileElement el) {
TapOptions tapOptions;
...
for (int j = 0; j < 2; j++) {
try {
tapOptions = new TapOptions().withElement(ElementOption.element(el));
new TouchAction(driver).tap(tapOptions).perform();
result = true;
break;
} catch (Exception e) {
...
}
}
...
}