zoukankan      html  css  js  c++  java
  • 【框架】selenium运行失败后自动截图(三)

    思路:

    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" />

    	<listeners> <!-- 如果用例断言失败进行截图 -->
    		<listener class-name="com.util.TakeScreenshotListener" />
    	</listeners>
    
  • 相关阅读:
    python+opencv实现图像自适应阈值的均衡化
    ubuntu添加新的分辨率选项(干货)
    python+opencv检测图像清晰度
    python根据列表创建文件夹,拷贝指定文件
    牛客多校Round 4
    牛客多校Round 3
    HDU多校Round 2
    HDU多校Round 1
    牛客多校Round 2
    牛客多校Round 1
  • 原文地址:https://www.cnblogs.com/Jourly/p/7444693.html
Copyright © 2011-2022 走看看