NỘI DUNG BÀI HỌC

✅ Take Screenshot test case pass/fail/all
✅ Record video all test case

1. Take Screenshot khi chạy test case

Chụp ảnh màn hình lại để khi mình chạy Pass hay Fail sẽ có cái nhìn trực quan lưu lại được từng case xử lý và cả record video nữa.

Đầu tiên, để chụp ảnh màn hình thì chúng ta dùng đoạn code Take Screenshot sau:

// Tạo tham chiếu của TakesScreenshot
TakesScreenshot ts = (TakesScreenshot) DriverManager.getDriver();
// Gọi hàm để chụp ảnh màn hình - getScreenshotAs
File source = ts.getScreenshotAs(OutputType.FILE);
// Kiểm tra folder tồn tại. Nếu không thì tạo mới folder theo đường dẫn
File theDir = new File("./screenshots/");
if (!theDir.exists()) {
    theDir.mkdirs();
}
//Lưu file ảnh với tên cụ thể vào đường dẫn
try {
    FileHandler.copy(source, new File("./screenshots/testHomePage1.png"));
} catch (IOException e) {
    throw new RuntimeException(e);
}


TakesScreenshot ts = (TakesScreenshot) DriverManager.getDriver();

Cái TakesScreenshot này thuộc Selenium nhen

// Gọi hàm để screenshot là getScreenshotAs
File source = ts.getScreenshotAs(OutputType.FILE);

Hàm FileHandler.copy để sao chép source dạng file ở trên vào đường dẫn khai báo trong hàm File() với đuôi dạng hình ảnh như: png, jpg, jpeg.

Lúc này code đầy đủ như này:

