目前我正以这种方式截取我的测试失败的屏幕截图:
@AfterMethod(alwaysRun=true)
public void catchExceptions(ITestResult result){
Calendar calendar = Calendar.getInstance();
SimpleDateFormat formater = new SimpleDateFormat("dd_MM_yyyy_hh_mm_ss");
String methodName = result.getName();
if(!result.isSuccess()){
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
try {
FileUtils.copyFile(scrFile, new File((String) PathConverter.convert("failure_screenshots/"+methodName+"_"+formater.format(calendar.getTime())+".png")));
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
我可以将自己的屏幕截图添加到TestNG报告链接或图片中吗?如果是的话怎么样?
我在网上找到的只是FEST框架。但由于我已经截取屏幕截图,我不想使用其他框架。
答案 0 :(得分:15)
是的,您可以在testng报告中添加指向您的屏幕截图的链接。
您需要调用org.testng.Reporter.log
方法,通过使用@Listeners({yourListener.class})注释您的测试类或所有测试类的父级,或者添加以下内容来编写testng报告的超链接聆听testng.xml
。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="default">
<listeners>
<listener class-name="ScreenshotListener" />
</listeners>
<test name="Test">
<packages>
<package name="someTests.*"/>
</packages>
</test>
</suite>
您需要先创建一个Listener类并将其添加到testng。您可以从testng.org获取详细信息。搜索听众。
创建该类后,您应该在其中编写一个覆盖ontestfailure
方法的方法。只要testng识别出故障,就会执行此方法中的代码。
您可以调用屏幕截图抓取方法并使用Reporter.log
将超链接放到该屏幕截图中。然后,您可以在失败的测试用例详细信息下找到此链接。
import java.io.*;
import java.util.*;
import java.text.*;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.*;
import org.testng.*;
public class ScreenshotListener extends TestListenerAdapter {
@Override
public void onTestFailure(ITestResult result) {
Calendar calendar = Calendar.getInstance();
SimpleDateFormat formater = new SimpleDateFormat("dd_MM_yyyy_hh_mm_ss");
String methodName = result.getName();
if(!result.isSuccess()){
File scrFile = ((TakesScreenshot)SomeStaticWebDriver.driver).getScreenshotAs(OutputType.FILE);
try {
String reportDirectory = new File(System.getProperty("user.dir")).getAbsolutePath() + "/target/surefire-reports";
File destFile = new File((String) reportDirectory+"/failure_screenshots/"+methodName+"_"+formater.format(calendar.getTime())+".png");
FileUtils.copyFile(scrFile, destFile);
Reporter.log("<a href='"+ destFile.getAbsolutePath() + "'> <img src='"+ destFile.getAbsolutePath() + "' height='100' width='100'/> </a>");
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
答案 1 :(得分:1)
自定义一点ExtentReport可以提供非常有用的报告,该报告具有在测试失败时准确捕获的异常+屏幕截图。屏幕截图可以放置在异常旁边,用户可以使用该异常来了解发生错误时网站在做什么。
@Test (enabled=true)
public void verifySearch() {
extentlogger = extent.createTest("To verify verifySearch");
//Your other code here.....
soft.assertEquals("xxx", "xxxx");
soft.assertAll();
}
AfterMethod
@AfterMethod
public void getResult(ITestResult result) throws Exception{
if(result.getStatus() == ITestResult.FAILURE)
{
extentlogger.log(Status.FAIL, MarkupHelper.createLabel(result.getThrowable() +
" - Test Case Failed", ExtentColor.RED));
try {
// get path of captured screenshot using custom failedTCTakeScreenshot method
String screenshotPath = failedTCTakeScreenshot( result);
extentlogger.fail("Test Case Failed Snapshot is below " +
extentlogger.addScreenCaptureFromPath(screenshotPath));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}