Как получить текущий драйвер класса в ItestListener - PullRequest
0 голосов
/ 15 мая 2018

Я работаю с ExtentReports и ItestListener для моего проекта testng-selenium-java, Мой слушатель делает снимок экрана для тестового примера с ошибками для ExtentReports, но проблема в том, что у меня есть несколько классов в моем testng.XML, и я запускаю их за один раз, один за другим, делая разные вещи и имея собственные драйверы.

В случае неудачи код для Ilistener -

public void onTestFailure(ITestResult iTestResult) 
{
    System.out.println("I am in onTestFailure method " +  
    getTestMethodName(iTestResult) + " failed");

    //Get driver from BaseTest and assign to local webdriver variable.
    Object testClass = iTestResult.getInstance();
    WebDriver webDriver = ((BaseTest) testClass).getDriver();


    //Take base64Screenshot screenshot.
    String base64Screenshot = "data:image/png;base64,"+((TakesScreenshot)webDriver).
            getScreenshotAs(OutputType.BASE64);

    //Extentreports log and screenshot operations for failed tests.
    ExtentTestManager.getTest().log(LogStatus.FAIL,"Test Failed",
            ExtentTestManager.getTest().addBase64ScreenShot(base64Screenshot));
}

Как убедиться, что драйвер класса неудачного тестового примера берется всякий раз, когда тестовый случай терпит неудачу, потому что в приведенном выше коде все время дается только один драйвер класса, а не текущий класс.

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

просто вы можете установить атрибут в своем тестовом классе и затем вызвать этот атрибут в своем классе слушателя

Например

testClass.java

@BeforeClass
public void setDriver(ITestContext context){
  Webdriver driver = new FirefoxDriver();
  context.setAttribute("WebDriver", driver);
}
@Test
public void t1(){
   // your code
}

Listener.java

WebDriver driver = null;
@Override
public void onTestFailure(ITestResult result) {
    ITestContext context = result.getTestContext();
    driver = (WebDriver) context.getAttribute("WebDriver");
    // your code
}

Здесь вам нужно отметить, что в вашем тестовом классе вам нужно установить атрибут драйвера, а затем один раз вызвать этот атрибут в этом слушателе.ваш драйвер в тестовом классе и классе слушателя будет одинаковым

0 голосов
/ 16 мая 2018

У меня есть решение для нестатического драйвера, когда у вас есть несколько классов, имеющих собственный драйвер и выполняющих собственные функции, можно установить базовый класс с инициализацией драйверов и функцию getdriver, которая получит драйвер из базового класса. и расширить класс из других классов-

class BaseClass
{
WebDriver driver;

public WebDriver getDriver()
{
system.setproperty()
driver=new ChromeDriver();

return driver;
}

Class Test1 extends BaseClass
{
BaseClass bc=new BaseClass()
@BeforTest
public void setup()
{
driver=bc.getDriver()
//rest processing
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...