Регистратор ExtentReport NullPointerException - PullRequest
0 голосов
/ 28 мая 2018

Не могу понять, почему я получаю нулевое значение здесь.

ExtentReport не работает в аннотированном блоке @AfterMethod. Если вы видите мой аннотированный блок @AfterMethod, эта строка "logger.log(LogStatus.PASS, result.getName() + " passed");" не работает,В консоли отображается исключение NullPointerException.

package com.cna.qa.testcases;

import java.io.File;
import java.ioenter code here.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.ITestResult;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

import com.relevantcodes.extentreports.ExtentReports;
import com.relevantcodes.extentreports.ExtentTest;
import com.relevantcodes.extentreports.LogStatus;

import junit.framework.Assert;

public class VerifyTitle {

    public ExtentReports extent;
    public ExtentTest logger;
    public WebDriver driver;

    @BeforeTest
    public void beforetest() {
        extent = new ExtentReports("C:\\Users\\mm\\selenium_projects\\SmokeTest\\output\\extentReport.html", true);
    }

    @Test
    public void verifyBlogTitle1() {

        System.setProperty("webdriver.gecko.driver", "C:\\Users\\mmia\\IdeaProjects\\geckoDriver\\geckodriver.exe");
        driver = new FirefoxDriver();
        driver.manage().window().maximize();
        driver.get("https://devxx.yyy.net");

        String title = driver.getTitle();
        Assert.assertTrue(title.contains("Dashboard"));
    }

    public static String screenshot(WebDriver driver, String screenshotname) throws IOException {
        String dtname = new SimpleDateFormat("yyyyMMddhhmmss").format(new Date());
        TakesScreenshot ts = (TakesScreenshot) driver;
        File source = ts.getScreenshotAs(OutputType.FILE);
        String destination = System.getProperty("user.dir") + "\\screenshots\\" + screenshotname + "_" + dtname + ".png";
        File finalDestination = new File(destination);
        FileUtils.copyFile(source, finalDestination);

        return destination;
    }

    @AfterMethod()
    public void teardown(ITestResult result) throws IOException {

        if (result.getStatus() == ITestResult.SUCCESS) {
            System.out.println(result.getStatus());
            logger.log(LogStatus.PASS, result.getName() + " passed");

        } else if (result.getStatus() == ITestResult.FAILURE) {
            logger.log(LogStatus.FAIL, "Test failed name is " + result.getName()); // failed test case name
            logger.log(LogStatus.FAIL, "Test failed name is " + result.getThrowable()); // faile test case error
            String screenshotPath = VerifyTitle.screenshot(driver, result.getName());
            logger.log(LogStatus.FAIL, screenshotPath);
        } else if (result.getStatus() == ITestResult.SKIP) {
            logger.log(LogStatus.SKIP, "Test skipped name is " + result.getName()); // skipped test case name
        }

        extent.endTest(logger); // ending test and send all log messages

        driver.quit();
    }

    @AfterTest
    public void aftertest() {
        extent.flush();
        extent.close();
    }`enter code here`

}

Вот что я вижу в консоли:

1
FAILED CONFIGURATION: @AfterMethod teardown([TestResult name=verifyBlogTitle1 status=SUCCESS method=VerifyTitle.verifyBlogTitle1()[pri:0, instance:com.cna.qa.testcases.VerifyTitle@1e397ed7] output={null}])
java.lang.NullPointerException
    at com.cna.qa.testcases.VerifyTitle.teardown(VerifyTitle.java:77)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124)
    at org.testng.internal.MethodInvocationHelper.invokeMethodConsideringTimeout(MethodInvocationHelper.java:59)
    at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:451)
    at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:222)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:634)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:707)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:979)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
    at org.testng.TestRunner.privateRun(TestRunner.java:648)
    at org.testng.TestRunner.run(TestRunner.java:505)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:455)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:450)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:415)
    at org.testng.SuiteRunner.run(SuiteRunner.java:364)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:84)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1187)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1116)
    at org.testng.TestNG.runSuites(TestNG.java:1028)
    at org.testng.TestNG.run(TestNG.java:996)
    at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:114)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)

Ответы [ 2 ]

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

Как видно из кода, вы нигде не инициализировали ExtentTest logger;, поэтому, вероятно, именно поэтому вы получаете нулевое значение.

Попробуйте так: ваш код подправлен:

   @BeforeTest
    public void beforetest() {
        extent = new ExtentReports("C:\\Users\\mm\\selenium_projects\\SmokeTest\\output\\extentReport.html", true);
        logger = extent.createTest(testName, desc); // enter testName, desc....
    }
0 голосов
/ 28 мая 2018

Насколько я вижу, вы не определили какое-либо значение объекта ExtentTest, вы просто определили местоположение ExtentReport, такого назначения или создания отчета нет.

Вам необходимо определить его, logger = extent.startTest("Description");

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

Вы используете версию 2.41, внедрите этот пример для базовой пробной версии.

Также рекомендую использовать, Версия 3 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...