使用Pagefactory
时我直接声明WebElement
如下。
@AndroidFindBy(accessibility = "androidLocator")
@iOSFindBy(accessibility = "iosLocator")
private MobileElement element;
但是,有没有办法处理StaleElementReference
异常,因为我在这里没有使用任何 By 对象。我能想到的所有解决方案都要求我使用定位器作为 By 的对象。
我想在父类中为所有处理StaleElementReferenceException
. 但问题是我只能将引用作为 aWebElement
而不是作为 By 对象传递,这超出了重新初始化WebElement
.
我可以找到以下解决方案:
FluentWait<MobileDriver<MobileElement>> wait = new FluentWait<MobileDriver<MobileElement>>(driver)
.withTimeout(20, TimeUnit.SECONDS).pollingEvery(500, TimeUnit.MILLISECONDS)
.ignoring(NoSuchElementException.class).ignoring(StaleElementReferenceException.class);
wait.until(new Function<WebDriver, MobileElement>() {
@Override
public MobileElement apply(WebDriver driver) {
element.get
MobileElement element = driver.findElement(by);
return element;
}
});
但同样的问题也出现在这里。我需要将引用作为By
对象传递,就像PageFactory
我有引用一样WebElemrnt