实际上,我正在创建一个框架,但在创建它时我只想将它用于串行执行,但现在我想对方法进行并行测试。问题是我已经将驱动程序实例声明为静态,并且因为静态第二个线程无法更改其值。
我在一个单独的类中创建驱动程序并使用getter方法获取它。
现在的问题是,如果我将Webdrive变为非静态,那么我就无法在其他类中使用该驱动程序。
即使我尝试扩展类(我在创建驱动程序实例的地方),它也会传递一个空值。
所以,基本上我想隔离所有实例但我不能在本地创建实例。我尝试删除静态变量,但在执行并行执行时,会打开2个浏览器实例,但是在一个浏览器中执行所有测试用例并且太平行
我怎样才能做到这一点?
您必须为您的应用程序创建类似Driver Pool的内容。您可以从此池中为您的测试用例启动一堆驱动程序。
另外,请考虑如何取消静态驱动程序实例。
我过去尝试过类似的东西:
public class DriverPool {
public static final int MAX_NUMBER = 5;
private static final Object waitObj = new Object();
private static AtomicInteger counter = new AtomicInteger(0);
private static Logger log = Logger.getLogger(DriverPool.class);
private static volatile ThreadLocal<WebDriver> instance = ThreadLocal
.withInitial(DriverManager::getInstance);
public static synchronized WebDriver getDriver() {
try {
while (counter.get() > MAX_NUMBER) {
synchronized (waitObj) {
waitObj.wait();
}
}
counter.getAndIncrement();
} catch (InterruptedException e) {
log.error(e);
}
return instance.get();
}
public static synchronized void closeDriver() {
WebDriver driver = instance.get();
driver.close();
driver.quit();
instance.remove();
counter.decrementAndGet();
synchronized (waitObj) {
waitObj.notifyAll();
}
}
}
我希望它会有所帮助。