Java 验证元素是否显示在selenium中?

Java 验证元素是否显示在selenium中?,java,selenium,Java,Selenium,如果它不在那里,我希望是假的 但是得到: public boolean addNewAlertIsDisplayed() { if(driver.findElement(By.xpath("//*[@class='aside right am-slide-right']")).isDisplayed()) { return true; } else { return false; } } 为什么会出现这种例外。。是否需要在t

如果它不在那里,我希望是假的

但是得到:

public boolean addNewAlertIsDisplayed() {       
    if(driver.findElement(By.xpath("//*[@class='aside right am-slide-right']")).isDisplayed()) {
    return true;
    }
    else {
        return false;
    }
}
为什么会出现这种例外。。是否需要在try/catch中处理此问题?

尝试以下操作:

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)
public boolean addNewAlertIsDisplayed(){
List elements=driver.findElements(By.xpath(“/*[@class='aside right am slide right']);
返回elements.size()>0&&elements.get(0).isDisplayed();
}

如果没有元素,它不会抛出任何异常。它将只是一个大小为0的列表。正如@Corey Goldberg提到的,应该检查该元素是否实际显示。我忘记将此添加到方法。

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

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

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

是的,如果元素在DOM中不可用,那么它将抛出该异常。需要使用try/catch块进行处理。似乎您得到了一个可接受的答案,但理想情况下您需要诱导
try-catch{}
@DebanjanB最佳实践是避免在不必要时抛出异常。这也遵循了Selenium文档中概述的最佳实践,
findElement不应用于查找不存在的元素,而应使用findElements(By)和断言零长度响应。
请参阅。@DebanjanB我不理解您的观点。OP正在使用“.findElement”验证是否显示元素。您建议使用
.findElement()
try-catch()
。。。这与上述最佳实践和指导方针相反。@DebanjanB您知道您提倡的方法与最佳实践和Selenium文档背道而驰?为什么您发布相同的答案?最佳实践是避免在不必要时抛出异常。这也遵循了Selenium文档中概述的最佳实践,
findElement不应用于查找不存在的元素,而应使用findElements(By)和断言零长度响应。
请参阅。这两种解决方案都不会告诉您是否显示了元素。。。它只检查它们是否存在于DOM中。请注意,这个答案实际上并没有告诉您元素是否显示为OP所要求的。。。它只检查它是否存在于DOM中。请参阅
WebElement
上的
isDislayedI()
方法,检查它是否实际显示。@CoreyGoldberg感谢您的反馈,捕捉得好!我已经编辑了我的答案
    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;
        }
    }
    public boolean addNewAlertIsDisplayed(){
        try{
            driver.findElement(By.xpath("//*[@class='aside right am-slide-right']"));
            return true;
        }catch(NoSuchElementException e ){
                return false;
        }
    }