@Test
public void testHomePage1() {
    DriverManager.getDriver().get("https://anhtester.com");
    Assert.assertEquals(DriverManager.getDriver().getTitle(), "Anh Tester Automation Testing");

    TakesScreenshot ts = (TakesScreenshot) DriverManager.getDriver();
    File source = ts.getScreenshotAs(OutputType.FILE);

    File theDir = new File("./screenshots/");
    if (!theDir.exists()) {
        theDir.mkdirs();
    }

    try {
        FileHandler.copy(source, new File("./screenshots/testHomePage1.png"));
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
    System.out.println("Screenshot success !!");
}

🔆 Cái DriverManager.getDriver() là mình đang dùng driver toàn cục dạng hỗ trợ Parallel Execution từ ThreadLocal (bài 25). Còn các bạn xem driver của mình hiện tại truyền như nào thì truyền vào cho phù hợp nhé.

Nó lưu file có tên là "testHomePage1" và lưu vào thư mục "screenshots". Đuôi file là PNG như trên đã đặt.



Tạo sẵn thư mục cũng được hoặc nếu không tạo trước thì nó chạy xong tự tạo sinh ra luôn.

Vậy là xong rồi. Thử đi nào.


🔆 Cách tự động lấy tên của phương thức test làm tên File

Các bạn có thể dùng kiểu Reflect Method trong Java để tự động lấy được tên phương thức làm tên cho File screenshot hoặc tên cho cái gì đó tự động.

@Test
public void testHomePage2(Method method) {
    DriverManager.getDriver().get("https://anhtester.com");
    Assert.assertEquals(DriverManager.getDriver().getTitle(), "Anh Tester Automation Testing");

    // Chụp màn hình step này lại
    // Tạo tham chiếu của TakesScreenshot
    TakesScreenshot ts = (TakesScreenshot) DriverManager.getDriver();
    // Gọi hàm capture screenshot - getScreenshotAs
    File source = ts.getScreenshotAs(OutputType.FILE);
    // Kiểm tra folder tồn tại. Nếu không thì tạo mới folder
    File theDir = new File("./screenshots/");
    if (!theDir.exists()) {
        theDir.mkdirs();
    }
    // result.getName() lấy tên của test case xong gán cho tên File chụp màn hình
    try {
        FileHandler.copy(source, new File("./screenshots/" + method.getName() + ".png"));
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
    System.out.println("Screenshot success !!");
}





Như vậy chúng ta không cần đặt tên file thủ công nữa 😋


✅ Cách chụp ảnh màn hình cho những trường hợp Fail

Chúng ta nhớ lại cái @AfterMethod chứ hả. Nó sẽ chạy sau mỗi @Test. Mình kết hợp nó với ITestResult trogn TestNG để thiết lặp trường hợp là sau mỗi lần chạy xong @Test thì check trạng thái để chụp hình theo trạng thái và đặt điều kiện tùy ý.

Dô code luôn nè

@AfterMethod
public void takeScreenshot(ITestResult result) {
    // Khởi tạo đối tượng result thuộc ITestResult để lấy trạng thái và tên của từng Step
    // Ở đây sẽ so sánh điều kiện nếu testcase passed hoặc failed
    // passed = SUCCESS và failed = FAILURE
    if (ITestResult.FAILURE == result.getStatus()) {
        try {
            // Tạo tham chiếu của TakesScreenshot
            TakesScreenshot ts = (TakesScreenshot) DriverManager.getDriver();
            // Gọi hàm capture screenshot - getScreenshotAs
            File source = ts.getScreenshotAs(OutputType.FILE);
            // Kiểm tra folder tồn tại. Nếu không thì tạo mới folder
            File theDir = new File("./screenshots/");
            if (!theDir.exists()) {
                theDir.mkdirs();
            }
            // result.getName() lấy tên của test case xong gán cho tên File chụp màn hình. Giống reflect Method
            FileHandler.copy(source, new File("./screenshots/" + result.getName() + ".png"));
            System.out.println("Screenshot success: " + result.getName());
        } catch (Exception e) {
            System.out.println("Exception while taking screenshot " + e.getMessage());
        }
    }
}

Cái thằng ITestResult.FAILURE là lấy trạng thái gốc của giao diện hỗ trợ so sánh với trạng thái của Test Case trả về từ Result trả về.


Code mẫu để chụp ảnh màn hình cho 2 cái @Test

package anhtester.com.testcases;

import anhtester.com.common.BaseTest;
import anhtester.com.drivers.DriverManager;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.io.FileHandler;
import org.testng.Assert;
import org.testng.ITestResult;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.Test;

import java.io.File;
import java.lang.reflect.Method;

public class TestScreenshot extends BaseTest {
    @Test
    public void testHomePage1(Method method) {
        DriverManager.getDriver().get("https://anhtester.com");
        Assert.assertEquals(DriverManager.getDriver().getTitle(), "Anh Tester Automation Testing");
    }

    @Test
    public void testHomePage2(Method method) {
        DriverManager.getDriver().get("https://anhtester.com");
        Assert.assertEquals(DriverManager.getDriver().getTitle(), "Anh Tester Automation Test");
    }

    @AfterMethod
    public void takeScreenshot(ITestResult result) {
        // Khởi tạo đối tượng result thuộc ITestResult để lấy trạng thái và tên của từng Step
        // Ở đây sẽ so sánh điều kiện nếu testcase passed hoặc failed
        // passed = SUCCESS và failed = FAILURE
        if (ITestResult.FAILURE == result.getStatus()) {
            try {
                // Tạo tham chiếu của TakesScreenshot
                TakesScreenshot ts = (TakesScreenshot) DriverManager.getDriver();
                // Gọi hàm capture screenshot - getScreenshotAs
                File source = ts.getScreenshotAs(OutputType.FILE);
                // Kiểm tra folder tồn tại. Nếu không thì tạo mới folder
                File theDir = new File("./screenshots/");
                if (!theDir.exists()) {
                    theDir.mkdirs();
                }
                // result.getName() lấy tên của test case xong gán cho tên File chụp màn hình. Giống reflect Method
                FileHandler.copy(source, new File("./screenshots/" + result.getName() + ".png"));
                System.out.println("Screenshot success: " + result.getName());
            } catch (Exception e) {
                System.out.println("Exception while taking screenshot " + e.getMessage());
            }
        }
    }
}

Lúc này cái @Test của testHomePage2 sẽ Fail (vì title không đúng) nên nó chỉ chụp ảnh của testHomePage2. Chứ nó mà sinh ra thêm tấm của testHomePage1 thì thấy bà luôn =))



Rồi xong rồi đó

Nếu mà muốn viết hàm riêng để gọi lại từ class nào đó thì làm như mấy bài trước thôi. Viết các class dạng helpers hoặc utils.

Ví dụ tạo class là CaptureHelper và code vào thôi

package anhtester.com.helpers;

