我在运行以下代码时获得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");
}
答案 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");
}
希望它适合你。