while循环中的.isDisplayed条件给出"未找到元素异常"

时间:2014-05-20 06:11:37

标签: java selenium-webdriver

我试图获取此特定页面上的所有列并使用下面的内容,有些东西我做得不对,因为它给了元素未找到异常。根据我的说法,它不应该在循环中进入,因为条件不成立,那么这里的错误是什么。

public static void main(String[] args) {


        WebDriver driver = new FirefoxDriver();

        String xpathstart = "html/body/div[2]/div/ul/li[";
        String xpathends="]/a";

        driver.get("http://www.timeanddate.com/worldclock/");
        int i=1;
        while(driver.findElement(By.xpath(xpathstart+i+xpathends)).isDisplayed()){
            System.out.println("current column value is"+i);    
            i++;

        }
        System.out.println("total colored columns are "+i);
    }

我没有问过while循环的替代方法(用于循环,我已经知道)

它在selenium RC中的作用

while(selenium.isElementPresent(xpathstarts+i+xpathends))
{

}

2 个答案:

答案 0 :(得分:1)

这是因为findElement找不到您在XPath中引用的元素。最简单的解决方案是使用findElements代替:

    WebDriver driver = new FirefoxDriver();

    String xpath = "html/body/div[2]/div/ul/li";

    driver.get("http://www.timeanddate.com/worldclock/");
    int i=1;
    List<WebElement> elements = driver.findElements(By.xpath(xpath));

    for(int i = 0; i < elements.size(); ++i) {
        System.out.println("current column value is"+i);    

    }

    System.out.println("total colored columns are "+elements.size());

答案 1 :(得分:-1)

应该使用

isDisplayed()来检查元素的可见性,并且使用此方法的前提条件是元素源代码必须以隐藏或可见模式存在于页面源代码中。如果元素源不存在于页面源,然后它返回'未找到元素异常'。如果您更想知道元素的可见性状态,那么我建议使用try-catch和isDisplayed()来避免异常。

WebDriver driver = new FirefoxDriver();
driver.get("http://www.timeanddate.com/worldclock/");

String xpathToFindAllElements = "html/body/div[2]/div/ul/li/a";

List<WebElement> allElements = driver.findElements(By.xpath(xpath));

// Try-catch block ensures element is visible on page 
try {
    for(element : allElements){
       if(element.isDisplayed()){
           System.out.println("Element is visible");
           }
       }
}catch(Exception e){}