Как зарегистрировать имя набора тестов перед набором

#java #selenium #log4j #testng

#java #selenium #log4j #testng

Вопрос:

Я хочу записать имя набора тестов перед его запуском. Мне удалось зарегистрировать имена методов, но я не мог понять, как я могу сделать то же самое с наборами. Мой код:

РЕДАКТИРОВАТЬ: я нашел решение. Вот код для тех, кому это нужно.

 public class TestCase {

private Logger logger = LogManager.getLogger(this.getClass());
protected static WebDriver driver;

private String url = PropertyManager.getUrl();
private String browser = PropertyManager.getBrowser();

@BeforeSuite
protected void setUp(ITestContext tes) { 
    System.setProperty("webdriver.chrome.driver","chromedriver.exe");
    System.setProperty("webdriver.chrome.logfile", "chromedriver.log");
    System.setProperty("webdriver.chrome.verboseLogging", "true");
    driver = new ChromeDriver();

    driver.get(url);
    driver.manage().window().maximize();
    logger.info("Starting up {} driver.", browser);


    logger.info(tes.getSuite().getName());
}
  

Ответ №1:

Это можно сделать, добавив прослушиватель в проект. Используйте IInvokedMethodListener для выполнения действий перед вызовом предполагаемого метода.

Шаги:

  1. Допустим, создайте класс ListenerClass и реализуйте IInvokedMethodListener в нем интерфейс.

     public class ListenerClass implements IInvokedMethodListener
      
  2. Добавьте весь нереализованный метод и добавьте приведенный ниже код в beforeInvocation метод :

     @SuppressWarnings("deprecation")
    @Override
    public void beforeInvocation(IInvokedMethod method, ITestResult testResult) {
    
        try {
            if (method.getTestMethod().getMethod().getAnnotation(org.testng.annotations.BeforeSuite.class)
                .toString() != null) {
                System.out.println("Before suite annoted method name - "   method.getTestMethod().getMethodName());
                System.out.println("Test suite name  - "   testResult.getTestContext().getSuite().getName());
             }
        } catch (Exception e) {
      }
    }
      
  3. Добавьте класс прослушивателя в свой testng.xml файл

     <listeners>
        <listener class-name="ListenerClass"></listener>
    </listeners>
    
    <test name="Test_Name">
        <classes>
            <class name="Test_Class_Name" />
        </classes>
    </test> <!-- Test -->
      

Запустите testng.xml как TestNGSuite, вы получите ожидаемый результат. Дайте мне знать, есть ли там что-нибудь

Комментарии:

1. Спасибо за ваш ответ. Я получаю ошибку = Корневой элемент документа «слушатели», должен соответствовать корневому типу документа «набор». Я соответствующим образом обновил вопрос и добавил testng.xml также.

2. <listeners> <listener class-name="ListenerClass"></listener> </listeners> добавьте это

3. Я добавил, но получаю указанную выше ошибку. Куда именно я должен его добавить?

4. Внутри тега набора в XML и не забудьте добавить класс прослушивателя с именем пакета