如何使用一个Singleton与两个浏览器(Chrome和Firefox)并行执行而不会出错?有可能吗



我在@BeforeTest annotation中声明了一个带有驱动程序实例的Singleton,并使用它在两个浏览器中并行执行@Test annotation中的所有测试。

我的问题是,当我试图关闭或退出@AfterTest中的驱动程序时,它会抛出一个错误,说"调用quit()后无法使用FirefoxDriver"?有可能解决吗?

需要一个代码示例,但听起来像是有线程问题。

如果您要做的是将WebDriver配置从测试类抽象到一个中心位置,我不确定单例是否是最佳解决方案。

如果你看看TestNG是如何线程化它的测试执行的,如果WebDriver实例位于与测试分离的类上,那么你很容易就会出现意外的WebDriver行为。在您的情况下,这是一个单例。就我而言,当我第一次遇到这个问题时,它是一个父类。

我制定的解决方案是使用一个父类来进行WebDriver的所有配置和设置/拆卸,然后用我的所有测试类来扩展这个类。为了使它正常工作,我不得不将我的WebDriver放在ThreadLocal<>上。通过这样做,我能够确保每个线程(测试)都有自己的WebDriver实例可供使用。

ThreadLocal并不是很难使用,但更多信息可以在这里找到。

有很多其他方法可以解决这个问题,我们中的许多人都找到了自己的方法。。。这只是我的方法。

最新更新