有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在对失败的测试用例截图时出错,并且它没有附加到扩展报告中

每次我运行代码时,它都会在下面给出的这些行中显示一个错误

  1. File src =ts.getScreenshotAs(OutputType.FILE);

  2. driver = (WebDriver) clazz.getDeclaredField("driver").get(testobject);

  3. extest.get().addScreenCaptureFromPath(getScreenshotAs(result.getMethod().getMethodName(), driver),result.getMethod().getMethodName());

完整代码如下所示

这是我的基础课

public class IntDriverr {
    public WebDriver driver;
    public Properties prop;

    public WebDriver intDriver() throws IOException {
        prop = new Properties();
        FileInputStream fis = new FileInputStream(
                "E:\\JavaPractice\\E2EProject\\src\\main\\java\\Myproject\\data.properties");
        prop.load(fis);
        String browserName = prop.getProperty("browser");
        if (browserName.equals("chrome")) {
            System.setProperty("webdriver.chrome.driver", "C:\\chromedriver.exe");
            driver = new ChromeDriver();
        } else if (browserName.equals("Firefox")) {
            System.setProperty("webdriver.geckodriver.driver", "C:\\geckodriver.exe");
            driver = new FirefoxDriver();
        }
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        return driver;
    }

    public String getScreenshotAs(String TestCaseName,WebDriver driver) throws IOException {
        TakesScreenshot ts = ((TakesScreenshot)driver);
        File src =ts.getScreenshotAs(OutputType.FILE);
        String dp =System.getProperty("user.dir")+"\\reports\\"+TestCaseName+".png";
        File file =new File(dp);
        FileUtils.copyFile(src, file);
        return dp;
    }

对于失败的测试用例

  public class listeners extends IntDriverr implements ITestListener {

    ExtentReports extend = ExtentReporterNG.generateReport();
    ExtentTest test;
    private static ThreadLocal<ExtentTest> extest = new ThreadLocal<ExtentTest>();

    public void onTestStart(ITestResult result) {
        test = extend.createTest(result.getMethod().getMethodName());
        extest.set(test);
    }

    public void onTestSuccess(ITestResult result) {
        extest.get().log(Status.PASS, "Suscess");

    }

    public void onTestFailure(ITestResult result) {
        WebDriver driver = null;
        extest.get().fail(result.getThrowable());
        Object testobject = result.getInstance();
        Class clazz = result.getTestClass().getRealClass();
        try {
            driver = (WebDriver) clazz.getDeclaredField("driver").get(testobject);
        } catch (Exception e1) {
            e1.printStackTrace();
        }

        try {
            extest.get().addScreenCaptureFromPath(getScreenshotAs(result.getMethod().getMethodName(), driver),
                    result.getMethod().getMethodName());

        } catch (Exception e) {
        
            e.printStackTrace();
        }
        
    }

    public void onFinish(ITestContext context) {

        extend.flush();
    }

但是当我通过testng xml文件触发时,我得到了这个错误

java.lang.NoSuchFieldException: driver

    at java.base/java.lang.Class.getDeclaredField(Class.java:2411)
    at Myproject.listeners.onTestFailure(listeners.java:33)
    at org.testng.internal.TestListenerHelper.runTestListeners(TestListenerHelper.java:96)
    at org.testng.internal.TestInvoker.runTestResultListener(TestInvoker.java:220)
    at org.testng.internal.TestInvoker.invokeMethod(TestInvoker.java:657)
    at org.testng.internal.TestInvoker.invokeTestMethod(TestInvoker.java:174)
    at org.testng.internal.MethodRunner.runInSequence(MethodRunner.java:46)
    at org.testng.internal.TestInvoker$MethodInvocationAgent.invoke(TestInvoker.java:822)
    at org.testng.internal.TestInvoker.invokeTestMethods(TestInvoker.java:147)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:146)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:128)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:834)

java.lang.NullPointerException

    at Myproject.IntDriverr.getScreenshotAs(IntDriverr.java:42)
    at Myproject.listeners.onTestFailure(listeners.java:39)
    at org.testng.internal.TestListenerHelper.runTestListeners(TestListenerHelper.java:96)
    at org.testng.internal.TestInvoker.runTestResultListener(TestInvoker.java:220)
    at org.testng.internal.TestInvoker.invokeMethod(TestInvoker.java:657)
    at org.testng.internal.TestInvoker.invokeTestMethod(TestInvoker.java:174)
    at org.testng.internal.MethodRunner.runInSequence(MethodRunner.java:46)
    at org.testng.internal.TestInvoker$MethodInvocationAgent.invoke(TestInvoker.java:822)
    at org.testng.internal.TestInvoker.invokeTestMethods(TestInvoker.java:147)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:146)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:128)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:834)

===============================================
Suite
Total tests run: 2, Passes: 1, Failures: 1, Skips: 0
===============================================

共 (0) 个答案