思路:
1.写一个类继承TestListenerAdapter,覆写onTestFailure()方法
2.在onTestFailure方法里,调用selenium的TakesScreenShot的getScreenshotAs()方法,完成截图
3.在testng.xml里注册监听器<listener class-name="com.util.TakeScreenshotListener" />
具体实现:
1.写一个类继承TestListenerAdapter,覆写onTestFailure()方法
package com.util; import org.openqa.selenium.WebDriver; import org.testng.ITestResult; import org.testng.TestListenerAdapter; import knife.BrowserEmulator; public class TakeScreenshotListener extends TestListenerAdapter { @Override public void onTestFailure(ITestResult tr) { // TODO Auto-generated method stub super.onTestFailure(tr); // 类名为全类名,包含包名:com.testcases.LoginTest String classname = tr.getTestClass().getName(); // 方法名为执行的方法:testWrongPasswordLogin String methodname = tr.getMethod().getMethodName(); // 此处为获取当前的driver,可以写一个静态方法来获取当前driver,然后来调用 WebDriver driver = BrowserEmulator.getWebDriver(); TakeScreenshot shot = new TakeScreenshot(driver); shot.takeScreenShot(classname, methodname); } }
2.在onTestFailure方法里,调用selenium的TakesScreenShot的getScreenshotAs()方法,完成截图
package com.util; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.commons.io.FileUtils; import org.openqa.selenium.OutputType; import org.openqa.selenium.TakesScreenshot; import org.openqa.selenium.WebDriver; public class TakeScreenshot { WebDriver driver; String filePath; public TakeScreenshot(WebDriver driver) { this.driver = driver; } public void takeScreenShot(String classname, String methodname) { // 获取截图file File file = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE); try { // 将图片移动到指定位置 FileUtils.moveFile(file, new File(getFilePath(classname, methodname))); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public String getFilePath(String classname, String methodname) { // 创建储存图片的路径,不存在则创建 File dir = new File("test-output/snapshot"); if (!dir.exists()) { dir.mkdirs(); } SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh-mm-ss"); String dateStr = dateFormat.format(new Date()); // 获取新的文件名,包含时间,类名,方法名 String fileName = dateStr + "_" + classname + "_" + methodname + ".jpg"; // 获取文件路径 String filePath = dir.getAbsolutePath() + "/" + fileName; return filePath; } }
3.在testng.xml里注册监听器<listener class-name="com.util.TakeScreenshotListener" />
1 2 3 | <listeners> <!-- 如果用例断言失败进行截图 --> <listener class -name= "com.util.TakeScreenshotListener" /> </listeners> |
分类:
Selenium_Java
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 《HelloGitHub》第 106 期
· 数据库服务器 SQL Server 版本升级公告
· 深入理解Mybatis分库分表执行原理
· 使用 Dify + LLM 构建精确任务处理应用