Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java If条件中的布尔表达式在selenium中不起作用_Java_Selenium_Selenium Webdriver_Appium - Fatal编程技术网

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

Java If条件中的布尔表达式在selenium中不起作用,java,selenium,selenium-webdriver,appium,Java,Selenium,Selenium Webdriver,Appium,我试图在自动化中创建一个场景,在该场景中,它输入登录凭据并单击登录按钮,然后搜索元素。若元素被显示,那个么它将打印有效的凭证;若元素并没有显示,那个么它将执行一些其他操作,但在单击“登录”按钮后,代码不起作用。 在这里,我为它创建了一个方法 public void to checkLoginVerification()引发InterruptedException,MalformedUrlexException{ 单击点火按钮(); enterEmailId(“s243535@yopmail.co

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

public void to checkLoginVerification()引发InterruptedException,MalformedUrlexException{
单击点火按钮();
enterEmailId(“s243535@yopmail.com");
输入密码(“Test@123");
clickOnSignInButtonOnSignInScreen();//在此之后代码不起作用。
布尔x=driver.findElement(By.xpath(“//android.view.view[@content desc='Trips']”);
如果(x==true){
System.out.println(“有效凭证”);
}否则{
System.out.println(“无效凭证”);
clearEmailid();
clearPassword();
enterEmailId(“s2@yopmail.com");
输入密码(“Test@123");
单击登录按钮登录屏幕();
单击Profile按钮非主屏幕();
}
}
我在其他类中创建了上述方法,但在这里调用它们。
更具体地说,我正在使用Appium。

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

您应该使用显式等待而不是隐式等待。
在代码中,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();
}


如果布尔表达式(条件)为true,则将执行if块中的“语句”。如果布尔表达式为false,则不会执行If块内的语句,并执行If块后的其余代码。


“它不工作”不是一个问题描述。它应该做什么,基于什么样的保证输入,您看到它做了什么,以及您已经做了什么来调试问题(例如,查找并验证您正在进行的API调用,放置断点来检查值,等等)@Mike'Pomax'Kamermans很抱歉,如果我不能描述我的问题,但这是我目前所知道的全部。大概是您编写了这段代码,那么:您是否查阅了正在调用的函数的Selenium API文档?他们说你写的代码是正确的使用方法吗?@Mike'Pomax'Kamermans是的,我已经检查过了。然后记住,这不是一个普通的帮助论坛,有你应该读过的,所以请更新你的帖子来跟随他们:把细节放在你的帖子里。这包括说出你已经检查/验证/调试过的内容等。这样,你寻求帮助的人不会只是建议你做你已经做过的事情,而不会告诉他们你已经做了。我使用隐式等待。所以,我认为等待在这里不是问题,而且我在开始时使用了无效的凭证。所以,它应该直接转到else语句。
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;
        }
    }