检查DOM中是否存在元素的条件

时间:2019-12-16 10:22:48

标签: java selenium

我正在使用if块来检查产品是否有存货。但是它没有执行else块,也不想将else部分放在catch块中。

我用过isDisplayedisEnabled,但仍然无法正常工作。

try {
    if (driver.findElement(By.xpath("//span[contains(text(),'Currently unavailable.')]"))
            .isEnabled()) {
        o1.put("STOCK", "Out of Stock");
    } else {
        o1.put("STOCK", "In Stock");
    }
} catch (NoSuchElementException e) {
    e.printStackTrace();
}

2 个答案:

答案 0 :(得分:2)

建议每当检查元素是否存在时都使用findElements()方法 因为如果发生超时,它将返回空列表而不是异常,并且在findElements()的情况下,您将无法处理该异常。因此,请删除try catch,并使用以下代码删除它。

if(driver.findElements(By.xpath("//span[contains(text(),'Currently unavailable.')]")).size() > 0) {
    o1.put("STOCK", "Out of Stock");
} else {
    o1.put("STOCK", "In Stock");
}

正如您在代码中的if条件中提到的那样,如果在到达方法.isEnabled()之前找不到元素,它将始终引发异常。

答案 1 :(得分:0)

要检查条件,您需要检查元素的可见性,因此,除了使用isDisplayed()isEnabled()之外,还需要为{{1}引入 WebDriverWait }},您可以使用以下Locator Strategy

visibilityOfElementLocated()

注意:如果您使用的是try { new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//span[contains(text(),'Currently unavailable.')]"))); o1.put("STOCK", "Out of Stock"); } catch (TimeoutException e) { o1.put("STOCK", "In Stock"); } 块,则不需要try-catch {}块,这会产生开销。