目前,我正在以这种方式拍摄测试失败的屏幕截图:
@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框架。但是由于我已经在截屏了,所以我不想使用其他框架。
是的,您可以在testng报告中包含指向屏幕截图的链接。
您需要调用org.testng.Reporter.log方法以通过@Listeners({yourListener.class})注释您的测试类或所有测试类的父级,或将侦听器添加到您的中,从而将超链接写入testng报告testng.xml。
org.testng.Reporter.log
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识别出故障时,将执行此方法中的代码。
ontestfailure
您可以调用屏幕快照获取方法,并用于Reporter.log将超链接放入该屏幕截图。然后,您可以在失败的测试用例详细信息下找到此链接。
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(); } } } }