如何使用selenium网格在多个浏览器中并行或串行运行测试套件。 我有3个xml文件,一个chrome.xml(包含我在chrome中运行的所有测试),以及一个firefox.xml(包含我在firefox中运行的所有测试),testng.xml包含两个作为套件。
Chrome.xml
<suite name="Chrome">
<listeners>
<listener class-name="ww5.listener.Listener" />
</listeners>
<test name="v5">
<parameter name="browser" value="chrome"/>
<classes>
<class name="ww5.testcases.version.version" ></class>
<class name="ww5.testcases.loginSuite.LoginTest" ></class>
<class name="ww5.testcases.loginSuite.LogoutTest" ></class>
</classes>
</test>
</suite>
firefox.xml
<suite name="Firefox">
<listeners>
<listener class-name="ww5.listener.Listener" />
</listeners>
<test name="v5">
<parameter name="browser" value="firefox"/>
<classes>
<class name="ww5.testcases.version.version" ></class>
<class name="ww5.testcases.loginSuite.LoginTest" ></class>
<class name="ww5.testcases.loginSuite.LogoutTest" ></class>
</classes>
</test>
</suite>
的testng.xml
<suite name="My Project" parallel="tests">
<listeners>
<listener class-name="ww5.listener.Listener" />
</listeners>
<suite-files>
<suite-file path="./Chrome.xml" />
<suite-file path="./firefox.xml" />
</suite-files>
</suite>
感谢高级,我正在使用页面对象模型,因此每个浏览器的套件文件的原因。
答案 0 :(得分:1)
@BeforeTest
中初始化您的WebDriver并使用quit()
中的@AfterTest
。您可以在我的一个问题下找到一个示例:Parameterized Selenium Tests in Parallel with TestNG
<强>更新强>
如何使您的WebDriver线程安全:
private List<WebDriver> webDriverPool = Collections.synchronizedList(new ArrayList<WebDriver>());
private ThreadLocal<WebDriver> driverThread;
@BeforeTest()
public void beforeTest() {
//...
this.driverThread = new ThreadLocal<WebDriver>() {
@Override
protected WebDriver initialValue() {
WebDriver webDriver = new RemoteWebDriver(...);
webDriverPool.add(webDriver);
return webDriver;
}
};
}
@AfterTest(alwaysRun = true)
public void afterTest() {
for (WebDriver driver : this.webDriverPool) {
driver.quit();
}
}
// Use this method instead of driver.get()
public WebDriver getDriver() {
return this.driverThread.get();
}
}