17
17
import org .openqa .selenium .TakesScreenshot ;
18
18
import plugins .screenshots .ScreenshotPlugin ;
19
19
import plugins .screenshots .ScreenshotPluginEventArgs ;
20
+ import ru .yandex .qatools .ashot .AShot ;
21
+ import ru .yandex .qatools .ashot .shooting .ShootingStrategies ;
20
22
import solutions .bellatrix .android .configuration .AndroidSettings ;
21
23
import solutions .bellatrix .core .configuration .ConfigurationService ;
24
+ import solutions .bellatrix .core .utilities .Log ;
22
25
import solutions .bellatrix .core .utilities .PathNormalizer ;
23
26
27
+ import javax .imageio .ImageIO ;
28
+ import java .awt .image .BufferedImage ;
29
+ import java .io .ByteArrayOutputStream ;
24
30
import java .io .File ;
25
- import java .io .FileWriter ;
26
31
import java .io .IOException ;
27
32
import java .nio .file .Paths ;
33
+ import java .util .Base64 ;
28
34
import java .util .UUID ;
29
35
30
36
public class MobileScreenshotPlugin extends ScreenshotPlugin {
@@ -42,38 +48,44 @@ public String takeScreenshot(String name) {
42
48
var screenshotSaveDir = getOutputFolder ();
43
49
var filename = getUniqueFileName (name );
44
50
45
- var screenshot = ((TakesScreenshot )DriverService .getWrappedAndroidDriver ()).getScreenshotAs (OutputType .BASE64 );
51
+ var screenshot = new AShot ()
52
+ .shootingStrategy (ShootingStrategies .simple ())
53
+ .takeScreenshot (DriverService .getWrappedAndroidDriver ());
46
54
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 );
53
60
} catch (IOException e ) {
54
- e . printStackTrace ( );
61
+ Log . error ( e . toString () );
55
62
}
56
63
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 ;
59
68
}
60
69
61
70
@ Override
62
71
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 );
71
81
} catch (IOException e ) {
72
- e . printStackTrace ( );
82
+ Log . error ( e . toString () );
73
83
}
74
84
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 ;
77
89
}
78
90
79
91
@ Override
@@ -93,4 +105,23 @@ protected String getOutputFolder() {
93
105
protected String getUniqueFileName (String testName ) {
94
106
return testName .concat (UUID .randomUUID ().toString ()).concat (".png" );
95
107
}
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