Selenium Webdriver 中的异常处理(类型)

什么是异常?

异常是在程序执行时发生的错误。但是,在运行程序时,编程语言会生成一个异常,应该对其进行处理以避免程序崩溃。

异常表示,尽管事件可能发生,但此类事件发生频率较低。当方法无法处理异常时,它会将其抛给其调用函数。

Selenium Webdriver 中的异常类型

1. ElementNotVisibleException: 这种 Selenium 异常发生在 DOM 中现有元素的特性设置为隐藏时。

2. ElementNotSelectableException: 这种 Selenium 异常发生在元素存在于 DOM 中,但你无法选择它。因此,无法进行交互。

3. NoSuchElementException: 如果找不到元素,则会发生此异常。

4. NoSuchFrameException: 如果要切换到的目标帧不存在,则会发生此异常。

5. NoAlertPresentException: 当你切换到不存在的警告框时,会发生此异常。

6. NoSuchWindowException: 如果要切换到的目标窗口不存在,则会发生此异常。

7. StaleElementReferenceException: 这种 Selenium 异常发生在 Web 元素从当前 DOM 分离时。

8. SessionNotFoundException: WebDriver 在你退出浏览器后仍在运行。

9. TimeoutException: 当命令没有足够的时间完成时抛出。例如,在指定时间内未找到搜索的元素。

10. WebDriverException: 这种异常发生在你关闭浏览器后 WebDriver 仍在运行的情况下。

11. ConnectionClosedException: 这种异常发生在驱动程序断开连接时。

12. ElementClickInterceptedException: 由于接收事件的元素遮挡了请求点击的元素,因此命令可能无法完成。

13. ElementNotInteractableException: 这种 Selenium 异常在 DOM 中存在任何元素时抛出。但是,无法与此类元素交互。

14. ErrorInResponseException: 这发生在与 Firefox 扩展或远程驱动程序服务器交互时。

15. ErrorHandler.UnknownServerException: 异常用作服务器返回没有堆栈跟踪的错误时的占位符。

16. ImeActivationFailedException: 当 IME 引擎激活失败时,会发生此预期。

17. ImeNotAvailableException: 当 IME 支持不可用时发生。

18. InsecureCertificateException: 导航导致用户代理遇到证书警告。这可能是由无效或过期的 TLS 证书引起的。

19. InvalidArgumentException: 当参数不属于预期类型时发生。

20. InvalidCookieDomainException: 当你尝试在不同域而不是当前 URL 下添加 cookie 时发生。

21. InvalidCoordinatesException: 这种异常与无效的交互操作相匹配。

22. InvalidElementStateException: 当元素无效时无法完成命令时发生。

23. InvalidSessionIdException: 当给定会话 ID 未包含在活动会话列表中时发生此异常。这意味着会话不存在或处于非活动状态。

24. InvalidSwitchToTargetException: 当要切换到的目标帧或窗口不存在时发生。

25. JavascriptException: 在执行用户给定的 JavaScript 时发生此问题。

26. JsonException: 当会话未创建时,你尝试获取会话时发生。

27. NoSuchAttributeException: 当找不到元素的属性时,会发生此类异常。

28. MoveTargetOutOfBoundsException: 如果提供给 ActionChains move() 方法的目标无效,则会发生。例如,超出文档范围。

29. NoSuchContextException: ContextAware 执行移动设备测试。

30. NoSuchCookieException: 当对于当前浏览文档的所有关联 cookie 均未找到与给定路径名匹配的 cookie 时,会发生此异常。

31. NotFoundException: 此异常是 WebDriverException 的子类。当 DOM 上的元素不存在时,会发生此异常。

32. RemoteDriverServerException: 当服务器因描述的能力不正确而无响应时,会抛出此 Selenium 异常。

33. ScreenshotException: 无法捕获屏幕。

34. SessionNotCreatedException: 当新会话无法成功创建时发生。

35. UnableToSetCookieException: 如果驱动程序无法设置 cookie,则会发生此异常。

36. UnexpectedTagNameException: 如果支持类未按预期获取 Web 元素时发生。

37. UnhandledAlertException: 当存在警报但 WebDriver 无法执行警报操作时,会发生此预期。

38. UnexpectedAlertPresentException: 当意外出现警报时发生。

39. UnknownMethodException: 当请求的命令与已知 URL 匹配但与特定 URL 的方法不匹配时,会发生此异常。

40. UnreachableBrowserException: 仅当浏览器因某种原因无法打开或崩溃时,才会发生此异常。

41. UnsupportedCommandException: 当远程 WebDriver 未按预期发送有效命令时发生。

如何处理 Selenium 中的异常

以下是一些重要的标准,你可以使用它们来处理 Selenium WebDriver 中的异常

步骤 1) Try-catch

此方法可以捕获异常,它使用 try 和 catch 关键字的组合。Try 命令表示块的开始,而 Catch 放在 try 块的末尾,有助于解决异常。

try
{
// Code
} catch (Exception e) {
// Code for Handling exception
}

步骤 2) 多个 catch 块

有各种类型的异常,你可能会从单个代码块中遇到多个异常。多个 catch 块帮助你使用单独的代码块分别处理每种类型的异常。它可用于两个以上的 catch 块,并且 catch 块的数量没有限制。

try
{
//Code
} catch (ExceptionType1 e1) {
//Code for Handling Exception 1
} catch (ExceptionType2 e2) {
//Code for Handling Exception 2
}

步骤 3) Throw

当你想要生成异常时,使用 Throw 关键字抛出异常以在运行时处理它。当你抛出异常而不处理它时,需要使用 Throw 关键字。

public static void anyFunction() throws Exception{

try {
// write your code here
} Catch (Exception b) {
// Do whatever you want to perform 
// Throw the Exception back to the system
throw(b);
}
}

步骤 4) 多个异常

你可以在 throws 子句中提及各种异常。

public static void anyFunction() throws ExceptionType1, ExceptionType2{

try {
// write your code here
} catch (ExceptionType1 e1) {
// Code to handle exception 1
} catch (ExceptionType1 e2) {
// Code to handle exception 2
}

步骤 5) Finally

Final 关键字用于在 try 块下创建代码块。它是最终代码,无论是否发生异常,它都会执行

try {
//Code
} catch (ExceptionType1 e1) {
//Catch block
} catch (ExceptionType2 e2) {
//Catch block
} catch (ExceptionType3 e3) {
//Catch block
} finally {
//The finally block always executes.
}

显示异常的方法

你还可以使用以下方法显示异常信息

  • printStackTrace():此函数打印堆栈跟踪、异常名称和其他有用的描述。
  • toString():此函数返回描述异常名称和描述的文本消息。
  • getMessage():有助于显示异常的描述。

摘要

  • 异常是在程序执行时发生的错误。
  • Try-catch:此方法可以捕获异常,它使用 try 和 catch 关键字的组合。
  • 多个 catch 块帮助你使用单独的代码块分别处理每种类型的异常。
  • Throw 关键字用于抛出异常以在运行时处理它。
  • printStackTrace():此函数打印堆栈跟踪、异常名称和其他有用的描述
  • toString():此函数返回描述异常名称和描述的文本消息。
  • getMessage():有助于显示异常的描述。