我正在尝试使用一个元素进行测试,并且即使找不到该元素,我也想继续进行测试。
我在这部分代码中使用了NoSuchElementException。
这是我之前尝试过的:
try {
WebElement site_width_full_width = wait.until(
ExpectedConditions.visibilityOfElementLocated(
By.cssSelector("label[for=site_width-full_width]")));
site_width_full_width.click();
Thread.sleep(1000);
System.out.println("FullWidth Label Found!");
} catch (NoSuchElementException e) {
System.out.println("FullWidth Label not found!");
System.out.println(e);
}
但是当该元素不可用时,就不能将其扔到NoSuchElementException中,并且所有测试都会失败并失败。
解决方案是什么,当元素不可用时如何继续测试。
谢谢。
答案 0 :(得分:1)
您可以在catch块中尝试使用其父类(如Throwable或Exception)。就我而言,我可以按预期的方式在捕获块中抛出
答案 1 :(得分:1)
您可能会遇到其他派生类类型的异常。您可以使用父类“ Exception”来捕获它,然后进一步细化确切的异常类型。
尝试使用;
try
{
WebElement site_width_full_width = wait.until(
ExpectedConditions.visibilityOfElementLocated(
By.cssSelector("label[for=site_width-full_width]")));
site_width_full_width.click();
Thread.sleep(1000);
System.out.println("FullWidth Label Found!");
}
catch (Exception e)
{
if (e instanceof NoSuchElementException)
{
System.out.println("FullWidth Label not found!");
System.out.println(e);
}
else
{
System.out.println("Unexpected exception!");
System.out.println(e);
}
}
希望这会有所帮助。
答案 2 :(得分:0)
您正在捕获NoSuchElementException
,但是如果找不到任何内容,则显式等待将引发TimeoutException
。要获得您的工作,您应该修改代码以执行以下操作:
try {
WebElement site_width_full_width = wait.until(
ExpectedConditions.visibilityOfElementLocated(
By.cssSelector("label[for=site_width-full_width]")
));
site_width_full_width.click();
System.out.println("FullWidth Label Found!");
} catch (NoSuchElementException | TimeoutException e) {
System.out.println("FullWidth Label not found!");
System.out.println(e);
}
但是,使用Try / Catch作为执行流程通常是一种代码反模式。做这样的事情会更好:
List<WebElement> site_width_full_width =
driver.findElements(By.cssSelector("label[for=site_width-full_width]"));
if (site_width_full_width.size() > 0) {
System.out.println("FullWidth Label Found!");
site_width_full_width.get(0).click();
} else {
System.out.println("FullWidth Label not found!");
}
答案 3 :(得分:0)
Webdriver已经提供了以更简单的方式解决此问题的方法。您可以使用以下方式
WebDriverWait wait= new WebDriverWait(driver, TimeSpan.FromSeconds(120));
wait.IgnoreExceptionTypes(typeof(NoSuchElementException), typeof(ElementNotVisibleException));
WebElement site_width_full_width = wait.until(
ExpectedConditions.visibilityOfElementLocated(
By.cssSelector("label[for=site_width-full_width]")));
site_width_full_width.click();
Thread.sleep(1000);
System.out.println("FullWidth Label Found!");
注意:您可以添加所有需要忽略的异常类型。