我正在使用if
块来检查产品是否有存货。但是它没有执行else
块,也不想将else
部分放在catch块中。
我用过isDisplayed
,isEnabled
,但仍然无法正常工作。
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();
}
答案 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 {}
块,这会产生开销。