我正在使用 Selenium 构建自动化测试,当我尝试将 if/else 语句与 .isDisplayed 一起使用时,我将始终得到此响应。 “没有这样的元素:无法定位元素:”它正在检查的 Web 元素未显示,这应该指示它完成 else 语句,但它结束了测试。我该如何写一个解决方案?
@Step("Click the Open IRA Account")
public PortfolioHomePage clickOpenIRAAccount(){
waitForElementToAppear(signOutBtn);
if (openAccountBtn.isDisplayed()) {
waitForElementToAppear(openAccountBtn);
openAccountBtn.click();
} else {
waitForElementToAppear(finishMyApplicationButton);
finishMyApplicationButton.click();
}
return this;
}
我已尝试过 {}Catch(Exceptions e),但这没有帮助。
.isDisplayed()
的目的是检查已找到/现有的元素实际上是否可见/显示。你所描述的是没有找到该元素。为了解决这个问题,您需要首先检查该元素是否存在,然后检查它是否可见。如果它不存在,那么你可以认为它不可见。
判断元素是否存在而不抛出异常的方法是使用模式
List<WebElement> e = driver.findElements(...);
if (e.isEmpty()) {
// element does not exist
} else {
// element does exist
}
我们可以将其合并到您的方法中
@Step("Click the Open IRA Account")
public PortfolioHomePage clickOpenIRAAccount(){
waitForElementToAppear(signOutBtn);
List<WebElement> openAccountBtn = driver.findElements(...);
if (!openAccountBtn.isEmpty() && openAccountBtn.get(0).isDisplayed()) {
openAccountBtn.get(0).click();
} else {
waitForElementToAppear(finishMyApplicationButton);
finishMyApplicationButton.click();
}
return this;
}
一些反馈...
您当前的方法有逻辑错误
if (openAccountBtn.isDisplayed()) {
waitForElementToAppear(openAccountBtn);
你检查是否显示
openAccountBtn
,它通过了,然后你等待它出现???使用 waitForElementToAppear(openAccountBtn)
。如果它已经可见,并且如果 if
条件通过,那么等待它可见是没有意义的。我从代码中删除了等待调用。
您的方法名称为
clickOpenIRAAccount()
,但如果 if
条件失败,则单击 finishMyApplicationButton
。我不知道你的场景,但这似乎不属于名为 clickOpenIRAAccount()
的方法。我建议如果 openAccountBtn
不存在,那么该方法应该抛出异常。否则,当您退出该方法时,您的测试将处于不一致的状态。