まず第一に、私の英語で申し訳ありません。完璧ではありません:)
だから私は次の問題に直面しています: Selenium Grid と TestNg を使用して異なるブラウザーで並列テストを実行しようとしていて、 @BeforeTest メソッドでパラメーターを渡します。私の問題は、すべてのテストが初期化されると、最後のテストのパラメーターを使用するように見えることです。この例では、テストを実行すると、1 つの Firefox と 1 つの Chrome ではなく、2 つの Chrome が開きます。 (browser.getDriver() メソッドは RemoteWebDriver を返します)
TestNG.xml:
<suite thread-count="2" verbose="10" name="testSuite" parallel="tests">
<test name="nameOfTheTestFirefox">
<parameter name="platform" value="windows"/>
<parameter name="browserVersion" value="32"/>
<parameter name="browserName" value="firefox"/>
<classes>
<class name="example.test.login.LoginOverlayTest"/>
</classes>
</test> <!-- nameOfTheTestFirefox -->
<test name="nameOfTheTestChrome">
<parameter name="platform" value="windows"/>
<parameter name="browserVersion" value="38"/>
<parameter name="browserName" value="chrome"/>
<classes>
<class name="example.test.login.LoginOverlayTest"/>
</classes>
</test> <!-- nameOfTheTestChrome -->
</suite> <!-- testSuite -->
AbstractTest クラス:
public class SeleniumTest {
private static List<WebDriver> webDriverPool = Collections.synchronizedList(new ArrayList<WebDriver>());
private static ThreadLocal<WebDriver> driverThread;
public static BrowserSetup browser;
@Parameters({ "browserName", "browserVersion", "platform"})
@BeforeTest()
public static void beforeTest(String browserName, @Optional("none") String browserVersion, String platform) throws WrongBrowserException, WrongPlatformException {
final BrowserSetup browser = new BrowserSetup(browserName, browserVersion, platform);
driverThread = new ThreadLocal<WebDriver>() {
@Override
protected WebDriver initialValue() {
final WebDriver webDriver = browser.getDriver();
webDriverPool.add(webDriver);
return webDriver;
}
};
}
public static WebDriver getDriver() {
return driverThread.get();
}
@AfterTest
public static void afterTest() {
for (WebDriver driver : webDriverPool) {
driver.quit();
}
}
}
そして私の例 @Tests:
@Test
public void test1() throws InterruptedException {
WebDriver driver = getDriver();
System.out.println("START: test1");
driver.get("http://google.com");
Thread.sleep(5000);
System.out.println("END: test1, title: " + driver.getTitle());
}
@Test
public void test2() throws InterruptedException {
WebDriver driver = getDriver();
System.out.println("START: test2");
driver.get("http://amazon.com");
Thread.sleep(5000);
System.out.println("END: test2, title: " + driver.getTitle());
}
@Test
public void test3() throws InterruptedException {
WebDriver driver = getDriver();
System.out.println("START: test3");
driver.get("http://stackoverflow.com");
Thread.sleep(5000);
System.out.println("END: test3, title: " + driver.getTitle());
}
だから私の質問は、別のスレッドで指定されたパラメーターと並行してテストを実行するにはどうすればよいですか?
前もって感謝します!
ピーター