Selenium 简明教程
Selenium - Exception Handling
可以使用 Selenium Webdriver 执行异常处理。在开发测试时,我们应该确保即使出现错误,脚本也可以继续执行。异常类似于在触发执行测试时遇到的错误。
如果由于找不到元素或预期结果与实际结果不符或由于任何其他原因导致异常,我们的代码应该生成异常并以合乎逻辑的方式结束测试,而不是突然终止脚本。异常有两种类型:
-
Checked Exceptions - 在编译代码之前,可以考虑这些异常。
-
Unchecked Exceptions - 这些异常只能在运行时检测到,并且比检查异常更难处理。
识别和解决未检查异常的方法被称为异常处理。Selenium 中提供的一些异常包括:
-
ElementNotVisibleException − 当元素可用于 DOM 时生成此异常,但是它是不可见的。因此,无法对其执行任何操作。
-
ElementNotInteractableException − 当元素可用于 DOM 时生成此异常。但是,在对其执行操作时,另一个元素受到影响。
-
ElementClickInterceptedException − 当无法实现元素单击命令时生成此异常。这是因为接收事件的元素隐藏了请求单击操作的元素。
-
ElementNotSelectableException − 当尝试选择不可选择的元素时生成此异常
-
InsecureCertificateException − 当导航负责级联证书警告时,生成此异常。这导致创建过期的和不正确的 TLS 证书。
-
ErrorInResponseException − 由于服务器端的错误而生成此异常。
-
ImeActivationFailedException − 由于 IME 引擎未激活而生成此异常。
-
ImeNotAvailableException − 如果 IME 支持不可用,则生成此异常。
-
InvalidElementStateException − 如果由于元素状态无效导致命令不完整,则生成此异常
-
InvalidArgumentException − 如果命令参数无效,则生成此异常。
-
InvalidCoordinatesException − 如果操作的坐标无效,则生成此异常。
-
InvalidCookieDomainException − 为另一个域而不是当前 URL 下添加 Cookie 而生成此异常。
-
InvalidSwitchToTargetException − 当不存在要切换的目标窗口或帧时,生成此异常。
-
InvalidSelectorException − 如果用于识别元素的选择器无法获取 WebElement,则生成此异常。
-
MoveTargetOutOfBoundsException − 如果方法 ActionsChains move() 的目标无效,则生成此异常。
-
InvalidSessionIdException − 如果提供的会话 ID 无效或不存在,并且不属于活动会话,则生成此异常。
-
NoSuchFrameException − 当不存在要切换的目标帧时,生成此异常。
-
NoAlertPresentException − 当不存在要切换的目标警报时,生成此异常。
-
NoSuchCookieException − 当当前浏览活动内容的 cookie 中没有匹配的 cookie 时,会生成此异常。
-
NoSuchAttributeException − 当元素属性缺失时,会生成此异常。
-
UnableToSetCookieException − 当驱动程序无法设置 Cookie 时,会生成此异常。
-
NoSuchWindowException − 当要切换到的目标窗口不存在时,会生成此异常。
-
TimeoutException − 当命令执行未在时间范围内完成时,会生成此异常。
-
StaleElementReferenceException − 当元素引用当前已过时时,会生成此异常。
-
UnexpectedTagNameException − 当辅助类未找到正确的 Web 元素时,会生成此异常。
-
UnexpectedAlertPresentException − 当出现意外警报时,会生成此异常。
-
NoSuchElementException − 此异常是 NotFoundException 类的子类。当在 DOM 中无法识别元素时,通常由 findElement() 方法抛出。
-
SessionNotFoundException − 当浏览器会话终止或关闭时,驱动程序尝试在 Web 页面上执行操作时,会抛出此异常。
-
WebDriverException − 驱动程序会话关闭后,驱动程序尝试立即执行操作时,会抛出此异常。
让我们讨论一些处理异常的方法 −
Example
ExceptionsEncountered.java 类文件中的代码实现。
package org.example;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
public class ExceptionsEncountered {
public static void main(String[] args) throws InterruptedException {
// Initiate the Webdriver
WebDriver driver = new ChromeDriver();
// launch an application and open a URL
driver.get("https://www.tutorialspoint.com/selenium/practice/auto-complete.php");
// identify element with incorrect xpath value
WebElement l = driver.findElement(By.xpath("//*[@id='tag']"));
// enter text
l.sendKeys("Selenium");
// Quitting browser
driver.quit();
}
}
Output
Exception in thread "main"
org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element:
{"method":"xpath","selector":"//*[@id='tag']"}
(Session info: chrome=121.0.6167.160)
For documentation on this error, please visit:
https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#no-such-element-exception
Process finished with exit code 1
在上述示例中,我们收到了 NoSuchElementException。由于在上述实现中未应用异常处理,因此在遇到错误后立即停止了执行。
最后,收到了消息 Process finished with exit code 1 ,表示代码执行失败。
让我们看看如何使用 try-catch 和 finally 块在上述测试中添加异常处理。
Example
ExceptionHandlingEncountered.java 类文件中的代码实现。
package org.example;
import org.openqa.selenium.By;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
public class ExceptionHandlingEncountered {
public static void main(String[] args) {
// Initiate the Webdriver
WebDriver driver = new ChromeDriver();
// launch an application and open a URL
driver.get("https://www.tutorialspoint.com/selenium/practice/auto-complete.php");
//try-catch finally block
try {
// identify element with incorrect xpath value
WebElement l = driver.findElement(By.xpath("//*[@id='tag']"));
// enter text
l.sendKeys("Selenium");
} catch (NoSuchElementException e){
System.out.println("Catch block executed after try block");
}
// finally block
finally {
System.out.println("finally block executed after try - catch block");
}
// Quitting browser
driver.quit();
}
}