У меня есть класс с аннотациями TestNG, который выполняет функциональные тесты на веб-сайте, сначала я определяю класс Browser - простой POJO:
class Browser {
private String browserName;
private String browserVersion;
private String platform;
...getters and setters and constructor...
}
, а теперь сам аннотированный класс TestNG:
class BrowserTest {
public BrowserTest(Browser b) {
...
create browser session, etc. (uses Selenium Grid underneath)
...
}
@Test
public void login() {
...test login...
}
@Test
public void logout() {
...test logout...
}
@Factory
public Object[] create() throws Exception {
List<Object> testList = new ArrayList<Object>();
Browser[] browsers = {
new Browser("google-chrome", "", ""),
new Browser("firefox", "", ""),
new Browser("internet-explorer", "9", ""),
};
//Create new instance of this class for each browser
for (Browser b: browsers) {
testList.add(new BrowserTest(b));
}
return testList.toArray();
}
}
метод @Factory, описанный выше, работает хорошо, и я создаю несколько экземпляров классов BrowserTest, каждый из которых инициализируется с помощью другого браузера, который TestNG будет запускать в одном и том же наборе, содержащем первый экземпляр BrowserTest.
Я хотел бы знать, возможно ли создать новый набор для каждого нового экземпляра класса или еще лучше, если TestNG предоставляет механизм верхнего уровня для управления объектами на уровне набора (на самом деле, метод @Factory работает только на уровне класса).) - чтобы я мог программно создавать новые экземпляры набора, каждый из которых инициализировался для использования другого браузера.