如何在多线程中重用现有的WebDriver实例

时间:2017-02-06 11:02:07

标签: java multithreading selenium-webdriver

我的应用程序是一个多线程程序。每个线程都将执行一组测试用例。我的想法是为每个线程创建一个新的WebDriver实例,并在完成时关闭它。

例如:我有100个测试用例,将由10个线程执行。每个线程都拥有10个测试用例的所有权。

截至目前,对于每个测试用例,都会打开一个浏览器实例。而不是那样,对于每个线程,需要打开浏览器实例。

1 个答案:

答案 0 :(得分:3)

使用ThreadLocal创建WebDriver个实例。在ThreadLocal上引用JavaDoc:

  

此类提供线程局部变量。这些变量与它们的正常对应物的不同之处在于,访问一个变量的每个线程(通过其get或set方法)都有自己独立初始化的变量副本。 ThreadLocal实例通常是希望将状态与线程相关联的类中的私有静态字段(例如,用户ID或事务ID)。

使用示例:

// for multiple separate test classes you need to share it among your project
public static final ThreadLocal<WebDriver> WEB_DRIVER_THREAD_LOCAL = 
    new ThreadLocal<WebDriver>() {
        @Override
        protected WebDriver initialValue() {
            // create a new instance for each thread
            return new ChromeDriver();
        }
    };

// get a WebDriver instance in your tests;
// when there is already an instance for the current Thread, it is returned;
// elsewise a new instance is created
WebDriver webDriver = WEB_DRIVER_THREAD_LOCAL.get();