我发现很难理解硒中异常处理的要点。
例如,如果我尝试单击某个元素,但找不到该元素,则会发生NoSuchElementException
。
我可以捕获异常,抛出新的RunTimeException
或什么也不做。结果将是相同的(程序将失败并停止)。
我为什么要打扰处理这样的异常?
我在这里想念东西吗?
谢谢
public void clickOnElement(MobileElement element, Integer waitInSeconds){
waitInSeconds = (waitInSeconds != null ? waitInSeconds : this.secondsToWait);
try {
waitFor(ExpectedConditions.elementToBeClickable(element),waitInSeconds);
element.click();
} catch (Exception e) {
System.out.println("Could not click on element");
e.printStackTrace();
}
}
答案 0 :(得分:1)
Selenium的异常处理是一种针对意外情况证明测试的好方法。例如,如果不再将元素附加到页面,则可以尝试再次查找该元素,例如在执行JavaScript更改元素中的某些内容之后。
try{
driver.findElement(By.id("MyId")).click();
} catch (StaleElementReferenceException e){
driver.findElement(By.id("MyId")).click();
}
或者,例如,您可以忽略是否未显示元素,例如,登录后页面顶部的GDPR覆盖。
try {
wait.until(ExpectedConditions.presenceOfElementLocated(By.id("gdpr_overlay")));
} catch (TimeoutException ignored){
}
如果未显示覆盖,这将忽略等待所引发的异常,并继续运行测试。
答案 1 :(得分:0)
异常是非常有用的功能,比记录日志要有用得多,您应该查找它。 您可以在catch块中执行任何操作,如果第一个失败,则可以尝试单击其他元素,然后重定向到另一页...可能性确实是无限的。 建议:避免通用异常,您应该捕获特定的异常并做出相应的反应,在最后一个catch块中,您可以执行通用Exception e并引发错误。
答案 2 :(得分:0)
首先,ExceptionHandling不是Selenium的概念,而是与JAVA有关。现在介绍处理异常的用法,它对您在构建框架时将理解的概念有很深的了解,但是到目前为止,重要的是要通过处理异常来理解,您可以继续执行代码,而JVM不会终止其余部分遇到异常。
try{
}
catch{
}
finally
{
}
最后,当您始终想要执行代码块时,无论您的方案是通过还是失败,例如driver.close(),最后也很有用。 希望对您有所帮助...编码愉快:)