💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# Selenium 异常处理(常见异常列表) > 原文: [https://www.guru99.com/exception-handling-selenium.html](https://www.guru99.com/exception-handling-selenium.html) ## 什么是例外? **异常**是在程序执行时发生的错误。 但是,在运行程序时,编程语言会生成异常,应该对其进行处理,以避免程序崩溃。 异常表示,尽管事件可以发生,但这种事件很少发生。 当该方法无法处理 Exception 时,它将被引发给其调用者函数。 最终,当主函数抛出异常时,程序将突然终止。 在本教程中,您将学习: * [什么是例外?](#1) * Selenium Web 驱动程序中的[异常](#2) * [处理硒异常](#3) * [显示异常的方法](#4) ## Selenium Web 驱动程序中的常见异常 | **异常名称** | **说明** | | ElementNotVisibleException | 当 DOM 中的现有元素具有隐藏的功能时,会发生这种 Selenium 异常。 | | ElementNotSelectableException | 当元素出现在 DOM 中时,会发生这种 Selenium 异常,但是您可以选择。 因此,不可能进行交互。 | | NoSuchElementException | 如果找不到元素,则会发生此异常。 | | NoSuchFrameException | 如果要切换的帧目标不存在,则会发生此异常。 | | NoAlertPresentException | 当您切换到无提示时,将发生此异常。 | | NoSuchWindowException | 如果要切换的窗口目标不存在,则会发生此异常。 | | StaleElementReferenceException | 当 Web 元素与当前 DOM 分离时,会发生这种 Selenium 异常。 | | SessionNotFoundException | 退出浏览器后,WebDriver 正在运行。 | | TimeoutException | 没有足够的时间完成命令时抛出。 例如,在指定时间内找不到搜索到的元素。 | | WebDriverException | 当关闭浏览器后 WebDriver 立即起作用时,将发生此异常。 | | ConnectionClosedException | 当驱动程序断开连接时,将发生这种类型的异常。 | | ElementClickInterceptedException | 由于接收事件的元素正在隐藏请求单击的元素,因此该命令可能未完成。 | | ElementNotInteractableException | 当 DOM 中出现任何元素时,都会抛出此 Selenium 异常。 但是,不可能与这样的元素进行交互。 | | ErrorInResponseException | 与 Firefox 扩展程序或远程驱动程序服务器交互时,会发生这种情况。 | | ErrorHandler.UnknownServerException | 如果服务器返回没​​有堆栈跟踪的错误,则将异常用作占位符。 | | ImeActivationFailedException | 当 IME 引擎激活失败时,将发生这种期望。 | | ImeNotAvailableException | 它在 IME 支持不可用时发生。 | | InsecureCertificateException | 导航使用户代理命中证书警告。 这可能是由无效或过期的 TLS 证书引起的。 | | InvalidArgumentException | 当参数不属于期望的类型时,就会发生这种情况。 | | InvalidCookieDomainException | 当您尝试在其他域而不是当前 URL 下添加 Cookie 时,就会发生这种情况。 | | InvalidCoordinatesException | 此类型的异常与无效的交互操作匹配。 | | InvalidElementStateExceptio | 当元素无效时命令无法完成时,会发生这种情况。 | | InvalidSessionIdException | 当给定会话 ID 未包含在活动会话列表中时,发生此异常。 这意味着该会话不存在或处于非活动状态。 | | InvalidSwitchToTargetException | 当不存在要切换的帧或窗口目标时,会发生这种情况。 | | JavascriptException | 执行用户给定的 JavaScript 时会发生此问题。 | | JsonException | 当您没有创建会话时可以负担得起会话时,就会发生这种情况。 | | NoSuchAttributeException | 当找不到元素的属性时,会发生这种异常。 | | MoveTargetOutOfBoundsException | 如果提供给 ActionChains move()方法的目标无效,则会发生这种情况。 例如,文档之外。 | | NoSuchContextException | ContextAware 进行移动设备测试。 | | NoSuchCookieException | 当没有找到与给定路径名匹配的,与当前浏览文档的所有关联 cookie 相关的 cookie 时,将发生此异常。 | | NotFoundException | 此异常是 WebDriverException 的子类。 当 DOM 上的元素不存在时,就会发生这种情况。 | | RemoteDriverServerException | 当服务器不响应时,由于描述的功能不正确的问题,将引发此 Selenium 异常。 | | ScreenshotException | 无法捕获屏幕。 | | SessionNotCreatedException | 当无法成功创建新会话时,就会发生这种情况。 | | UnableToSetCookieException | 如果驱动程序无法设置 cookie,则会发生这种情况。 | | UnexpectedTagNameException | 如果支持类未获得预期的 Web 元素,则会发生。 | | UnhandledAlertException | 当有警报但 WebDriver 无法执行警报操作时,会发生这种期望。 | | UnexpectedAlertPresentException | 当出现意外警报时就会发生。 | | UnknownMethodException | 当请求的命令与已知 URL 匹配但与特定 URL 的方法不匹配时,会发生此异常。 | | UnreachableBrowserException | 仅当由于某种原因无法打开浏览器或使浏览器崩溃时,才会发生此异常。 | | UnsupportedCommandException | 当远程 WebDriver 未按预期发送有效命令时,会发生这种情况。 | ## 处理硒异常 这里是一些重要的标准,您可以使用这些标准来处理 Selenium WebDriver 中的异常: **尝试捕获**:此方法可以捕获异常,该异常使用 try 和 catch 关键字的组合。 Try 命令指示该块的开始,并且 **Catch** 被放置在 try 块的末尾,这有助于解决异常。 ``` try { // Code } catch (Exception e) { // Code for Handling exception } ``` * **多个捕获块**:异常的类型多种多样,您可以从单个代码块中获得多个异常。 多个 catch 可以帮助您使用单独的代码块分别处理每种类型的 Exception。 它可以用于两个以上的捕获块,并且对捕获块的数量没有限制。 ``` try { //Code } catch (ExceptionType1 e1) { //Code for Handling Exception 1 } catch (ExceptionType2 e2) { //Code for Handling Exception 2 } ``` * **引发**:当您想要生成异常时,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); } } ``` * **多个异常**:您可以在 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 } ``` * **最终**: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 关键字的组合。 * 多个 catch 可以帮助您使用单独的代码块分别处理每种类型的 Exception。 * Throw 关键字用于引发 Exception 以在运行时对其进行处理。 * printStackTrace():此函数打印堆栈跟踪,异常名称和其他有用的描述 * toString():此函数返回描述异常名称和描述的文本消息。 * getMessage(): Helps to displays the description of the Exception.