Skip to content

Commit e225022

Browse files
authored
Merge pull request #65 from AutomateThePlanet/mobile-screenshot-plugin-fix
Mobile screenshot plugin fix
2 parents cee53d4 + 0e311c2 commit e225022

File tree

2 files changed

+55
-24
lines changed

2 files changed

+55
-24
lines changed

bellatrix.android/src/main/java/solutions/bellatrix/android/infrastructure/DriverService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,4 +236,4 @@ public static void close() {
236236

237237
DISPOSED.set(true);
238238
}
239-
}
239+
}

bellatrix.android/src/main/java/solutions/bellatrix/android/infrastructure/MobileScreenshotPlugin.java

Lines changed: 54 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,20 @@
1717
import org.openqa.selenium.TakesScreenshot;
1818
import plugins.screenshots.ScreenshotPlugin;
1919
import plugins.screenshots.ScreenshotPluginEventArgs;
20+
import ru.yandex.qatools.ashot.AShot;
21+
import ru.yandex.qatools.ashot.shooting.ShootingStrategies;
2022
import solutions.bellatrix.android.configuration.AndroidSettings;
2123
import solutions.bellatrix.core.configuration.ConfigurationService;
24+
import solutions.bellatrix.core.utilities.Log;
2225
import solutions.bellatrix.core.utilities.PathNormalizer;
2326

27+
import javax.imageio.ImageIO;
28+
import java.awt.image.BufferedImage;
29+
import java.io.ByteArrayOutputStream;
2430
import java.io.File;
25-
import java.io.FileWriter;
2631
import java.io.IOException;
2732
import java.nio.file.Paths;
33+
import java.util.Base64;
2834
import java.util.UUID;
2935

3036
public class MobileScreenshotPlugin extends ScreenshotPlugin {
@@ -42,38 +48,44 @@ public String takeScreenshot(String name) {
4248
var screenshotSaveDir = getOutputFolder();
4349
var filename = getUniqueFileName(name);
4450

45-
var screenshot = ((TakesScreenshot)DriverService.getWrappedAndroidDriver()).getScreenshotAs(OutputType.BASE64);
51+
var screenshot = new AShot()
52+
.shootingStrategy(ShootingStrategies.simple())
53+
.takeScreenshot(DriverService.getWrappedAndroidDriver());
4654

47-
var path = Paths.get(screenshotSaveDir, filename) + ".png";
48-
49-
var file = new File(path);
50-
51-
try (FileWriter writer = new FileWriter(file)) {
52-
writer.write(screenshot);
55+
var path = Paths.get(screenshotSaveDir, filename).toString();
56+
var destFile = new File(path);
57+
Log.info("Saving screenshot with path: " + destFile);
58+
try {
59+
ImageIO.write(screenshot.getImage(), "png", destFile);
5360
} catch (IOException e) {
54-
e.printStackTrace();
61+
Log.error(e.toString());
5562
}
5663

57-
SCREENSHOT_GENERATED.broadcast(new ScreenshotPluginEventArgs(path.toString(), filename, screenshot));
58-
return screenshot;
64+
var base64image = bufferedImageToBase64(screenshot.getImage());
65+
66+
SCREENSHOT_GENERATED.broadcast(new ScreenshotPluginEventArgs(path.toString(), filename, base64image));
67+
return base64image;
5968
}
6069

6170
@Override
6271
public String takeScreenshot(String screenshotSaveDir, String filename) {
63-
var screenshot = ((TakesScreenshot)DriverService.getWrappedAndroidDriver()).getScreenshotAs(OutputType.BASE64);
64-
65-
var path = Paths.get(screenshotSaveDir, filename) + ".png";
66-
67-
var file = new File(path);
68-
69-
try (FileWriter writer = new FileWriter(file)) {
70-
writer.write(screenshot);
72+
var screenshot = new AShot()
73+
.shootingStrategy(ShootingStrategies.simple())
74+
.takeScreenshot(DriverService.getWrappedAndroidDriver());
75+
76+
var path = Paths.get(screenshotSaveDir, filename).toString();
77+
var destFile = new File(path);
78+
Log.info("Saving screenshot with path: " + destFile);
79+
try {
80+
ImageIO.write(screenshot.getImage(), "png", destFile);
7181
} catch (IOException e) {
72-
e.printStackTrace();
82+
Log.error(e.toString());
7383
}
7484

75-
SCREENSHOT_GENERATED.broadcast(new ScreenshotPluginEventArgs(path.toString(), filename, screenshot));
76-
return screenshot;
85+
var base64image = bufferedImageToBase64(screenshot.getImage());
86+
87+
SCREENSHOT_GENERATED.broadcast(new ScreenshotPluginEventArgs(path.toString(), filename, base64image));
88+
return base64image;
7789
}
7890

7991
@Override
@@ -93,4 +105,23 @@ protected String getOutputFolder() {
93105
protected String getUniqueFileName(String testName) {
94106
return testName.concat(UUID.randomUUID().toString()).concat(".png");
95107
}
96-
}
108+
109+
private static String bufferedImageToBase64(BufferedImage image) {
110+
String base64String = null;
111+
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
112+
try {
113+
ImageIO.write(image, "png", outputStream);
114+
byte[] imageBytes = outputStream.toByteArray();
115+
base64String = Base64.getEncoder().encodeToString(imageBytes);
116+
} catch (IOException e) {
117+
e.printStackTrace();
118+
} finally {
119+
try {
120+
outputStream.close();
121+
} catch (IOException e) {
122+
e.printStackTrace();
123+
}
124+
}
125+
return base64String;
126+
}
127+
}

0 commit comments

Comments
 (0)