在IF语句中检查`driver.findElement(...)`会抛出`NoSuchElementException`

时间:2017-02-27 12:55:50

标签: java selenium selenium-webdriver

我在运行以下代码时获得NoSuchElementException

if (driver.findElement(By.xpath("//*[@id='gr2']")).isDisplayed()) {
    Thread.sleep(5000);
    driver.findElement(By.xpath("//*[@id='balInqTableStep2']/td/table/tbody/tr/td/table/tbody/tr[3]/td[4]/input[2]")).click();
}
else {
    test.log(LogStatus.FAIL,"Please configure Gift Slabs for this site. Contact business.");
    test.log(LogStatus.FAIL,"Second time wallet credit is not done");
}

2 个答案:

答案 0 :(得分:1)

NoSuchElementException 异常表示页面上没有元素。

isDisplayed 方法假定该元素已存在于页面上,因此当元素不存在时会抛出异常。

您可以在调用webdriver方法之前确保该元素存在,并且您可以编写自己的方法来为您处理此问题。

以下代码段可能对您有所帮助

public boolean isDisplayed(By identifier){
    boolean isElementDisplayed = false;
    try{
        WebElement element = driver.findElement(identifier);
        isElementDisplayed = element.isDisplayed()
    }catch (NoSuchElementException){
        return false;
    }

    return isElementDisplayed;
}

你可以这样称呼它

isDisplayed(By.xpath("//*[@id='gr2']")

答案 1 :(得分:0)

总是当你致电driver.findElement(By.xpath("//*[@id='gr2']"))并且DOM中没有该元素时,它会抛出NoSuchElementException

还有一种方法可以避免代码抛出异常,调用方法findElements,而不是findElement

例如:

List<WebElement> elements = driver.findElements(By.xpath("//*[@id='gr2']"));
if(!elements.isEmpty() && elements.get(0).isDisplayed()) {
    Thread.sleep(5000);
    driver.findElement(By.xpath("//*[@id='balInqTableStep2']/td/table/tbody/tr/td/table/tbody/tr[3]/td[4]/input[2]")).click();
}
else {
    test.log(LogStatus.FAIL,"Please configure Gift Slabs for this site. Contact business.");
    test.log(LogStatus.FAIL,"Second time wallet credit is not done");
}

希望它适合你。