【框架】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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM