请告诉我使用Web-driver + TestNG框架的休假方案的示例代码。
一个班级有多个考试。在运行这些测试时,它应该同时在同一浏览器的多个实例(Ex:Firefox)中并行运行所有测试。因此,对于每个测试,它都应该打开一个新的浏览器实例。
答案 0 :(得分:2)
到目前为止我的解决方案是这样的:
public MyTestClass {
SupportedBrowser browser;
private static ThreadLocal<WebDriver> threadLocalDriver = new ThreadLocal<WebDriver>();
@DataProvider (name = "getBrowsers")
public Object[][] getBrowsers {
return Object[][] {
{
SupportedBrowser.FIREFOX;
},
{
SupportedBrowser.CHROME;
}
};
}
@Factory (dataProvider = "getBrowsers")
public MyTestClass(SupportedBrowser browser) {
this.browser = browser;
}
@BeforeMethod
public void setup()
{
threadLocalDriver.set(browser.getDriver());
}
@Test
public void test1()
{
WebDriver driver = threadLocalDriver.get();
//do stuff
}
@AfterMethod
public void tearDown()
{
WebDriver driver = threadLocalDriver.get();
driver.quit();
}
}
这是我的枚举:
public enum SupportedBrowser {
FIREFOX, CHROME; //add more as needed
public getDriver() {
if(this == SupportedBrowser.FIREFOX) {
return new RemoteDriver(hubAddress, DesiredCapabilities.firefox()); //alternatively could be new FirefoxDriver()
}
else {
return new RemoteDriver(hubAddress, DesiredCapabilities.chrome());
}
}
}
请原谅不良的代码约定,我没有在IDE中写这个(虽然我已经使用过这样的东西但它有效)。 该类在每个不同的浏览器之前运行一次。每种方法都有自己独立的驱动程序,确保您的测试可以同时运行。它还允许每个方法采用自己的DataProvider,以防您需要使用不同参数运行多次的测试方法。还要确保将parallel属性设置为testng.xml文件中的“method”级别。
我的代码唯一的问题是确保驱动程序在测试失败时退出。现在,这种方法将关闭失败的测试关闭到selenium网格(使用-timeout)。请参阅我的问题:Sharing driver between @BeforeMethod and @AfterMethod in TestNG。
编辑:我现在已经在整个线程中共享驱动程序的代码中添加了一个ThreadLocal变量,因此您可以在@AfterMethod中调用driver.quit()。