import anhtester.com.drivers.DriverManager;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.io.FileHandler;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;

public class CaptureHelper {
    //Tạo format ngày giờ để xíu gắn dô cái name của screenshot hoặc record video không bị trùng tên (không bị ghi đè file)
    private static SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy HH-mm-ss");

    public static void captureScreenshot(String screenshotName) {
        try {
            // Tạo tham chiếu đối tượng của TakesScreenshot với dirver hiện tại
            TakesScreenshot ts = (TakesScreenshot) DriverManager.getDriver();
            // Gọi hàm getScreenshotAs để chuyển hóa hình ảnh về dạng FILE
            File source = ts.getScreenshotAs(OutputType.FILE);
            //Kiểm tra folder nếu không tồn tại thì tạo folder
            File theDir = new File(SystemsHelper.getCurrentDir() + PropertiesHelper.getValue("SCREENSHOT_PATH"));
            if (!theDir.exists()) {
                theDir.mkdirs();
            }
            // Chổ này đặt tên thì truyền biến "screenName" gán cho tên File chụp màn hình
            FileHandler.copy(source, new File(SystemsHelper.getCurrentDir() + PropertiesHelper.getValue("SCREENSHOT_PATH") + File.separator + screenshotName + "_" + dateFormat.format(new Date()) + ".png"));
            System.out.println("Screenshot taken: " + screenshotName);
            System.out.println("Screenshot taken current URL: " + DriverManager.getDriver().getCurrentUrl());
        } catch (Exception e) {
            System.out.println("Exception while taking screenshot: " + e.getMessage());
        }
    }
}


Phần này kế thừa bài trước đọc properties file á nên là tận dụng cho gọn

Tạo key là "SCREENSHOT_PATH" với giá trị là đường dẫn thư mục cần lưu hình.

Ví dụ:  SCREENSHOT_PATH = reports/screenshots  nghĩa là có 2 thư mục theo tuần tự rồi gắn thêm tên file screenshot vào folder này là xong.

 

2. Record video khi chạy test case

Vụ record này hay nè. Hay hơn cả screenshot vì thằng này giúp mình khi chạy xong đống Test case của project là mang video để đi làm bằng chứng hoặc demo luôn 😁

Thằng Record này dùng nó phải có thư viện hỗ trợ riêng chứ trong SeleniumTestNG không có hỗ trợ hàm sẵn.

An chỉ các bạn có 2 thư viện là Monte MediaATU Test Recorder.

✅ Record Screen với thư viện Monte Media


Nếu dùng Java Application project (không phải Maven/Gradle) thì tải gói thư viện về trước: MonteScreenRecorder.jar

[Selenium Java] Bài 25: Chụp screenshot và record video sau khi run Test Case | Anh Tester

Import nó vào Build Path của project mình

[Selenium Java] Bài 25: Chụp screenshot và record video sau khi run Test Case | Anh Tester

Nếu Maven project thì add thư viện này:

<!-- https://mvnrepository.com/artifact/com.github.stephenc.monte/monte-screen-recorder -->
<dependency>
    <groupId>com.github.stephenc.monte</groupId>
    <artifactId>monte-screen-recorder</artifactId>
    <version>0.7.7.0</version>
</dependency>



Để sử dụng nó thì chúng ta tạo ra 1 class riêng để xây dựng nó ví dụ dùng chung class CaptureHelper của hàm screenshot trên và sau đó chèn các thư viện sau:

import anhtester.com.drivers.DriverManager;

import org.monte.media.Format;
import org.monte.media.Registry;
import org.monte.media.math.Rational;
import org.monte.screenrecorder.ScreenRecorder;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.io.FileHandler;

import java.awt.*;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import static org.monte.media.FormatKeys.*;
import static org.monte.media.VideoFormatKeys.*;

Cái class đó các các bạn phải kế thừa bằng cách extends cái class xây dựng sẵn trong thư viện Monte là ScreenRecorder

 

Tiếp đến là xây dựng 2 hàm startRecordstopRecord như sau:

package anhtester.com.helpers;

import anhtester.com.drivers.DriverManager;
import org.monte.media.Format;
import org.monte.media.Registry;
import org.monte.media.math.Rational;
import org.monte.screenrecorder.ScreenRecorder;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.io.FileHandler;

import java.awt.*;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import static org.monte.media.FormatKeys.*;
import static org.monte.media.VideoFormatKeys.*;

