Наследование аннотаций TestNG

#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. Я определил драйвер как закрытый в базовом классе, но у меня есть метод возврата драйвера, и это первое, что я вызываю в тестовом классе. Я попробую объявить его общедоступным.