2010-08-20 3 views
0
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"); 
    } 

} 

driver 인수를 run() 메서드에 전달하려고 시도하지만 인수가 필요합니까? 어디에서 브라우저 1과 브라우저 2를 통과합니까?각 새 스레드에 FirefoxDriver의 새 인스턴스를 전달하는 방법은 무엇입니까?

내 최종 목표는 동일한 테스트를 실행하는 firefox 브라우저의 여러 인스턴스를 갖는 것입니다.

답변

0

브라우저를 인수로 사용하는 생성자를 추가하십시오. 개인 필드에 대한 참조를 저장하고 당신은 실행 방법에 브라우저를 사용할 수 있습니다 스레드에서

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"); 
    } 

} 
+0

첫 번째 스레드의 브라우저가 열리지 만 아무런 변화가 없습니다. 닫고 두 번째 스레드의 브라우저가 열리고 모든 작업이 정상적으로 수행됩니다. 두 인스턴스를 동시에 실행할 수 있습니까? – KJW

+0

아, 각 인스턴스에 대해 별도의 프로파일을 제공하여 문제를 해결했습니다. – KJW

1

run() 방법은 매개 변수가 없습니다.

스레드 구현시 'setters'를 사용하여이 작업을 수행 할 수 있습니다. 이 코드는 다음과 같아야합니다. -

Tester tester = new Tester(); 
    tester.setBrowser1(new FirefoxDriver(.... 
    tester.setBrowser2(new FirefoxDriver(.... 
    Thread worker2 = new Thread(tester); 

테스터의 인스턴스 변수는 browser1과 browser2입니다. 또는 Tester의 생성자를 통해 browser1과 browser2를 설정할 수도 있습니다.

관련 문제