public class CaptureHelper extends ScreenRecorder {

    // Record with Monte Media library
    public static ScreenRecorder screenRecorder;
    public String name;

    //Hàm xây dựng
    public CaptureHelper(GraphicsConfiguration cfg, Rectangle captureArea, Format fileFormat, Format screenFormat, Format mouseFormat, Format audioFormat, File movieFolder, String name) throws IOException, AWTException {
        super(cfg, captureArea, fileFormat, screenFormat, mouseFormat, audioFormat, movieFolder);
        this.name = name;
    }

    //Hàm này bắt buộc để ghi đè custom lại hàm trong thư viên viết sẵn
    @Override
    protected File createMovieFile(Format fileFormat) throws IOException {

        if (!movieFolder.exists()) {
            movieFolder.mkdirs();
        } else if (!movieFolder.isDirectory()) {
            throw new IOException("\"" + movieFolder + "\" is not a directory.");
        }
        SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy HH-mm-ss");
        return new File(movieFolder, name + "-" + dateFormat.format(new Date()) + "." + Registry.getInstance().getExtension(fileFormat));
    }

    // Start record video
    public static void startRecord(String methodName) {
        //Tạo thư mục để lưu file video vào
        File file = new File(SystemsHelper.getCurrentDir() + PropertiesHelper.getValue("RECORDVIDEO_PATH"));
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        int width = screenSize.width;
        int height = screenSize.height;

        Rectangle captureSize = new Rectangle(0, 0, width, height);

        GraphicsConfiguration gc = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration();
        try {
            screenRecorder = new CaptureHelper(gc, captureSize, new Format(MediaTypeKey, MediaType.FILE, MimeTypeKey, MIME_AVI), new Format(MediaTypeKey, MediaType.VIDEO, EncodingKey, ENCODING_AVI_TECHSMITH_SCREEN_CAPTURE, CompressorNameKey, ENCODING_AVI_TECHSMITH_SCREEN_CAPTURE, DepthKey, 24, FrameRateKey, Rational.valueOf(15), QualityKey, 1.0f, KeyFrameIntervalKey, 15 * 60), new Format(MediaTypeKey, MediaType.VIDEO, EncodingKey, "black", FrameRateKey, Rational.valueOf(30)), null, file, methodName);
            screenRecorder.start();
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (AWTException e) {
            throw new RuntimeException(e);
        }
    }

    // Stop record video
    public static void stopRecord() {
        try {
            screenRecorder.stop();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }


    //Tạo format ngày giờ để xíu gắn dô cái name của screenshot hoặc record video không bị trùng tên (không bị ghi đè file)
    private static SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy HH-mm-ss");

    public static void captureScreenshot(String screenshotName) {
        try {
            // Tạo tham chiếu đối tượng của TakesScreenshot với dirver hiện tại
            TakesScreenshot ts = (TakesScreenshot) DriverManager.getDriver();
            // Gọi hàm getScreenshotAs để chuyển hóa hình ảnh về dạng FILE
            File source = ts.getScreenshotAs(OutputType.FILE);
            //Kiểm tra folder nếu không tồn tại thì tạo folder
            File theDir = new File(SystemsHelper.getCurrentDir() + PropertiesHelper.getValue("SCREENSHOT_PATH"));
            if (!theDir.exists()) {
                theDir.mkdirs();
            }
            // Chổ này đặt tên thì truyền biến "screenName" gán cho tên File chụp màn hình
            FileHandler.copy(source, new File(SystemsHelper.getCurrentDir() + PropertiesHelper.getValue("SCREENSHOT_PATH") + File.separator + screenshotName + "_" + dateFormat.format(new Date()) + ".png"));
            System.out.println("Screenshot taken: " + screenshotName);
            System.out.println("Screenshot taken current URL: " + DriverManager.getDriver().getCurrentUrl());
        } catch (Exception e) {
            System.out.println("Exception while taking screenshot: " + e.getMessage());
        }
    }
}


Vậy là đã xong 2 hàm rồi. Lưu ý chung với Screenshot nên nhìn cho kĩ từng đoạn code.

Bây giờ gọi lại 2 hàm đó thì để cái hàm startRecord vào từng chổ @Test để đặt tên cho từng video, và gọi hàm stopRecord vào chổ @AfterMethod ở từng class test case là xong.

package anhtester.com.testcases;

import anhtester.com.common.BaseTest;
import anhtester.com.drivers.DriverManager;
import anhtester.com.helpers.CaptureHelper;
import org.testng.Assert;
import org.testng.ITestResult;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.Test;

import java.lang.reflect.Method;

public class TestScreenshot extends BaseTest {

    @Test
    public void testHomePage1(Method method) {
        CaptureHelper.startRecord(method.getName());

        DriverManager.getDriver().get("https://anhtester.com");
        Assert.assertEquals(DriverManager.getDriver().getTitle(), "Anh Tester Automation Testing");
    }

    @Test
    public void testHomePage2(Method method) {
        CaptureHelper.startRecord(method.getName());

        DriverManager.getDriver().get("https://anhtester.com");
        Assert.assertEquals(DriverManager.getDriver().getTitle(), "Anh Tester Automation Test");
    }

    @AfterMethod
    public void takeScreenshot(ITestResult result) {
        if (ITestResult.FAILURE == result.getStatus()) {
            CaptureHelper.captureScreenshot(result.getName());
        }

        CaptureHelper.stopRecord();
    }
}



Chạy xong nó xuất ra video như này đây



Nếu các bạn muốn record cho cả class thì khai báo cái @BeforeClass và gọi hàm startRecord, sau đó gọi hàm stopRecord vào khai báo @AfterClass . Nhưng lúc bấy giờ không dùng cái reflect Method được thì các bạn có thể điền tên record thủ công thôi.

Thằng Monte này xuất file đuôi là AVI khá sắc nét.

✅ Record Screen với thư viện ATU Test Recorder

Tải cái gói thư viện jar về:  ATUTestRecorder.jar

[Selenium Java] Bài 25: Chụp screenshot và record video sau khi run Test Case | Anh Tester


Bắt đầu dùng thì cũng phải là chèn gói đó vào Build Path của project thôi =))

