UI自动化截图操作
- 基于目前公司用java做UI自动化,整体实现case执行失败时截图的一些方法
首先创建一个Screenshot 类,在这个类里实现截图操作
实现截图操作后 创建一个 TestLogListener 类 继承TestListenerAdapter,重写onTestFailure 方法
Screenshot 类
public class Screenshot {
private static final String SCREENSHOT_PATH = System.getProperty("user.dir") + File.separator + "target" + File.separator + "test-output" + File.separator + "screenshot";
/**
* 截图
*/
public static void capture(ITestResult iTestResult) {
log.info("开始截图");
// 拿到需要截图的驱动
AndroidDriver<AndroidElement> driver = Driver.getInstance();
// 截图目录
File screenshotFile = new File(SCREENSHOT_PATH);
// 若文件夹不存在就创建该文件夹
if (!screenshotFile.exists() && !screenshotFile.isDirectory()) {
screenshotFile.mkdirs();
}
// 哪个类导致的截图
String className = iTestResult.getInstance().getClass().getSimpleName();
// 对应方法导致的失败截图
String caseName = iTestResult.getMethod().getMethodName();
// 时间格式
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("M月d日H时m分s秒");
String timeStr = simpleDateFormat.format(new Date());
// 截图名称
String screenshotName = className + "-" + caseName + "-" + timeStr + ".png";
try {
// 截图操作
File sourceFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
// 截图存储
FileUtils.copyFile(sourceFile, new File(SCREENSHOT_PATH + File.separator + screenshotName));
} catch (IOException e) {
e.printStackTrace();
log.error("截图操作异常!");
}
}
}
TestLogListener 类
public class TestLogListener extends TestListenerAdapter {
/**
* 测试失败
* @param iTestResult ITestResult
*/
@Override
public void onTestFailure(ITestResult iTestResult) {
super.onTestFailure(iTestResult);
// 失败时候抛出异常进行截图
Screenshot.capture(iTestResult);
getphoto(Driver.getInstance());
}
// 截图显示在测试报告中
@Attachment(value = "失败截图如下:",type = "image/png")
public byte[] getphoto(AndroidDriver driver){
byte[] photo = driver.getScreenshotAs(OutputType.BYTES);
return photo;
}
}