Skip to content

Commit f5ac40d

Browse files
committed
Optimize code and upgrade playwright
1 parent 12d2fcb commit f5ac40d

File tree

18 files changed

+175
-80
lines changed

18 files changed

+175
-80
lines changed

pom.xml

+13-10
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,23 @@
66

77
<groupId>com.anhtester</groupId>
88
<artifactId>PlaywrightJava</artifactId>
9-
<version>1.45.0</version>
9+
<version>1.48.0</version>
1010

1111
<properties>
1212
<maven.compiler.source>17</maven.compiler.source>
1313
<maven.compiler.target>17</maven.compiler.target>
1414
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
15+
16+
<log4j.version>2.24.1</log4j.version>
17+
<slf4j.version>2.0.16</slf4j.version>
1518
</properties>
1619

1720
<dependencies>
1821
<!-- https://mvnrepository.com/artifact/com.microsoft.playwright/playwright -->
1922
<dependency>
2023
<groupId>com.microsoft.playwright</groupId>
2124
<artifactId>playwright</artifactId>
22-
<version>1.45.0</version>
25+
<version>1.48.0</version>
2326
</dependency>
2427

2528
<!-- https://mvnrepository.com/artifact/org.testng/testng -->
@@ -33,14 +36,14 @@
3336
<dependency>
3437
<groupId>org.slf4j</groupId>
3538
<artifactId>slf4j-api</artifactId>
36-
<version>2.0.13</version>
39+
<version>${slf4j.version}</version>
3740
</dependency>
3841

3942
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
4043
<dependency>
4144
<groupId>org.slf4j</groupId>
4245
<artifactId>slf4j-simple</artifactId>
43-
<version>2.0.13</version>
46+
<version>${slf4j.version}</version>
4447
</dependency>
4548

4649
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
@@ -61,7 +64,7 @@
6164
<dependency>
6265
<groupId>commons-io</groupId>
6366
<artifactId>commons-io</artifactId>
64-
<version>2.16.1</version>
67+
<version>2.17.0</version>
6568
</dependency>
6669

6770
<!-- https://mvnrepository.com/artifact/com.github.stephenc.monte/monte-screen-recorder -->
@@ -75,14 +78,14 @@
7578
<dependency>
7679
<groupId>org.apache.logging.log4j</groupId>
7780
<artifactId>log4j-core</artifactId>
78-
<version>2.23.1</version>
81+
<version>${log4j.version}</version>
7982
</dependency>
8083

8184
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
8285
<dependency>
8386
<groupId>org.apache.logging.log4j</groupId>
8487
<artifactId>log4j-api</artifactId>
85-
<version>2.23.1</version>
88+
<version>${log4j.version}</version>
8689
</dependency>
8790

8891
<!-- https://mvnrepository.com/artifact/com.aventstack/extentreports -->
@@ -96,14 +99,14 @@
9699
<dependency>
97100
<groupId>io.qameta.allure</groupId>
98101
<artifactId>allure-testng</artifactId>
99-
<version>2.28.0</version>
102+
<version>2.29.0</version>
100103
</dependency>
101104

102105
<!-- https://mvnrepository.com/artifact/io.qameta.allure/allure-attachments -->
103106
<dependency>
104107
<groupId>io.qameta.allure</groupId>
105108
<artifactId>allure-attachments</artifactId>
106-
<version>2.28.0</version>
109+
<version>2.29.0</version>
107110
</dependency>
108111

109112
<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
@@ -125,7 +128,7 @@
125128
<dependency>
126129
<groupId>com.google.guava</groupId>
127130
<artifactId>guava</artifactId>
128-
<version>33.2.1-jre</version>
131+
<version>33.3.1-jre</version>
129132
</dependency>
130133

131134
</dependencies>

src/main/java/com/anhtester/constants/AppConfig.java