[Selenium Java] Bài 25: Chụp screenshot và record video sau khi run Test Case | Anh Tester

Cũng tương tự Monte trên thì chúng ta tạo class và chèn thư viện vào

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import atu.testrecorder.ATUTestRecorder;


Dô code luôn nào cho nhanh gọn lẹ

package AnhTester.Record;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import atu.testrecorder.ATUTestRecorder;

public class RecordVideo {

	// ------Record with ATU library-----------
	public static ATUTestRecorder recorder;
	static DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy HH-mm-ss");
	static Date date = new Date();

	public static void startRecordATU(String videoName) throws Exception {
		recorder = new ATUTestRecorder("./test-recordings/", videoName + "-" + dateFormat.format(date), false);
		recorder.start();
	}

	public static void stopRecordATU() throws Exception {
		recorder.stop();
	}
}


Nó đơn giản hơn thằng Monte nữa đúng không. Khác là thằng này xuất file đuôi là MOV nhẹ hơn AVI

Và chúng ta gọi 2 hàm startRecordATUstopRecordATU giống như Monte bên trên là bỏ vào tuần tự @BeforeClass@AfterClass

package AnhTester.Record;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

import io.github.bonigarcia.wdm.WebDriverManager;

public class RecordVideoCallFunction {

	private WebDriver driver;

	@BeforeClass
	public void setupClass() throws Exception {
		WebDriverManager.chromedriver().setup();
		driver = new ChromeDriver();
		driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
		driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
		driver.manage().window().maximize();
		
		// Gọi lại hàm startRecordATU
		RecordVideo.startRecordATU("ManageDocument");
	}

	@Test
	public void homePage() throws Exception {
		driver.get("https://anhtester.com");
		Thread.sleep(2000);
		driver.findElement(By.id("btn-login")).click();
	}
	
	@AfterTest
	public void tearDownTestCase() throws Exception {
		Thread.sleep(2000);
		driver.quit();
	}

	@AfterClass
	public void tearDownClass() throws Exception {
		// Gọi lại hàm startRecordATU
		RecordVideo.stopRecordATU();
	}
}


Xuất file video đuôi MOV

[Selenium Java] Bài 25: Chụp screenshot và record video sau khi run Test Case | Anh Tester

Và các bạn khi đã nắm từng class rõ rồi của 2 thư viện thì giờ gộp lại chung 1 class luôn cho dễ gọi

