Skip to content

Commit 7b1b596

Browse files
authored
feat(java): ✨ added new screenshot method to get content (#914)
1 parent 743b364 commit 7b1b596

File tree

9 files changed

+292
-239
lines changed

9 files changed

+292
-239
lines changed

.release-it.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
"release": true,
2020
"tokenRef": "PUSH_TOKEN",
2121
"assets": ["core-java/target/*.jar"],
22+
"discussionCategoryName": "Announcements",
2223
"comments": {
2324
"submit": true,
2425
"issue": ":rocket: _This issue has been resolved in v${version}. See [${releaseName}](${releaseUrl}) for release notes._",

core-java/src/main/java/io/github/boykaframework/actions/drivers/WindowActions.java

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import static org.apache.commons.io.FileUtils.copyFile;
3131
import static org.apache.commons.lang3.StringUtils.EMPTY;
3232
import static org.apache.logging.log4j.LogManager.getLogger;
33+
import static org.openqa.selenium.OutputType.BASE64;
3334
import static org.openqa.selenium.OutputType.FILE;
3435

3536
import java.io.File;
@@ -41,6 +42,7 @@
4142
import com.google.common.truth.StringSubject;
4243
import io.github.boykaframework.actions.interfaces.drivers.IWindowActions;
4344
import io.github.boykaframework.actions.interfaces.listeners.drivers.IWindowActionsListener;
45+
import io.github.boykaframework.config.ui.UISetting;
4446
import org.apache.logging.log4j.Logger;
4547
import org.openqa.selenium.Dimension;
4648
import org.openqa.selenium.TakesScreenshot;
@@ -67,9 +69,12 @@ public static IWindowActions onWindow () {
6769
}
6870

6971
private final IWindowActionsListener listener;
72+
private final UISetting setting;
7073

7174
private WindowActions () {
7275
this.listener = getSession ().getListener (WINDOW_ACTION);
76+
this.setting = getSession ().getSetting ()
77+
.getUi ();
7378
}
7479

7580
@Override
@@ -103,6 +108,22 @@ public void fullScreen () {
103108
LOGGER.traceExit ();
104109
}
105110

111+
@Override
112+
public String getScreenshot () {
113+
LOGGER.traceEntry ();
114+
LOGGER.info ("Getting the screenshot content...");
115+
final var screenshotSetting = this.setting.getScreenshot ();
116+
if (!screenshotSetting.isEnabled ()) {
117+
return EMPTY;
118+
}
119+
ofNullable (this.listener).ifPresent (IWindowActionsListener::onGetScreenshot);
120+
final var content = getDriverAttribute (
121+
driver -> ((TakesScreenshot) requireNonNull (driver, DRIVER_CANNOT_BE_NULL)).getScreenshotAs (BASE64),
122+
EMPTY);
123+
LOGGER.traceExit ();
124+
return content;
125+
}
126+
106127
@Override
107128
public String getTitle () {
108129
LOGGER.traceEntry ();
@@ -176,15 +197,13 @@ public void switchToNew (final WindowType type) {
176197
@Override
177198
public void takeScreenshot () {
178199
LOGGER.info ("Taking the screenshot...");
179-
final var setting = getSession ().getSetting ()
180-
.getUi ()
181-
.getScreenshot ();
182-
if (!setting.isEnabled ()) {
200+
final var screenshotSetting = this.setting.getScreenshot ();
201+
if (!screenshotSetting.isEnabled ()) {
183202
return;
184203
}
185-
final var path = setting.getPath ();
186-
final var prefix = setting.getPrefix ();
187-
final var extension = setting.getExtension ();
204+
final var path = screenshotSetting.getPath ();
205+
final var prefix = screenshotSetting.getPrefix ();
206+
final var extension = screenshotSetting.getExtension ();
188207
final var date = new SimpleDateFormat ("yyyyMMdd-HHmmss");
189208
final var timeStamp = date.format (getInstance ().getTime ());
190209
final var fileName = "%s/%s-%s.%s";
@@ -195,10 +214,8 @@ public void takeScreenshot () {
195214
public void takeScreenshot (final String fileName) {
196215
LOGGER.traceEntry ();
197216
LOGGER.info ("Taking screenshot and saving at [{}]...", fileName);
198-
final var setting = getSession ().getSetting ()
199-
.getUi ()
200-
.getScreenshot ();
201-
if (!setting.isEnabled ()) {
217+
final var screenshotSetting = this.setting.getScreenshot ();
218+
if (!screenshotSetting.isEnabled ()) {
202219
return;
203220
}
204221
performDriverAction (driver -> {

core-java/src/main/java/io/github/boykaframework/actions/interfaces/drivers/IWindowActions.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,13 @@ public interface IWindowActions {
4646
*/
4747
void fullScreen ();
4848

49+
/**
50+
* Gets the base 64 content of the screenshot.
51+
*
52+
* @return Image content in Base64 encoded string
53+
*/
54+
String getScreenshot ();
55+
4956
/**
5057
* Title of the browser.
5158
*

core-java/src/main/java/io/github/boykaframework/actions/interfaces/listeners/drivers/IWindowActionsListener.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,13 @@ default void onFullScreen () {
4747
// not implemented.
4848
}
4949

50+
/**
51+
* Handles Get screenshot method.
52+
*/
53+
default void onGetScreenshot () {
54+
// not implemented.
55+
}
56+
5057
/**
5158
* Handles get title method.
5259
*/

core-java/src/test/java/io/github/boykaframework/testng/ui/jiomeet/JioMeetTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import static io.github.boykaframework.testng.ui.jiomeet.pages.SignInPage.signInPage;
3333
import static io.github.boykaframework.testng.ui.jiomeet.pages.StartMeetingPage.startMeetingPage;
3434
import static org.openqa.selenium.support.ui.ExpectedConditions.invisibilityOfElementLocated;
35+
import static org.testng.Reporter.log;
3536

3637
import io.github.boykaframework.enums.PlatformType;
3738
import org.testng.ITestResult;
@@ -49,6 +50,7 @@ public class JioMeetTest {
4950

5051
@AfterMethod
5152
public void afterMethod (final ITestResult result) {
53+
log (onWindow ().getScreenshot ());
5254
if (!result.isSuccess ()) {
5355
onWindow ().takeScreenshot ();
5456
}

package.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,9 @@
3737
"@release-it-plugins/lerna-changelog": "^7.0.0",
3838
"@stylistic/eslint-plugin-js": "^2.9.0",
3939
"@stylistic/eslint-plugin-ts": "^2.9.0",
40-
"@types/node": "^22.7.5",
41-
"@typescript-eslint/eslint-plugin": "^8.8.1",
42-
"@typescript-eslint/parser": "^8.8.1",
40+
"@types/node": "^22.7.6",
41+
"@typescript-eslint/eslint-plugin": "^8.9.0",
42+
"@typescript-eslint/parser": "^8.9.0",
4343
"commitlint": "^19.5.0",
4444
"eslint": "^9.12.0",
4545
"eslint-config-google": "^0.14.0",
@@ -56,14 +56,14 @@
5656
"lerna-version": "^6.6.2",
5757
"lint-staged": "^15.2.10",
5858
"lodash": "^4.17.21",
59-
"nx": "^20.0.0",
59+
"nx": "^20.0.1",
6060
"prettier": "^3.3.3",
6161
"react": "^18.3.1",
6262
"react-dom": "^18.3.1",
63-
"release-it": "^17.8.2",
63+
"release-it": "^17.10.0",
6464
"ts-node": "^10.9.2",
6565
"typescript": "^5.6.3",
66-
"typescript-eslint": "^8.8.1"
66+
"typescript-eslint": "^8.9.0"
6767
},
6868
"scripts": {
6969
"preinstall": "npx only-allow pnpm",

0 commit comments

Comments
 (0)