线程守卫
此类仅在Java中可用
ThreadGuard检查是否仅从创建驱动程序的同一线程中调用了驱动程序.
线程问题 (尤其是在Parallel中运行测试时)
可能遇到神秘并且难以诊断错误.
使用此包装器可以防止此类错误,
并且在发生此类情况时会抛出异常.
以下的示例模拟一种线程冲突的情况:
WebDriver protectedDriver = ThreadGuard.protect(startChromeDriver());
Throwable[] caughtOnOtherThread = new Throwable[1];
Runnable callFromOtherThread = () -> {
try {
protectedDriver.get("https://www.selenium.dev");
} catch (Throwable t) {
caughtOnOtherThread[0] = t;
}
};
Thread otherThread = new Thread(callFromOtherThread);
otherThread.start();
otherThread.join();结果如下所示:
Exception in thread "Thread-1" org.openqa.selenium.WebDriverException:
Thread safety error; this instance of WebDriver was constructed
on thread main (id 1)and is being accessed by thread Thread-1 (id 24)
This is not permitted and *will* cause undefined behaviour
正如示例所示:
protectedDriver将在主线程中创建- 我们使用Java的
Runnable启动一个新进程, 并使用一个新的Thread运行该进程 - 这两个
Thread都会发生冲突, 因为主线程的内存中没有protectedDriver ThreadGuard.protect会抛出异常
注意:
这不能代替并发运行时使用 ThreadLocal 管理驱动程序的需求.




