我在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。当您再次打开上一页时,它会再次呈现,因此您需要再次获取该页上元素的引用(指针(。