除了用于记录目的之外,还有处理硒异常的方法吗?

时间:2019-04-18 08:11:44

标签: java selenium exception appium

我发现很难理解硒中异常处理的要点。 例如,如果我尝试单击某个元素,但找不到该元素,则会发生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();
    }
}

3 个答案:

答案 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(),最后也很有用。 希望对您有所帮助...编码愉快:)