思路:

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>

 

posted on 2017-08-28 17:09  Jourly  阅读(2323)  评论(0编辑  收藏  举报