java在对失败的测试用例截图时出错,并且它没有附加到扩展报告中
每次我运行代码时,它都会在下面给出的这些行中显示一个错误
File src =ts.getScreenshotAs(OutputType.FILE);
driver = (WebDriver) clazz.getDeclaredField("driver").get(testobject);
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) 个答案