要验证元素是否显示在硒中?

时间:2018-07-02 12:11:34

标签: java selenium

public boolean addNewAlertIsDisplayed() {       
    if(driver.findElement(By.xpath("//*[@class='aside right am-slide-right']")).isDisplayed()) {
    return true;
    }
    else {
        return false;
    }
}

如果不存在,我期望为假。

但是得到:

org.openqa.selenium.NoSuchElementException: Unable to find element with xpath == //*[@class='aside right am-slide-right'] (WARNING: The server did not provide any stacktrace information)

为什么会出现此异常。是否需要在try / catch中处理?

2 个答案:

答案 0 :(得分:2)

请检查并使用以下两种方法中的任何一种。

方法1: 您可以使用findElements方法找到Element。如果找到该元素,则elementList的大小将为1或大于1;如果未找到该元素,则大小将为0。因此,我们可以返回标志根据条件

    public boolean addNewAlertIsDisplayed(){
        List<WebElement> elementList=driver.findElements(By.xpath("//*[@class='aside right am-slide-right']"));

        //If the Element is not present , then the above list size will be 0, else it will have some value
        if(elementList.size()>0){
                return true;
        }else{
            return false;
        }
    }

方法2:    您可以使用try catch块检查存在的元素,如下所示:

    public boolean addNewAlertIsDisplayed(){
        try{
            driver.findElement(By.xpath("//*[@class='aside right am-slide-right']"));
            return true;
        }catch(NoSuchElementException e ){
                return false;
        }
    }

答案 1 :(得分:1)

尝试一下:

public boolean addNewAlertIsDisplayed() {
  List<WebElement> elements = driver.findElements(By.xpath("//*[@class='aside right am-slide-right']"));
  return elements.size() > 0 && elements.get(0).isDisplayed();
}

如果没有元素,则不会引发任何异常。它只是一个大小为0的列表。同样,如@Corey Goldberg所述,应检查此元素是否实际显示。我忘了将此添加到方法中。