【发布时间】:2020-08-16 12:48:17
【问题描述】:
我正在使用Page Object Model + PageFactory + @Factory + @DataProvider
我有 6 个用户要运行,问题是我无法在同一个浏览器实例中登录 2 个用户;每个用户只能在新的浏览器实例中登录。
所以我创建了 6 个套件,每个用户一个,并且一次运行所有的套件。 (驱动对象创建于@BeforeSuite)
每个套件包含多个测试标签,每个测试标签包含多个类标签;类标签的数量由@Factory 决定
我正在以编程方式创建我的 testng.xml。
看起来像这样:
<suite name="user1">
<test>
<classes>
<class name="SearchPerson" />
.
.
.
<class name="SearchPerson" />
</classes>
</test>
<test>
<classes>
<class name="PrintPerson" />
.
.
.
<class name="PrintPerson" />
</classes>
</test>
</suite>
and similarly 5 more suites for the other 5 users
这是项目结构:
SearchPerson extendsTestEngine extendsTestBase
TestBase.java
public WebDriver webDriver;
public createChromeDriver(){
System.setProperty("webdriver.chrome.driver", path to chromedriver.exe);
webDriver = new ChromeDriver();
}
TestEngine.java
public TestEngine extends TestBase{
@BeforeSuite
public void setUp(){
createChromeDriver();
webDriver.get("https://www.google.com");
}
@DataProvider
public static Object[][] getTestData(){
return Object[][]{ {"name1"}, {"name2"} };
}
@AfterSuite
public void close(){
webDriver.quit();
}
}
我的实际测试 - SearchPerson.java
public class SearchPerson extends TestEngine{
String name;
Person person;
@Factory(dataProvider = getTestData, dataProviderClass = TestEngine.class)
public SearchPerson(String name){
this.name = name;
}
@BeforeTest
public void initPageObjects(){
person = new Person(webDriver);
}
@Test
public void setName(){
person.setName(name);
}
@Test
public void printName(){
person.printName();
}
}
我也不想让我的 WebDriver 对象静态,因为我计划并行化我的测试。
【问题讨论】:
标签: java selenium-webdriver testng factory pageobjects