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中处理?
答案 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所述,应检查此元素是否实际显示。我忘了将此添加到方法中。