Selenium Webdriver元素不存在条件失败

时间:2014-07-07 15:28:07

标签: java selenium webdriver

我在while块中有一个If Else块。如果元素存在,单击它以将其删除并将其放回父列表。否则,如果元素不在列表中,则从父列表中选择并将其放回。

第一次运作。它看到该元素存在,单击它以删除它。在第二次传递时,它在检查元素时失败 我尝试使用FindElement.IsDisplayed和!= null。

我得到了这个例外:

org.openqa.selenium.NoSuchElementException: Unable to find element with css selector == select[id="idSelSelectedLanes"]>option[value="9012"] (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 30.16 seconds

我错过了什么?

这是我在此发表的第一篇文章,因此对任何格式问题表示道歉。

感谢

count ++;
if(count % 2 == 0){  
    if(BROWSER.equals("IE")) {
       // check if 9012 is present
        if(driver.findElement(By.cssSelector("select[id=\"idSelSelectedLanes\"]>option[value=\"9012\"]"))!=null){
            try {
               // since its present, click to remove
               driver.findElement(By.cssSelector("select[id=\"idSelSelectedLanes\"]>option[value=\"9012\"]")).click();;
               Thread.sleep(1000);
            } catch(NoSuchElementException e) {
               System.out.println("Couldn't remove 9012");
            }
        } else  {
            try {
               //Not present, so select from Available Lanes    
               driver.findElement(By.cssSelector("select[id=\"idSelAvailableLanes\"]>option[value=\"9012\"]")).isDisplayed();
            } catch (NoSuchElementException e) {
               System.out.println("Couldn't add 9012");                            
            }
        }
    }
}

3 个答案:

答案 0 :(得分:0)

您需要将driver.findElement(...)放入try-catch

count ++;
WebElement e;
if(count % 2 == 0) {
    if(BROWSER.equals("IE")) {
        // check if 9012 is present
        try {
            e = driver.findElement(By.cssSelector("select[id=\"idSelSelectedLanes\"]>option[value=\"9012\"]"));
            Thread.sleep(1000);
            e.click()
        } catch (NoSuchElementException e) {
            System.out.println("Couldn't remove 9012");
            // the else part goes here
        }
    }
}


另一种方法是使用findElements而不是findElement来避免try-catch,并使用.get(0)来获取所需的元素。

答案 1 :(得分:0)

另一个解决方案,您应首先使用findElements检查elementExist(如果存在)>执行其他操作

count ++;
WebElement e;
String e9012Css = "select[id=\"idSelSelectedLanes\"]>option[value=\"9012\"]";
if(count % 2 == 0) {
    if(BROWSER.equals("IE")) {
    // check if 9012 is present
        e9012Existed = driver.findElements(By.cssSelector(e9012Css)).size() > 0;
        if(e9012Existed) {
            driver.findElement(By.cssSelector(e9012Css)).Click();
        } 
    }
    else {
        System.out.println("Couldn't remove 9012");
    }
}

答案 2 :(得分:0)

尝试使用isElementPresent

if(isElementPresent(By.cssSelector("select[id=\"idSelSelectedLanes\"]>option[value=\"9012\"]"))){
  // since its present, click to remove 
} else {
  //Not present, so select from Available Lanes 
}