Проблема в том, что когда вы запускаете класс Test и вызывается @AfterMethod
, он пытается выйти из драйвера, принадлежащего верхнему классу, но не из классов, которые создаются внутри методов.Вот небольшой пример для лучшего понимания:
Класс теста JUnit:
import org.junit.Test;
import org.junit.After;
public class intTestClass extends Methods{
@Test
public void test1() throws InterruptedException {
intTestClass object1;
object1 = new intTestClass();
object1.setInt();
}
@After
public void tearDown() {
System.out.println("testInt is: "+ testInt);
}
}
И класс Methods:
public class Methods {
public int testInt = 0;
public void setInt() {
testInt = 1;
}
}
Здесь, когда вы запускаете тест JUnitвы ожидаете, что значение testInt
будет напечатано как 1. Однако метод с аннотацией @After(@AfterMethod for testng)
проверяет значение переменной testInt
, которая относится к верхнему уровню intTestClass, ачем intTestClass , который создается в методе test1()
.
Поэтому мы видим вывод как:
testInt is: 0
Если мы применим это к вашему сценарию,что вам нужно сделать, это переместить ваш launchBrowser()
метод в ваш тестовый класс и вызвать метод с аннотацией @BeforeClass
.