3

TestNG を介してマルチスレッド テストを試みています。 @BeforeMethodテスト用の WebDriver をインスタンス化します。 @AfterMethodテスト後に WebDrivers を閉じます。@Dataproviderテストをループで複数回実行するためのデータを提供します。

 import java.lang.reflect.Method;

 import org.openqa.selenium.By;
 import org.openqa.selenium.WebDriver;
 import org.openqa.selenium.chrome.ChromeDriver;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.AfterSuite;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
 
 public class MultipleSession {
     private WebDriver driver;
 
     @BeforeMethod
     public void beforeMethod() {
         System.err.println("Before ID" + Thread.currentThread().getId());
         System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
         if (driver == null) {
             driver = new ChromeDriver();
             
             driver.get("https://www.google.co.in/");
         }
 
     }
 
     @DataProvider(name = "sessionDataProvider", parallel = true)
     public static Object[][] sessionDataProvider(Method method) {
         int len = 12;
 
         Object[][] parameters = new Object[len][1];
         for (int i = 0; i < len; i++) {
             parameters[i][0] = i;
 
         }
         return parameters;
     }
 
     @Test(dataProvider = "sessionDataProvider")
     public void executSessionOne(int input) {
         System.err.println("Test ID" + Thread.currentThread().getId());
 
     
 
         driver.findElement(By.name("q")).sendKeys(input + "");
         try {
             Thread.sleep(5000);
         } catch (InterruptedException e) {
             
             e.printStackTrace();
         }
 
     }
 
     @AfterMethod
     public void afterMethod() {
         System.err.println("After ID" + Thread.currentThread().getId());
     }
 
     @AfterSuite
     public void afterSuite() {
         driver.close();
         driver.quit();
     }
  }

私の問題は、TestNG が一度に 10 個のブラウザーを開く場合でも、タスクは 1 つのブラウザーによってのみ実行され、他の 9 つのブラウザーは何もしないことです。

beforeMethod で宣言された Webdriver のインスタンスをすべてのスレッドに配布するにはどうすればよいですか?

4

1 に答える 1

0
private WebDriver driver;

この行は、webdriver のインスタンスが 1 つしかなく、 driver = new ChromeDriver();同じドライバー オブジェクトを何度もインスタンス化していることを意味します。

この問題を解決するには、ファクトリを作成し、すべての @Test メソッドでファクトリからドライバ オブジェクトを要求します。ファクトリのサンプル コードは次のようになります。

static synchronized RemoteWebDriver getDriver()
{
System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
         if (driver == null) {
             driver = new ChromeDriver()
}
于 2016-02-23T10:16:25.420 に答える