我不能导航到我的硒代码的其他部分,总是得到失败



请参阅我下面的代码:

我的if部分代码成功运行,但我的else部分不工作。代码被跳过,显示失败。

 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","选择器":"error_explanation"}

在Selenium中,您不应该使用driver.findElement来检查元素是否存在。使用driver.findElements代替。它返回一个WebElement列表。然后,您可以检查列表是否为空。

查看更多信息

使用下面的代码:-

方式1:-

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

方式2:-

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

你得到的错误,因为当元素不可见…显然,它根本就不在纸上。您首先需要检查该元素是否存在,然后检查它是否可见。

根据Selenium文档检查元素是否存在的正确方法是使用.findElements()并检查空List。我在你现有的if中合并了.isEmpty()检查和.isDisplayed()检查。现在应该可以工作了。

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

最新更新