#java #eclipse #selenium #testng
#java #eclipse #селен #testng
Вопрос:
У меня есть базовый класс, промежуточный класс и тестовый класс с аннотациями в каждом из классов и внутри классов. В основном тест наследует промежуточный, а промежуточный — базовый. Теоретически он должен сначала выполнять аннотации в base, затем аннотации в intermediate и, наконец, тестировать.
Согласно документации TestNG на https://testng.org/doc/documentation-main.html#annotations это должно сработать. «Поведение аннотаций в суперклассе класса TestNG
Приведенные выше аннотации также будут учитываться (наследуются) при размещении в суперклассе класса TestNG. Это полезно, например, для централизации настройки тестирования для нескольких тестовых классов в общем суперклассе.
В этом случае TestNG гарантирует, что методы «@Before» выполняются в порядке наследования (сначала самый высокий суперкласс, затем вниз по цепочке наследования), а методы «@After» в обратном порядке (вверх по цепочке наследования) »
public void base(){
@BeforeTest
public void setup(){
//initialize webdirver amp; stuff
}
@AfteTest
public void tearDown(){
//quit driver
}
}
public void logIn extends base() {
@BeforeClass
public void login(){
//do stuff
}
@AfterClass
public void logout(){
//do stuff
}
}
public void test1 extends login() {
@test
public void test(){
//do stuff
}
}
Моя идея заключалась в том, чтобы инициализировать webdriver, затем войти в систему, затем выполнить тест, после этого выйти из системы и, наконец, выйти из драйвера, но он не работает. При выполнении теста в классе login отображается ошибка, поскольку драйвер имеет значение null. Оказывается, TestNG не рассматривает аннотации в базовом классе.
Я избавился от класса login, и он выполняет инициализацию драйвера. Я также пробовал использовать разные аннотации с идеей трех классов, которая у меня была, но ничего не работает.
public void base(){
@BeforeTest
public void setup(){
//initialize webdirver amp; stuff
}
@AfteTest
public void tearDown(){
//quit driver
}
}
public void test1 extends base() {
@test
public void test(){
//do stuff
}
}
Есть ли способ заставить это работать или лучшее решение?
Комментарии:
1. Можете ли вы работать в режиме отладки с точкой отладки в базовом и промежуточном классе. TestNG выполняет его правильно, но вы гарантируете, что драйвер базового класса наследуется в промежуточный и тестовый класс без каких-либо ограничений спецификатора доступа
2. Я определил драйвер как закрытый в базовом классе, но у меня есть метод возврата драйвера, и это первое, что я вызываю в тестовом классе. Я попробую объявить его общедоступным.