+2
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,6 @@ public class AppConfig {
1212
public static boolean SCREENSHOT_FAIL = Boolean.parseBoolean(PropertiesHelper.getValue("SCREENSHOT_FAIL"));
1313
public static boolean SCREENSHOT_PASS = Boolean.parseBoolean(PropertiesHelper.getValue("SCREENSHOT_PASS"));
1414
public static int TIMEOUT_STEP = Integer.parseInt(PropertiesHelper.getValue("TIMEOUT_STEP"));
15+
public static boolean TRACE_VIEWER = Boolean.parseBoolean(PropertiesHelper.getValue("TRACE_VIEWER"));
16+
1517
}

src/main/java/com/anhtester/helpers/SystemHelper.java

+66
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
package com.anhtester.helpers;
22

33
import java.io.File;
4+
import java.text.Normalizer;
5+
import java.text.SimpleDateFormat;
6+
import java.util.ArrayList;
7+
import java.util.Date;
8+
import java.util.Locale;
9+
import java.util.regex.Pattern;
410

511
public class SystemHelper {
612
public static String getCurrentDir() {
@@ -13,4 +19,64 @@ public static String getOperatingSystem() {
1319
// System.out.println("OS name: " + os);
1420
return os;
1521
}
22+
23+
public static String getDateTimeNow() {
24+
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy HH-mm-ss");
25+
return dateFormat.format(new Date());
26+
}
27+
28+
public static String getDateTimeNowAndMakeSlug() {
29+
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy HH-mm-ss");
30+
return makeSlug(dateFormat.format(new Date()));
31+
}
32+
33+
public static String makeSlug(String input) {
34+
final Pattern NONLATIN = Pattern.compile("[^\\w-]");
35+
final Pattern WHITESPACE = Pattern.compile("[\\s]");
36+
37+
if (input == null)
38+
throw new IllegalArgumentException();
39+
40+
String noWhiteSpace = WHITESPACE.matcher(input).replaceAll("_");
41+
String normalized = Normalizer.normalize(noWhiteSpace, Normalizer.Form.NFD);
42+
String slug = NONLATIN.matcher(normalized).replaceAll("");
43+
return slug.toLowerCase(Locale.ENGLISH);
44+
}
45+
46+
/**
47+
* Create folder empty
48+
*
49+
* @param path is the path to create the folder
50+
*/
51+
public static void createFolder(String path) {
52+
// File is a class inside java.io package
53+
File file = new File(path);
54+
55+
String result = null;
56+
57+
int lengthSum = path.length();
58+
int lengthSub = path.substring(0, path.lastIndexOf('/')).length();
59+
60+
result = path.substring(lengthSub, lengthSum);
61+
62+
if (!file.exists()) {
63+
file.mkdir(); // mkdir is used to create folder
64+
System.out.println("Folder " + file.getName() + " created: " + path);
65+
} else {
66+
System.out.println("Folder already created");
67+
}
68+
}
69+
70+
/**
71+
* @param str is value as type is String to be split based on condition
72+
* @param valueSplit the character to split the string into an array of values
73+
* @return array of string values after splitting
74+
*/
75+
public static ArrayList<String> splitString(String str, String valueSplit) {
76+
ArrayList<String> arrayListString = new ArrayList<>();
77+
for (String s : str.split(valueSplit, 0)) {
78+
arrayListString.add(s);
79+
}
80+
return arrayListString;
81+
}
1682
}

src/main/java/com/anhtester/managers/BrowserFactory.java

+14-2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.microsoft.playwright.*;
66

77
import java.awt.*;
8+
import java.nio.file.Paths;
89

910
public class BrowserFactory {
1011
protected static Playwright playwright;
@@ -49,12 +50,23 @@ public static void createBrowser(String browserName) {
4950
// System.out.println("Screen Browser Width (customize): " + AppConfig.VIEWPORT_WIDTH);
5051
// System.out.println("Screen Browser Height (customize): " + AppConfig.VIEWPORT_HEIGHT);
5152

52-
browserContext = PageManager.getBrowser().newContext(new Browser.NewContextOptions().setViewportSize(AppConfig.VIEWPORT_WIDTH, AppConfig.VIEWPORT_HEIGHT).setDeviceScaleFactor(1));
53+
browserContext = PageManager.getBrowser().newContext(new Browser.NewContextOptions()
54+
.setRecordVideoDir(Paths.get("exports/videos/"))
55+
.setViewportSize(AppConfig.VIEWPORT_WIDTH, AppConfig.VIEWPORT_HEIGHT)
56+
.setDeviceScaleFactor(1));
57+
58+
// Start tracing before creating / navigating a page.
59+
if (AppConfig.TRACE_VIEWER == true) {
60+
browserContext.tracing().start(new Tracing.StartOptions()
61+
.setScreenshots(true)
62+
.setSnapshots(true)
63+
.setSources(true));
64+
}
5365

5466
PageManager.setBrowserContext(browserContext);
5567
page = PageManager.getBrowserContext().newPage();
5668

5769
PageManager.setPage(page);
58-
WebKeyword.maximizeBrowserOnWindow();
70+
//WebKeyword.maximizeBrowserOnWindow();
5971
}
6072
}

src/main/java/com/anhtester/managers/PageManager.java

+13-9
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package com.anhtester.managers;
22

3-
import com.microsoft.playwright.Browser;
4-
import com.microsoft.playwright.BrowserContext;
5-
import com.microsoft.playwright.Page;
6-
import com.microsoft.playwright.Playwright;
3+
import com.anhtester.utils.LogUtils;
4+
import com.microsoft.playwright.*;
5+
6+
import java.nio.file.Paths;
77

88
public class PageManager {
99

@@ -48,18 +48,22 @@ public static void closePage() {
4848
if (pageThreadLocal.get() != null) {
4949
pageThreadLocal.get().close();
5050
pageThreadLocal.remove();
51+
LogUtils.info("Closed page.");
5152
}
5253
}
5354

55+
public static void closeTracing(String path) {
56+
// Stop tracing and export it into a zip archive.
57+
browserContextThreadLocal.get().tracing().stop(new Tracing.StopOptions()
58+
.setPath(Paths.get(path)));
59+
LogUtils.info("Closed Tracing.");
60+
}
61+
5462
public static void closeBrowser() {
5563
if (browserThreadLocal.get() != null) {
5664
browserThreadLocal.get().close();
5765
browserThreadLocal.remove();
58-
System.out.println("Closed browser.");
59-
}
60-
if (playwrightThreadLocal.get() != null) {
61-
playwrightThreadLocal.get().close();
62-
playwrightThreadLocal.remove();
66+
LogUtils.info("Closed browser.");
6367
}
6468
}
6569

src/main/java/com/anhtester/reports/ExtentTestManager.java

+3-4
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import java.io.File;
1313
import java.nio.file.Paths;
1414
import java.text.SimpleDateFormat;
15+
import java.util.Base64;
1516
import java.util.Date;
1617
import java.util.HashMap;
1718
import java.util.Map;
@@ -34,8 +35,7 @@ public static void addScreenShot(String message) {
3435
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy HH-mm-ss");
3536
ScreenshotOptions screenshotOptions = new ScreenshotOptions();
3637

37-
String base64Image = "data:image/png;base64,"
38-
+ PageManager.getPage().screenshot(screenshotOptions.setPath(Paths.get(SystemHelper.getCurrentDir() + PropertiesHelper.getValue("SCREENSHOT_PATH") + File.separator + "ExtentReport_" + dateFormat.format(new Date()) + ".png"))).toString();
38+
String base64Image = Base64.getEncoder().encodeToString(PageManager.getPage().screenshot(screenshotOptions.setPath(Paths.get(SystemHelper.getCurrentDir() + PropertiesHelper.getValue("SCREENSHOT_PATH") + File.separator + "ExtentReport_" + dateFormat.format(new Date()) + ".png"))));
3939

4040
getTest().log(Status.FAIL, message,
4141
MediaEntityBuilder.createScreenCaptureFromBase64String(base64Image).build());
@@ -45,8 +45,7 @@ public static void addScreenShot(Status status, String message) {
4545
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy HH-mm-ss");
4646
ScreenshotOptions screenshotOptions = new ScreenshotOptions();
4747

48-
String base64Image = "data:image/png;base64,"
49-
+ PageManager.getPage().screenshot(screenshotOptions.setPath(Paths.get(SystemHelper.getCurrentDir() + PropertiesHelper.getValue("SCREENSHOT_PATH") + File.separator + dateFormat.format(new Date()) + ".png")));
48+
String base64Image = Base64.getEncoder().encodeToString(PageManager.getPage().screenshot(screenshotOptions.setPath(Paths.get(SystemHelper.getCurrentDir() + PropertiesHelper.getValue("SCREENSHOT_PATH") + File.separator + "ExtentReport_" + dateFormat.format(new Date()) + ".png"))));
5049

5150
getTest().log(status, message,
5251
MediaEntityBuilder.createScreenCaptureFromBase64String(base64Image).build());

src/test/java/com/anhtester/common/BaseTest.java

+3-4
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,22 @@
11
package com.anhtester.common;
22

33
import com.anhtester.constants.AppConfig;
4-
import com.anhtester.helpers.PropertiesHelper;
54
import com.anhtester.keywords.WebKeyword;
65
import com.anhtester.listeners.TestListener;
76
import com.anhtester.managers.BrowserFactory;
87
import com.anhtester.managers.PageManager;
9-
import com.anhtester.pom.pages.CommonPage;
8+
import com.anhtester.pom.pages.BasePage;
109
import org.testng.annotations.*;
1110

1211
@Listeners(TestListener.class)
13-
public class BaseTest extends CommonPage {
12+
public class BaseTest extends BasePage {
1413

1514
@BeforeMethod
1615
@Parameters({"BROWSER"})
1716
public void createBrowser(@Optional("chrome") String browserName) {
1817
if (AppConfig.BROWSER != null && !AppConfig.BROWSER.isEmpty()) {
1918
BrowserFactory.createBrowser(AppConfig.BROWSER);
20-
}else {
19+
} else {
2120
BrowserFactory.createBrowser(browserName);
2221
}
2322
}

src/test/java/com/anhtester/listeners/AllureListener.java

+10-8
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.anhtester.helpers.PropertiesHelper;
44
import com.anhtester.helpers.SystemHelper;
5+
import com.anhtester.keywords.WebKeyword;
56
import com.anhtester.managers.PageManager;
67
import com.anhtester.reports.AllureManager;
78
import com.microsoft.playwright.Page.ScreenshotOptions;
@@ -44,14 +45,15 @@ public void afterTestStart(TestResult result) {
4445

4546
@Override
4647
public void beforeTestStop(TestResult result) {
47-
// SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy HH-mm-ss");
48-
//
49-
// ScreenshotOptions screenshotOptions = new ScreenshotOptions();
50-
// if (result.getStatus() == Status.FAILED || result.getStatus() == Status.SKIPPED || result.getStatus() == Status.BROKEN) {
51-
// if (PageManager.getPage() != null) {
52-
// Allure.addAttachment(result.getName() + "_Failed_Screenshot", new ByteArrayInputStream(PageManager.getPage().screenshot(screenshotOptions.setPath(Paths.get(SystemHelper.getCurrentDir() + PropertiesHelper.getValue("SCREENSHOT_PATH") + File.separator + dateFormat.format(new Date()) + ".png")))));
53-
// }
54-
// }
48+
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy HH-mm-ss");
49+
50+
ScreenshotOptions screenshotOptions = new ScreenshotOptions();
51+
if (result.getStatus() == Status.FAILED) {
52+
if (PageManager.getPage() != null) {
53+
WebKeyword.sleep(1);
54+
Allure.addAttachment(result.getName() + "_Failed_Screenshot", new ByteArrayInputStream(PageManager.getPage().screenshot(screenshotOptions.setPath(Paths.get(SystemHelper.getCurrentDir() + PropertiesHelper.getValue("SCREENSHOT_PATH") + File.separator + dateFormat.format(new Date()) + ".png")))));
55+
}
56+
}
5557
}
5658

5759
@Override

0 commit comments

Comments
 (0)