Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将FirefoxDriver的新实例传递给每个新线程?_Java_Webdriver - Fatal编程技术网

Java 如何将FirefoxDriver的新实例传递给每个新线程?

Java 如何将FirefoxDriver的新实例传递给每个新线程?,java,webdriver,Java,Webdriver,我试图将驱动程序参数传递给run()方法,但它是否接受参数?我在哪里通过浏览器1和浏览器2 我的最终目标是让firefox浏览器的多个实例运行相同的测试。添加一个构造函数,将浏览器作为参数。将引用存储在专用字段中,您可以在run方法中使用浏览器: public class Tester implements Runnable { public Tester() { // Init WebDriver FirefoxProfile firefoxProfil

我试图将驱动程序参数传递给run()方法,但它是否接受参数?我在哪里通过浏览器1和浏览器2


我的最终目标是让firefox浏览器的多个实例运行相同的测试。

添加一个构造函数,将浏览器作为参数。将引用存储在专用字段中,您可以在run方法中使用浏览器:

public class Tester implements Runnable {
    public Tester() {
        // Init WebDriver
        FirefoxProfile firefoxProfile = new FirefoxProfile();
        WebDriver browser1 = new FirefoxDriver(firefoxProfile);
        WebDriver browser2 = new FirefoxDriver(firefoxProfile);
    }

    public static void main(String[] args) {    

        Runnable tester = new Tester();
        Thread worker1 = new Thread(tester);
        Thread worker2 = new Thread(tester);

        worker1.start();
        worker2.start();            
    }

    public void run(WebDriver driver) {
        login(driver, "username", "password", "http://someurl.com/login");
    }

}
线程中的
run()
方法没有任何参数

您可以在线程的实现中使用“setter”来实现。这样,您的代码应该如下所示-

public class Tester implements Runnable {
    private WebDriver browser;

    public Tester(WebDriver browser) {
        this.browser = browser;
    }

    public static void main(String[] args) {    

      Thread worker1 = new Thread(new Tester(new FirefoxDriver(firefoxProfile)));
      Thread worker2 = new Thread(new Tester(new FirefoxDriver(firefoxProfile)));

      worker1.start();
      worker2.start();            
    }

    public void run() {
        login(browser, "username", "password", "http://someurl.com/login");
    }

}

测试人员将browser1和browser2作为实例变量。或者您也可以通过Tester的构造函数设置browser1和browser2。

这将打开第一个线程的浏览器,但什么也没有发生。我关闭它,第二个线程的浏览器打开,一切正常。如何让两个实例同时运行?啊,为每个实例提供单独的配置文件,解决了这个问题。
   Tester tester = new Tester();
   tester.setBrowser1(new FirefoxDriver( ....
   tester.setBrowser2(new FirefoxDriver( ....
   Thread worker2 = new Thread(tester);