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

时间:2015-10-05 07:30:28

标签: java selenium if-statement selenium-webdriver automation

请参阅我的以下代码:

我的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”}

4 个答案:

答案 0 :(得分:3)

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

请查看this了解详情

答案 1 :(得分: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;
    }
}
第二种方式: -

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

答案 2 :(得分:1)

创建一个新功能,如下所示

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

}

检查代码中的条件如下:

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

答案 3 :(得分:0)

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

根据Selenium docs检查元素是否存在的正确方法是使用.findElements()并检查空List。我将.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);
}