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

Posted

技术标签:

【中文标题】我无法导航到我的硒代码的其他部分,总是失败【英文标题】:I cannot navigate to else part of my selenium code ,always getting failure 【发布时间】:2016-01-01 19:09:10 【问题描述】:

请看我下面的代码:

我的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:无法定位元素: "method":"id","selector":"error_explanation"

【问题讨论】:

请描述你的 else-branch 出了什么问题或者你需要什么样的帮助。谢谢。 我的 TestNG 结果显示为 org.openqa.selenium.NoSuchElementException: Unable to locate element: "method":"id","selector":"error_explanation"...请帮我解决这个问题 请更新问题并发布完整的错误日志。 Selenium WebDriver - Test if element is present的可能重复 【参考方案1】:

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

请查看this了解更多信息

【讨论】:

【参考方案2】:

使用下面的代码:-

第一种方式:-

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

【讨论】:

【参考方案3】:

如下创建一个新函数,

public boolean findElementById(String id)

        try 
        webDriver.findElement(By.id(id));
     catch (NoSuchElementException e) 
        return false;
    
    return true;


检查代码中的条件是否如下:

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

【讨论】:

【参考方案4】:

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

根据Selenium docs 检查元素是否存在的正确方法是使用.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);

【讨论】:

java.util.List errorExplanation = driver.findElements(By.id("error_explanation")); ::;比 kyou :)

以上是关于我无法导航到我的硒代码的其他部分,总是失败的主要内容,如果未能解决你的问题,请参考以下文章

不一致的硒网格错误

Aurelia:无法将控制器链接到我的导航栏模板

为什么我不能“等待”到我的代码的其他部分?

python中的硒:NoSuchElementException:消息:没有这样的元素:无法找到元素

有没有办法解决这个问题? +如何将代码保存到我的计算机中

如何单击一个我看不到它的元素的硒框?