NỘI DUNG BÀI HỌC
✅ 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 Selenium và TestNG không có hỗ trợ hàm sẵn.
An chỉ các bạn có 2 thư viện là Monte Media và ATU 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
Import nó vào Build Path của project mình
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 startRecord và stopRecord 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
Bắt đầu dùng thì cũng phải là chèn gói đó vào Build Path của project thôi =))
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 startRecordATU và stopRecordATU giống như Monte bên trên là bỏ vào tuần tự @BeforeClass và @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
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() và stop() tương ứng thôi.
Vậy là xong rồi.