package AnhTester.Record;

import java.awt.*;
import java.io.File;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.monte.media.Format;
import org.monte.media.FormatKeys.MediaType;
import org.monte.media.Registry;
import org.monte.media.math.Rational;
import org.monte.screenrecorder.ScreenRecorder;
import static org.monte.media.AudioFormatKeys.*;
import static org.monte.media.VideoFormatKeys.*;

import atu.testrecorder.ATUTestRecorder;

public class RecordVideo extends ScreenRecorder {

	// ------Record with Monte Media library---------
	public static ScreenRecorder screenRecorder;
	public String name;
	
	//Hàm xây dựng
	public RecordVideo(GraphicsConfiguration cfg, Rectangle captureArea, Format fileFormat, Format screenFormat,
			Format mouseFormat, Format audioFormat, File movieFolder, String name) throws IOException, AWTException {
		super(cfg, captureArea, fileFormat, screenFormat, mouseFormat, audioFormat, movieFolder);
		this.name = name;
	}

	//Hàm này bắt buộc để ghi đè custom lại hàm trong thư viên viết sẵn
	@Override
	protected File createMovieFile(Format fileFormat) throws IOException {

		if (!movieFolder.exists()) {
			movieFolder.mkdirs();
		} else if (!movieFolder.isDirectory()) {
			throw new IOException("\"" + movieFolder + "\" is not a directory.");
		}
		SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy HH-mm-ss");
		return new File(movieFolder,
				name + "-" + dateFormat.format(new Date()) + "." + Registry.getInstance().getExtension(fileFormat));
	}

	// Hàm Start record video
	public static void startRecord(String methodName) throws Exception {
		//Tạo thư mục để lưu file video vào
		File file = new File("./test-recordings/");
		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
		int width = screenSize.width;
		int height = screenSize.height;

		Rectangle captureSize = new Rectangle(0, 0, width, height);

		GraphicsConfiguration gc = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice()
				.getDefaultConfiguration();
		screenRecorder = new RecordVideo(gc, captureSize,
				new Format(MediaTypeKey, MediaType.FILE, MimeTypeKey, MIME_AVI),
				new Format(MediaTypeKey, MediaType.VIDEO, EncodingKey, ENCODING_AVI_TECHSMITH_SCREEN_CAPTURE,
						CompressorNameKey, ENCODING_AVI_TECHSMITH_SCREEN_CAPTURE, DepthKey, 24, FrameRateKey,
						Rational.valueOf(15), QualityKey, 1.0f, KeyFrameIntervalKey, 15 * 60),
				new Format(MediaTypeKey, MediaType.VIDEO, EncodingKey, "black", FrameRateKey, Rational.valueOf(30)),
				null, file, methodName);
		screenRecorder.start();
	}

	// Stop record video
	public static void stopRecord() throws Exception {
		screenRecorder.stop();
	}

	
	
	// ------Record with ATU library-----------
	public static ATUTestRecorder recorder;
	static DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy HH-mm-ss");
	static Date date = new Date();

	public static void startRecordATU(String videoName) throws Exception {
		recorder = new ATUTestRecorder("./test-recordings/", videoName + "-" + dateFormat.format(date), false);
		recorder.start();
	}

	public static void stopRecordATU() throws Exception {
		recorder.stop();
	}
}


Khi gọi qua Test Cases dùng thì chỉ cần gọi cặp hàm start()stop() tương ứng thôi.

Vậy là xong rồi.

Teacher

Teacher

Anh Tester

Software Quality Engineer

Đường dẫu khó chân vẫn cần bước đi
Đời dẫu khổ tâm vẫn cần nghĩ thấu

Cộng đồng Automation Testing Việt Nam:

🌱 Telegram Automation Testing:   Cộng đồng Automation Testing
🌱 
Facebook Group Automation: Cộng đồng Automation Testing Việt Nam
🌱 
Facebook Fanpage: Cộng đồng Automation Testing Việt Nam - Selenium
🌱 Telegram
Manual Testing:   Cộng đồng Manual Testing
🌱 
Facebook Group Manual: Cộng đồng Manual Testing Việt Nam

Chia sẻ khóa học lên trang

Bạn có thể đăng khóa học của chính bạn lên trang Anh Tester để kiếm tiền

Danh sách bài học