什么是异常?
异常是在程序执行时发生的错误。但是,在运行程序时,编程语言会生成一个异常,应该对其进行处理以避免程序崩溃。
该异常表明,虽然事件可能会发生,但这种类型的事件很少发生。最终,当异常从主函数抛出时,程序会突然终止。
在本教程中,将学习:
- 什么是异常?
- Selenium Web驱动程序中的异常
- 处理Selenium异常
- 显示异常的方法
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时,会发生这种情况。 |
InvalidConsulatesException | 此类型的异常与无效的交互操作匹配。 |
InvalidElementStateExceptio | 当元素无效时命令无法完成时,就会发生这种情况。 |
InvalidSessionIdException | 当活动会话列表中未包括给定的会话ID时,会发生此异常。这意味着会话不存在或处于非活动状态。 |
InvalidSwitchToTargetException | 当要切换的帧或窗口目标不存在时,会发生这种情况。 |
JavascriptException | 执行用户提供的JavaScript时发生此问题。 |
JsonException | 当在没有创建会话的情况下获得会话时,就会发生这种情况。 |
NoSuchAttributeException | 当找不到元素的属性时,就会出现这种异常。 |
MoveTargetOutOfRangeException | 如果提供给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异常
下面是一些重要标准,可以使用它们来处理Selenium WebDriver中的异常:
try-catch:此方法可以捕获异常,它结合使用try和catch关键字。Try命令指示挡路的开始,Catch放在Try挡路的末尾,这有助于解决异常。
try {
// Code
} catch (Exception e) {
// Code for Handling exception
}
- 多个Catch块:有各种类型的异常,可以期待来自单个挡路代码的多个异常。它可以用于两个以上的CATCH块,并且对CATCH块的数量没有限制。
try {
//Code
} catch (ExceptionType1 e1) {
//Code for Handling Exception 1
} catch (ExceptionType2 e2) {
//Code for Handling Exception 2
}
- Throw:当想要生成异常时,使用Throw关键字抛出Exception,以便在运行时进行处理。当抛出一个没有处理的异常时,他们需要使用抛出关键字。
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
}
- 最后:最后一个关键字用于在试用挡路下创建挡路代码。无论是否发生异常,它都是帮助执行的最终代码
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关键字。
- 多个捕获可帮助使用单独的挡路代码分别处理每种类型的异常。
- 抛出关键字用于抛出异常,以便在运行时进行处理。
- printStackTrace() :此函数打印堆栈跟踪、异常名称和其他有用的描述
- toString() :此函数返回描述异常名称和描述的文本消息。
- getMessage() :帮助显示异常的描述。