当导航回页面时,会出现"过时元素参考",介绍如何编写整洁的代码



我在Java Selenium中实现自动化,而不使用Page Factory。

我有一个添加候选按钮元素,它在两个测试中被单击。一个很简单,在进入InviteToCompany页面后,我单击此按钮并继续。但是,另一个要求我通过InviteToCompany页面,然后使用返回箭头返回"InviteToCompany"页面,再次单击添加候选人按钮。此时出现StaleElementReferenceException

我已经写了这样一段代码来处理这个问题,但我想知道,是否有比为第二次测试捕获异常更干净整洁的方法可以继续进行。

public InviteToCompanyPO clickAddCandidateBtn() {
try {
getClickableElement(addCandidateBtn).click();
} catch (StaleElementReferenceException e) {
log.warn("StaleElementReferenceException caught, retrying...", e);
getClickableElement(addCandidateBtn).click();
}
return new InviteToCompanyPO(driver);
}

在我必须编写第二个测试(导致老化的测试(之前,这个方法看起来就像这样:

public InviteToCompanyPO clickAddCandidateBtn() {
getClickableElement(addCandidateBtn).click();
return new InviteToCompanyPO(driver);
}

我试着写这样的东西:

public InviteToCompanyPO clickAddCandidateBtn() {
wait
.ignoring(StaleElementReferenceException.class)
.until(ExpectedConditions.elementToBeClickable(addCandidateBtn))
.click();
return new InviteToCompanyPO(driver);
}

但它不起作用。

我猜您使用的是页面工厂
无论如何,当您返回到InviteToCompany页面并需要再次单击Add Candidate按钮时,您将需要再次获取该元素
我的意思是传递该元素的locator或By,并使用driver.findElement()方法再次获得WebElement对象
这是由于WebElement实际上是指向页面上实际Web元素的引用(指针(。当您从一个页面导航到另一个页面时,对上一页上对象的引用将变为无效,Stale。当您再次打开上一页时,它会再次呈现,因此您需要再次获取该页上元素的引用(指针(。

最新更新