If 条件中的布尔表达式在 selenium 中不起作用

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

我正在尝试创建一个自动化场景,其中输入登录凭据并单击“登录”按钮,然后搜索一个元素。如果显示元素,则它会打印有效凭据,如果未显示元素,则它会执行一些其他操作,但单击“登录”按钮后代码不起作用。 这里我为它创建了一个方法。

public void toCheckLoginVerification() throws InterruptedException,MalformedURLException {
    clickOnSignInbutton();
    enterEmailId("[email protected]");
    enterPassword("Test@123");
    clickOnSignInButtonOnSignInScreen(); //code not working after this.
    boolean x = driver.findElement(By.xpath("//android.view.View[@content-desc='Trips']")).isDisplayed();
    if(x==true) {
        System.out.println("Valid Credentials");
    } else {
        System.out.println("Invalid Credentials");
        clearEmailid();
        clearPassword();
        enterEmailId("[email protected]");
        enterPassword("Test@123");
        clickOnSignInButtonOnSignInScreen();
        clickOnProfileButtonOnHomeScreen();
    }
}

我在其他类中创建了上述方法,但在这里调用它们。 更具体地说,我正在使用 Appium。

java selenium selenium-webdriver appium
3个回答
1
投票

您应该使用显式等待而不是隐式等待。
使用您的代码,selenium 会找到刚刚创建但尚未完全加载/渲染的元素。因此,当您的

driver.findElement(By.xpath("//android.view.View[@content-desc='Trips']"))
返回该元素时,它仍然不显示/可见。
而您应该等待直到发现该元素可见。
所以,你可以使用以下方法:

public boolean waitForElementToBeVisible(String xpath, int delay) {
        wait = new WebDriverWait(driver, delay);
        try {
            wait.until(ExpectedConditions.visibilityOfElementLocated(element));
            return true;
        }catch (Exception e){
            return false;
        }
    }

现在你可以说:

if(waitForElementToBeVisible("//android.view.View[@content-desc='Trips']",10)){
    System.out.println("Valid Credentials");
} else{
    System.out.println("Invalid Credentials");
    clearEmailid();
    clearPassword();
    enterEmailId("[email protected]");
    enterPassword("Test@123");
    clickOnSignInButtonOnSignInScreen();
    clickOnProfileButtonOnHomeScreen();
}


0
投票

您正在检查该元素是否立即显示。 相反,您应该使用 selenium 的隐式或显式等待机制


0
投票

boolean x = driver.findElement(By.xpath("//android.view.View[@content-desc='Trips']")).isDisplayed(); webelement 接口仅向您的变量返回 true。你的变量 x 中应该有布尔值 false。只有这样,你的 else 语句才会起作用

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