Добрый день! Столкнулся с такой проблемой:
Есть проект Selenium+maven+testng+java; тесты запускаю параллельно; для каждого класса открывается свой экземпляр браузера хром. С такой конфигураций тесты выполняются успешно.
Поставлена задача запускать сьют классов с тестами в одном экземпляре браузера хром:
- Меняю в классе BaseTest: @BeforeClass на @BeforeTest - здесь у меня инициализация ChromeDriver
- Меняю в классе BaseTest: @AfterClass на @AfterTest - здесь у меня закрытие браузера
После этого запускаю сьют с 2мя наборами классов - открывается 2 браузера параллельно (как и ожидалось), первые классы с обоих наборов выполнились успешно, а следующие классы уже падают и похоже что из-за того что не передается driver в следующие классы.
Ребята, пожалуйста, помогите решить эту проблему.
public class BaseTest:
protected WebDriver driver;
@Parameters({"login","auth"})
@BeforeTest (alwaysRun = true)
public void setUpMain(final String login, final String auth) throws IOException, InterruptedException {
if (System.getProperty("os.name").toLowerCase().contains("win")) {
driverPath = "src/test/resources/chromedriver102.exe";
}
else {
driverPath = "src/test/resources/chromedriverlinux102";
}
System.setProperty("webdriver.chrome.driver", driverPath);
LoggingPreferences logs = new LoggingPreferences();
logs.enable(LogType.BROWSER, Level.SEVERE);
ChromeOptions options = new ChromeOptions();
HashMap<String, Object> chromePref = new HashMap<>();
chromePref.put("profile.default_content_settings.popups", 0);
chromePref.put("download.default_directory", System.getProperty("user.dir"));
options.setExperimentalOption("prefs", chromePref);
options.addArguments("headless");
options.addArguments("window-size=1800,1000");
options.setCapability(CapabilityType.LOGGING_PREFS, logs);
options.setCapability(CapabilityType.UNEXPECTED_ALERT_BEHAVIOUR, UnexpectedAlertBehaviour.IGNORE);
driver = new ChromeDriver(options);
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(10L, SECONDS);
driver.get(System.getProperty("studio_url"));
if (auth.equals("true")){
projectBoard = auth(login);
}
Thread.sleep(1000);
}
@BeforeTest (alwaysRun = true)
public void setWaiter () {
driver.manage().timeouts().implicitlyWait(10L, SECONDS);
}
@BeforeClass (alwaysRun = true)
public void setUrl () throws InterruptedException {
driver.get(System.getProperty("studio_url") + "project/");
Thread.sleep(1000);
}
StudioTests.xml:
suite name="Studio Tests" verbose="1" parallel="tests" thread-count="4"
<parameter name="browser" value="chrome"/>
<test name="admin">
<classes>
<class name="tests.project.Action"/>
<class name="tests.DetaliedProjectPageTests"/>
</classes>
</test>
<test name="superuser">
<classes>
<class name="tests.project.Action"/>
<class name="tests.DetaliedProjectPageTests"/>
</classes>
</test>
pom.xml:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
<configuration>
<parallel>tests</parallel>
<threadCount>2</threadCount>
<redirectTestOutputToFile>true</redirectTestOutputToFile>
<suiteXmlFiles>
<!--suppress UnresolvedMavenProperty -->
<suiteXmlFile>src/test/suites/${testSuite}.xml</suiteXmlFile>
</suiteXmlFiles>
<testFailureIgnore>true</testFailureIgnore>
<argLine>
-javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar"
</argLine>
<systemPropertyVariables>
<resultsDirectory>target/allure-results</resultsDirectory>
</systemPropertyVariables>
</configuration>
<executions>
<execution>
<goals>
<goal>test</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aspectj.version}</version>
</dependency>
</dependencies>
</plugin>
TestClass DetaliedProjectPageTests.java
public class DetaliedProjectPageTests extends BaseTest {
private DetailProjectPage detailProjectPage;
private ProjectBoardPage projectBoardPage;
private final int classPriority = 400;
@BeforeClass(alwaysRun = true)
public void preconditions () throws IOException {
projectBoardPage = new ProjectBoardPage(driver);
projectBoardPage.createProject();
detailProjectPage = new DetailProjectPage(driver);
}
@Epic("Project page")
@Feature("Manage pages")
@Story("Duplicate page")
@Test(priority = classPriority+1, description = "Duplication of the page")
public void addDuplicateArticle() {
int countArticlesBeforeDuplication = detailProjectPage.getCountArticles();
detailProjectPage.clickArticleDuplicateBtn();
int countArticlesAfterDuplication = detailProjectPage.getCountArticles();
Assert.assertEquals(countArticlesBeforeDuplication + 1, countArticlesAfterDuplication, "Duplication of articles is not successful");
}
....
....
}