Java 我无法导航到selenium代码的其他部分,总是会失败

Java 我无法导航到selenium代码的其他部分,总是会失败,java,selenium,if-statement,selenium-webdriver,automation,Java,Selenium,If Statement,Selenium Webdriver,Automation,请参阅我的以下代码: 我的如果部分代码成功运行,但我的其他部分不工作。 代码被跳过,并显示失败 if (driver.findElement(By.id("error_explanation")).isDisplayed() == true) { driver.findElement(By.id("user_email")).clear(); driver.findElement(By.id("user_email")).sendKeys("soumya50@toobler

请参阅我的以下代码:

我的
如果
部分代码成功运行,但我的
其他
部分不工作。 代码被跳过,并显示失败

 if (driver.findElement(By.id("error_explanation")).isDisplayed() == true) {
     driver.findElement(By.id("user_email")).clear();
     driver.findElement(By.id("user_email")).sendKeys("soumya50@toobler.com");
     driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
     driver.findElement(By.id("user_password")).sendKeys("password");
     driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
     driver.findElement(By.id("user_current_password")).sendKeys("password");
     driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
     driver.findElement(By.name("commit")).click();
     driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
     driver.findElement(By.linkText("LOGOUT")).click();
 } else

 {
     driver.findElement(By.linkText("REQUEST A PERMIT")).click();
     driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
 }
获取错误如下所示:-


org.openqa.selenium.NoSuchElementException:无法定位元素: {“方法”:“id”,“选择器”:“错误解释”}


在Selenium中,不应使用
driver.findElement
检查元素是否存在。 改用
driver.findElements
。它返回WebElement的列表。 然后可以检查列表是否为空

请查看以了解更多信息,请使用以下代码:-

第一条路:-

public static void main(String[] args) {
    driver = new FirefoxDriver();
    driver.manage().window().maximize();
    driver.manage().timeouts().implicitlyWait(40, TimeUnit.SECONDS);
    driver.get("URL");
    By element=By.id("error_explanation"));

    Boolean isPresent =isElementPresent(element);

    System.out.println(isPresent);

    if(isPresent==true)
    {
        System.out.println("yes");
    }
    else
    {
        System.out.println("No");
    }

}


public boolean isElementPresent(By locatorKey) {
    try {
        driver.findElement(locatorKey);
        return true;
    } catch (org.openqa.selenium.NoSuchElementException e) {
        return false;
    }
}
第二种方式:-

    By element=By.id("error_explanation"));

    Boolean isPresent = driver.findElements(element).size() > 0;

    System.out.println(isPresent);

    if(isPresent==true)
    {
        System.out.println("yes");
    }
    else
    {
        System.out.println("No");
    }

创建一个新函数,如下所示

public boolean findElementById(String id)
{
        try {
        webDriver.findElement(By.id(id));
    } catch (NoSuchElementException e) {
        return false;
    }
    return true;

}
检查代码中是否存在以下条件:

 if (findElementById("error_explanation")) {
  .....
 }else {
  .....
 }

您得到错误是因为当元素不可见时。。。很明显,它根本不在页面上。首先需要检查元素是否存在,然后查看它是否可见

根据检查元素是否存在的正确方法是使用
.findElements()
并检查是否存在空的
列表。我将
.isEmpty()
检查与
.isDisplayed()
检查您现有的
if
。现在应该可以了

List<WebElement> errorExplanation = driver.findElements(By.id("error_explanation"));
if (!errorExplanation.isEmpty() && errorExplanation.get(0).isDisplayed())
{
    driver.findElement(By.id("user_email")).clear();
    driver.findElement(By.id("user_email")).sendKeys("soumya50@toobler.com");
    driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
    driver.findElement(By.id("user_password")).sendKeys("password");
    driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
    driver.findElement(By.id("user_current_password")).sendKeys("password");
    driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
    driver.findElement(By.name("commit")).click();
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    driver.findElement(By.linkText("LOGOUT")).click();
}
else
{
    driver.findElement(By.linkText("REQUEST A PERMIT")).click();
    driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
}
List errorexplainion=driver.findElements(By.id(“error_explainion”);
if(!errorExpression.isEmpty()&&errorExpression.get(0.isDisplayed())
{
driver.findElement(By.id(“user_email”)).clear();
driver.findElement(By.id(“用户电子邮件”)).sendKeys(“soumya50@toobler.com");
driver.manage().timeouts().implicitlyWait(2,TimeUnit.SECONDS);
driver.findElement(By.id(“用户密码”)).sendKeys(“密码”);
driver.manage().timeouts().implicitlyWait(2,TimeUnit.SECONDS);
driver.findElement(By.id(“用户当前密码”)).sendKeys(“密码”);
driver.manage().timeouts().implicitlyWait(2,TimeUnit.SECONDS);
driver.findElement(按.name(“提交”))。单击();
driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
driver.findElement(By.linkText(“注销”))。单击();
}
其他的
{
driver.findElement(By.linkText(“请求许可”))。单击();
driver.manage().timeouts().implicitlyWait(5,TimeUnit.SECONDS);
}

请说明您的else分支机构有什么问题,或者您需要什么样的帮助。谢谢。我的TestNG结果显示asorg.openqa.selenium.NoSuchElementException:无法定位元素:{“方法”:“id”,“选择器”:“错误解释”}。。。请帮助我如何解决这个问题请更新问题并发布完整的错误日志。java.util.List errorexplainion=driver.findElements(By.id(“error_explainion”);:;丹圭:)