如何让 .isDisplayed() 在 if/else 语句中工作?

问题描述 投票:0回答:1

我正在使用 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),但这没有帮助。

java selenium-webdriver
1个回答
0
投票

.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;
}

一些反馈...

  1. 您当前的方法有逻辑错误

    if (openAccountBtn.isDisplayed()) {
         waitForElementToAppear(openAccountBtn);
    

    你检查是否显示

    openAccountBtn
    ,它通过了,然后你等待它出现???使用
    waitForElementToAppear(openAccountBtn)
    。如果它已经可见,并且如果
    if
    条件通过,那么等待它可见是没有意义的。我从代码中删除了等待调用。

  2. 您的方法名称为

    clickOpenIRAAccount()
    ,但如果
    if
    条件失败,则单击
    finishMyApplicationButton
    。我不知道你的场景,但这似乎不属于名为
    clickOpenIRAAccount()
    的方法。我建议如果
    openAccountBtn
    不存在,那么该方法应该抛出异常。否则,当您退出该方法时,您的测试将处于不一致的状态。

© www.soinside.com 2019 - 2024. All rights reserved.