如果你在跑selenium脚本时,需要某些异常不知道怎么解决时,可以看看这一系列的文章,看看有没有你需要的答案
什么是异常?
顾名思义,作为程序员的一种常用术语,“异常”与任何特定的编程语言无关。它属于程序因为突然中止,而未能交付出预期输出的事件。通常,引发异常出现的潜在因素往往来自如下方面:
· Java虚拟内存(JVM)的不足
· 请求访问的文件在目标系统中不存在
· 用户提供了无效的数据
· 在正常的通信过程中突然出现断
Java中的异常类型
1. 已查明的异常(Checked Exceptions):编译器在编译的过程中,会检查到这些异常,并验证它们是否已被处理。如果未被处理,系统会 告编译错误。因此它们被通称为编译时异常(compile-time exceptions)。下面是一些常见的此类异常示例:
· SQLException:程序在基于SQL语法执行数据库查询时,可能会产生此类异常。
· IOException:程序在文件上执行无效的I/O流操作时,可能会产生此类异常。
· ClassNotFoundException:当JVM无法找到所需的Java类时,可能会产生此类异常。
2. 未查明的异常(Unchecked Exceptions):这些异常是在程序的执行期间发生的逻辑错误,因此通常称为运行时异常(Runtime Exceptions)。此类异常在编译时未被检查出来,或者在整个编译过程中已被忽略。下面是一些典型的此类异常示例:
· NullPointerException:当访问具有空值的对象时,可能会产生此类异常。
· ArrayIndexOutofBound:当使用无效的索引值去访问数组时,可能会产生此类异常。
· IllegalArgumentException:当程序将不正确的参数传递给方法时,可能会产生此类异常。
· NumberFormatException:当程序将字符串传递给无法转换为数字的方法时,可能会产生此类异常。
· ArithmeticException:当程序执行不正确的算术运算(例如将数字除以零)时,可能会产生此类异常。
异常处理标准
通过对异常处理能力的提升,我们不仅可以保持代码的整洁,而且能够增强其可维护性、可扩展性和可阅读性。当然,不同的面向对象编程(Object-Oriented Programming,OOP)语言,具有不同的异常处理方法。以下是一些常用的Java异常处理标准:
Try-Catch:该关键字组合可被用于捕获异常。其中,try块应当被放在开头,而catch块应被放在try块的末尾,以便捕获异常,并采取必要的行动。也就是说,我们可以在遇到异常时,创建异常类的对象,以便使用以下预定义的方法,来显示调试信息:
· printStackTrace():该函数可用于打印栈的跟踪、异常的名称、以及其他重要的异常信息。
· getMessage():此函数有助于获取针对异常的深入描述。
try
{
// Code
} catch(Exception e){
// Code for Handling exception
}
同时,Try-Catch块也可以用其他高级方法来处理异常,例如,我们可能希望从单个代码块中捕获多个异常,那么就可以通过在try块之后的多个catch块,去处理不同的异常。而且,我们在try块之后,使用无限数量的catch块。
try
{
//Code
} catch(ExceptionType1 e1){
//Code for Handling Exception 1
} catch(ExceptionType2 e2){
//Code for Handling Exception 2
}
Throw/Throws:如果程序员想显式地抛出异常,那么可以使用throw关键字,与要在运行时处理的异常对象协同使用。
public static void exceptionProgram()throws Exception{
try {
// write your code here
} Catch(Exception b){
// Throw an Exception explicitly
throw(b); }
}
如果开发者想抛出多个异常,则可以通过在方法签名的子句中使用throws关键字来抛出,并且由方法的调用者去进行异常处理。
public static void exceptionProgram()throws ExceptionType1, ExceptionType2{
try {
// write your code here
} catch(ExceptionType1 e1){
// Code to handle exception 1
} catch(ExceptionType1 e2){
// Code to handle exception 2
}
finally:该个代码块往往是在try-catch块之后被创建的。也就是说,无论是否抛出异常,它都会被执行。
try {
//Code
} catch(ExceptionType1 e1){
//Catch block
} catch(ExceptionType2 e2){
//Catch block
} finally {
//The finally block always executes.
}
最常见异常类
异常:
selenium.common.exceptions.WebDriverException(msg=None, screen=None, stacktrace=None)
基类:
exceptions.Exception
描述:WebDriver基础的异常类
异常:
selenium.common.exceptions.TimeoutException(msg=None, screen=None, stacktrace=None)
基类:
selenium.common.exceptions.WebDriverException
描述:一条命令在足够的时间内没有完成则会抛出异常
异常:
selenium.common.exceptions.StaleElementReferenceException(msg=None, screen=None, stacktrace=None)
基类:
selenium.common.exceptions.WebDriverException
描述:一个参考的元素现在是“过时”时抛出异常,“过时”是指这个元素不再出现在页面的Dom中。
异常:
selenium.common.exceptions.NoSuchElementException(msg=None, screen=None, stacktrace=None)
基类:
selenium.common.exceptions.WebDriverException
描述:元素不能被找到时异常抛出
异常:
selenium.common.exceptions.NoSuchAttributeException(msg=None, screen=None, stacktrace=None)
基类:
selenium.common.exceptions.WebDriverException
描述:当元素的属性不能被发现时异常抛出
异常:
selenium.common.exceptions.NoAlertPresentException(msg=None, screen=None, stacktrace=None)
基类:
selenium.common.exceptions.WebDriverException
描述:切换到没有弹出的alert弹窗时抛出异常
异常:
selenium.common.exceptions.NoSuchFrameException(msg=None, screen=None, stacktrace=None)
基类:
selenium.common.exceptions.InvalidSwitchToTargetException
描述:切换进不存在的iframe窗口时抛出异常
异常:
selenium.common.exceptions.InvalidElementStateException(msg=None, screen=None, stacktrace=None)
基类:
selenium.common.exceptions.WebDriverException
描述:无效的元素状态
异常:
selenium.common.exceptions.ElementNotSelectableException(msg=None, screen=None, stacktrace=None)
基类:
selenium.common.exceptions.InvalidElementStateException
描述:当尝试选择一个不能被选中的元素时,异常会抛出
异常:
selenium.common.exceptions.ElementNotVisibleException(msg=None, screen=None, stacktrace=None)
基类:
selenium.common.exceptions.InvalidElementStateException
描述:元素在DOM树中,但它是不可见的(display:none),操作该元素,异常将抛出
不常见的异常类
异常:
selenium.common.exceptions.ErrorInResponseException(response, msg)
基类:
selenium.common.exceptions.WebDriverException
描述:服务器端有错误时,异常将抛出(这个原因可能是因为Firefox插件或者远程server)
异常:
selenium.common.exceptions.ImeActivationFailedException(msg=None, screen=None, stacktrace=None)
基类:
selenium.common.exceptions.WebDriverException
描述:激活输入法失败时异常会抛出。
异常:
selenium.common.exceptions.ImeNotAvailableException(msg=None, screen=None, stacktrace=None)
基类:
selenium.common.exceptions.WebDriverException
描述:当输入法不支持的时候异常将抛出。
异常:
selenium.common.exceptions.InvalidCookieDomainException(msg=None, screen=None, stacktrace=None)
基类:
selenium.common.exceptions.WebDriverException
描述:试图在不同的domain而不是目前的URL中添加一个cookie时抛出异常
异常:
selenium.common.exceptions.InvalidSelectorException(msg=None, screen=None, stacktrace=None)
基类:
selenium.common.exceptions.NoSuchElementException
描述:当选择器没有返回一个web元素时,异常抛出。
异常:
selenium.common.exceptions.InvalidSwitchToTargetException(msg=None, screen=None, stacktrace=None)
基类:
selenium.common.exceptions.WebDriverException
描述:当切换的窗口或者框架不存在的时候,异常将抛出。
异常:
selenium.common.exceptions.MoveTargetOutOfBoundsException(msg=None, screen=None, stacktrace=None)
基类:
selenium.common.exceptions.WebDriverException
描述:提供给ActionChainsmovable()方法的目标无效时,异常将抛出,例如:超出文件外
异常:
selenium.common.exceptions.NoSuchWindowException(msg=None, screen=None, stacktrace=None)
基类:
selenium.common.exceptions.InvalidSwitchToTargetException
描述:需要切换的目标窗口不存在时,异常抛出
异常:
selenium.common.exceptions.UnableToSetCookieException(msg=None, screen=None, stacktrace=None)
基类:
selenium.common.exceptions.WebDriverException
描述:当一个驱动程序无法设置cookie时抛出异常。
异常:
selenium.common.exceptions.UnexpectedAlertPresentException(msg=None, screen=None, stacktrace=None)
基类:
selenium.common.exceptions.WebDriverException
描述:当一个意外的警告出现时将抛出异常。
异常:
selenium.common.exceptions.UnexpectedTagNameException(msg=None, screen=None, stacktrace=None)
基类:
selenium.common.exceptions.WebDriverException
描述:辅助类没有获取到期待的web元素时,会抛出异常
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!