boolean表达式在selenium中不起作用

lrpiutwd  于 2021-07-12  发布在  Java
关注(0)|答案(3)|浏览(380)

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

public void toCheckLoginVerification() throws InterruptedException,MalformedURLException {
    clickOnSignInbutton();
    enterEmailId("s243535@yopmail.com");
    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("s2@yopmail.com");
        enterPassword("Test@123");
        clickOnSignInButtonOnSignInScreen();
        clickOnProfileButtonOnHomeScreen();
    }
}

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

zynd9foi

zynd9foi1#

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

bbmckpt7

bbmckpt72#

您应该使用显式等待而不是隐式等待。
在代码中,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("s2@yopmail.com");
    enterPassword("Test@123");
    clickOnSignInButtonOnSignInScreen();
    clickOnProfileButtonOnHomeScreen();
}
tez616oj

tez616oj3#

如果布尔表达式(条件)为true,则将执行if块中的“statement”。如果布尔表达式为false,则不会执行if块中的语句,它将执行if块之后的其余代码。
读这个

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

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

相关问题