Как получить экземпляр драйвера в классе слушателя - PullRequest
0 голосов
/ 19 марта 2019

У меня есть тестовый класс, который запускается путем получения параметров драйвера из файла TestNG.Вот поток рамки.

<parameter name="browser" value="chrome"/> предоставляется в файле TestNG.

Используется классом logintest .

public class LoginLogoutTest extends Base{
  @Test
  @Parameters("browser")
  public void initializeBrowser(String browser) throws IOException{
      super.initializeBrowser(browser);
      driver.get("https://www.google.com")
      Assert.assertEquals(xpath_to_get_header, "Invalid_header_name");
  }

initializeBrowser объявлен в Базовом классе.

public class Base {
public WebDriver driver;

public void initializeBrowser(String browser) throws IOException {
    if (browser.equalsIgnoreCase("chrome")) {
        System.setProperty("webdriver.chrome.driver", currentDir + "\\src\\main\\java\\resources\\chromedriver.exe");
        driver = new ChromeDriver();
    } 
     else { //do something }

Теперь, как я могу реализовать класс слушателя, чтобы он делал снимок экрана при сбое?Вот как я пытался, но я не знаю, как получить экземпляр драйвера из моего logintest класса.

public void onTestFailure(ITestResult result) {
    File Src = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
    try {
        FileUtils.copyFile(Src, new File("C://test//" + result + "screen.jpg"));
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    }

Ответы [ 2 ]

2 голосов
/ 19 марта 2019

Вы можете применить методы класса слушателя к вашему тестовому классу, добавив параметр <listener> в ваш тестовый класс.

Итак, допустим, имя класса, в котором вы написали onTestFailure(ITestResult result), равно ListenerClass, и этот класс реализует ITestListener, поэтому в этом случае вам просто нужно упомянуть имя класса слушателя в файле testng и он будет применять все методы, упомянутые в вашем классе слушателя, к вашему тестовому классу.

Реализация будет выглядеть примерно так:

Класс слушателя:

public class ListenerClass implements ITestListener{

@Override
public void onTestFailure(ITestResult result) {
File Src = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
try {
    FileUtils.copyFile(Src, new File("C://test//" + result + "screen.jpg"));
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
  }
}

Тестовый файл:

<suite name="TestSuite" parallel="tests" preserve-order="true">

<listeners>
    <listener class-name="packageName.ListenerClass"></listener> (Add your listener class path here)
</listeners>

    <test name="Testing" preserve-order="true">
    <classes>
        <class name="packageName.LoginLogoutTest"/> (Add your test class path here)
    </classes>
</test>

1 голос
/ 19 марта 2019

Быстрый ответ

Вам необходимо добавить тег прослушивателя внутри TestNG.xml.Пожалуйста, посмотрите на скриншот ниже для справки .

enter image description here

enter image description here

enter image description here

...