写好截图方法
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.commons.io.FileUtils;
import org.apache.log4j.Logger;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.testng.ITestResult;
import org.testng.Reporter;
public void saveScreenShot(ITestResult tr) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss");
String mDateTime = formatter.format(new Date());
String fileName = mDateTime + "_" + tr.getName();\\图片名,时间加用例名
String filePath = "";\\保存位置
try {
File screenshot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
filePath = "results/screenshot/"+ fileName + ".jpg";
File destFile = new File(filePath);
FileUtils.copyFile(screenshot, destFile);
logger.info("截图成功,保存在:" + "[ " + filePath + " ]");
} catch (Exception e) {
filePath = "截图失败" + e.getMessage();
logger.error(filePath);
}
if (!"".equals(filePath)) {
Reporter.setCurrentTestResult(tr);
Reporter.log(filePath);
// 把截图写入到Html报告中方便查看
Reporter.log("<img src=\"../../" + filePath + "\"/>");
}
}
下面是testng监听器的重写,当用例失败后调用截图功能
新建类继承TestListenerAdapter
import org.testng.ITestResult;
import org.testng.TestListenerAdapter;
public class ScreenShotListener extends TestListenerAdapter{
@Override
public void onTestFailure(ITestResult tr) {
super.onTestFailure(tr);
logger.warn(tr.getName() + " 测试用例执行失败!");
new ScreenShot().saveScreenShot(tr);\\调用截图功能
}
完成后还需要添加监听器ScreenShotListener
在testng.xml中添加
<listeners>
<listener class-name="com.test.listener.ScreenShotListener" />
</listeners>
我的框架有一个基类Base,所以用例都会继承这个基类,所以也可以把监听器加到Base中,放在class前
//@Listeners({TestResultListener.class,XXXListener})//添加多个监听器
@Listeners({TestResultListener.class})//添加监听器
public class Base {
注意导入包就行了