@@ -23,7 +23,7 @@ public class TestdroidImageRecognition extends AbstractAppiumTest {
23
23
24
24
AkazeImageFinder imageFinder = new AkazeImageFinder ();
25
25
26
- private String queryimageFolder = "" ;
26
+ private String queryImageSubFolder = "" ;
27
27
public boolean found = false ;
28
28
29
29
@@ -33,7 +33,7 @@ public void setQueryImageFolder() {
33
33
Dimension size = driver .manage ().window ().getSize ();
34
34
log ("Screen size: " + size .toString ());
35
35
if ((size .getHeight () <= 500 ) || (size .getWidth () <= 500 )) {
36
- queryimageFolder = "low_res/" ;
36
+ queryImageSubFolder = "low_res/" ;
37
37
}
38
38
}
39
39
@@ -43,83 +43,36 @@ public void setQueryImageFolder() {
43
43
* FINDING AN IMAGE ON SCREEN
44
44
* ======================================================================================
45
45
*/
46
+
46
47
47
-
48
+ public Point [] findImageOnScreen (String image ) throws Exception {
49
+ ImageRecognitionSettingsDTO defaultSettings = new ImageRecognitionSettingsDTO ();
50
+ return findImageOnScreen (image , defaultSettings );
51
+ }
52
+
48
53
public Point [] findImageOnScreen (String image , ImageRecognitionSettingsDTO settings ) throws Exception {
49
54
ImageSearchDTO dto = findImageOnScreen2 (image , settings );
50
55
return dto .getImageRectangle ();
51
56
}
52
57
53
- public ImageSearchDTO findImageOnScreen2 (String image , ImageRecognitionSettingsDTO settings ) throws Exception {
54
- ImageSearchDTO foundImage = findImageLoop ( image , settings , getScreenSizeADB ());
55
- if ( foundImage . isFound () && settings . isCrop ()) {
56
- cropImage ( foundImage );
57
- }
58
+ private ImageSearchDTO findImageOnScreen2 (String imageName , ImageRecognitionSettingsDTO settings ) throws Exception {
59
+ // queryImageFolder is "", unless set by setQueryImageFolder()
60
+ String queryImageFolder = "queryimages/" + queryImageSubFolder ;
61
+ String screenshotsFolder = "target/reports/screenshots/" ; //TODO Severi remove this
62
+ ImageSearchDTO foundImage = ImageRecognition . findImageOnScreen ( imageName , queryImageFolder , screenshotsFolder , settings , getScreenSizeADB (), platformName );
58
63
return foundImage ;
59
64
}
60
65
66
+ public void waitForImageToDisappearFromScreen (String image ) throws Exception {
67
+ String queryImageFolder = "queryimages/" + queryImageSubFolder ; //TODO Severi remove this
68
+ String screenshotsFolder = "target/reports/screenshots/" ; //TODO Severi remove this
69
+ Dimension screenSize = getScreenSizeADB (); //TODO Severi remove this
70
+ boolean hasImageDisappeared = ImageRecognition .hasImageDissappearedFromScreenBeforeTimeout (image , queryImageFolder , screenshotsFolder , screenSize , platformName );
71
+ assert (hasImageDisappeared );
72
+ }
61
73
62
- private void cropImage (ImageSearchDTO foundImage ) {
63
- Point [] imgRect = foundImage .getImageRectangle ();
64
- Point top_left = imgRect [0 ];
65
- Point top_right = imgRect [1 ];
66
- Point bottom_left = imgRect [2 ];
67
- Point center = imgRect [4 ];
68
- imageFinder .cropImage (foundImage .getScreenshotFile (), top_left .x , top_left .y , top_right .x - top_left .x , bottom_left .y - top_left .y );
69
- }
70
-
71
- private ImageSearchDTO findImageLoop (String image , ImageRecognitionSettingsDTO settings , Dimension screenSize ) throws InterruptedException , IOException , Exception {
72
- long start_time = System .nanoTime ();
73
- ImageSearchDTO foundImageDto = new ImageSearchDTO ();
74
- for (int i = 0 ; i < settings .getRetries (); i ++) {
75
- // queryImageFolder is "", unless set by setQueryImageFolder()
76
- String queryImageFile = "queryimages/" + queryimageFolder + image ;
77
- String screenshotFile = takeScreenshot (image + "_screenshot" );
78
- Point [] imgRect = ImageRecognition .findImage (queryImageFile , screenshotFile , settings , platformName , screenSize );
79
- if (imgRect !=null ){
80
- long end_time = System .nanoTime ();
81
- int difference = (int ) ((end_time - start_time ) / 1e6 / 1000 );
82
- log ("==> Find image took: " + difference + " secs." );
83
- foundImageDto .setImageRectangle (imgRect );
84
- foundImageDto .setScreenshotFile (screenshotFile );
85
- return foundImageDto ;
86
- }
87
- retryWait (settings );
88
- }
89
- log ("==> Image not found" );
90
- return foundImageDto ;
91
- }
92
-
93
- private void retryWait (ImageRecognitionSettingsDTO settings ) throws InterruptedException {
94
- if (settings .getRetryWaitTime () > 0 ) {
95
- log ("retryWait given, sleeping " + settings .getRetryWaitTime () + " seconds." );
96
- sleep (settings .getRetryWaitTime ());
97
- }
98
- }
99
74
100
- public Point [] findImageOnScreen (String image ) throws Exception {
101
- ImageRecognitionSettingsDTO defaultSettings = new ImageRecognitionSettingsDTO ();
102
- return findImageOnScreen (image , defaultSettings );
103
- }
104
75
105
- public boolean waitForImageToDisappearFromScreen (String image ) throws Exception {
106
- long start = System .nanoTime ();
107
- log ("==> Trying to find image: " + image );
108
- int retry_counter =0 ;
109
- String queryImageFile = "queryimages/" + queryimageFolder + image ;
110
- Dimension screenSize = getScreenSizeADB ();
111
-
112
- while (((System .nanoTime () - start ) / 1e6 / 1000 < 300 )) {
113
- String screenShotFile = takeScreenshot (image + "_screenshot_" +retry_counter );
114
- if ((ImageRecognition .findImage (queryImageFile , screenShotFile , platformName , screenSize )) == null ) {
115
- log ("Image has successfully disappeared from screen." );
116
- return true ;
117
- }
118
- sleep (3 );
119
- }
120
- logger .warn ("Image did not disappear from screen" );
121
- return false ;
122
- }
123
76
124
77
125
78
/**
@@ -225,65 +178,6 @@ public String grabTextFromImage(String image) throws Exception {
225
178
}
226
179
227
180
228
- public String takeScreenshot (String screenshotName ) throws IOException , InterruptedException {
229
- if (idevicescreenshotExists ) {
230
- // Keep Appium session alive between multiple non-driver screenshots
231
- driver .manage ().window ().getSize ();
232
- }
233
-
234
- long start_time = System .nanoTime ();
235
- String screenshotFile = screenshotsFolder + screenshotName + ".png" ;
236
- String fullFileName = System .getProperty ("user.dir" ) + "/" + screenshotFile ;
237
-
238
- if (platformName .equalsIgnoreCase ("iOS" )) {
239
- takeIDeviceScreenshot (fullFileName );
240
- } else {
241
- takeAndroidScreenshot (fullFileName );
242
- }
243
- long end_time = System .nanoTime ();
244
- int difference = (int ) ((end_time - start_time ) / 1e6 / 1000 );
245
- logger .info ("==> Taking a screenshot took " + difference + " secs." );
246
- return screenshotFile ;
247
- }
248
-
249
- private void takeAndroidScreenshot (String fullFileName ) throws IOException , InterruptedException {
250
- log ("Taking android screenshot..." );
251
- log (fullFileName );
252
- String [] cmd = new String []{"screenshot2" , "-d" , fullFileName };
253
- Process p = Runtime .getRuntime ().exec (cmd );
254
- BufferedReader in = new BufferedReader (new InputStreamReader (p .getInputStream ()));
255
- String line ;
256
- while ((line = in .readLine ()) != null )
257
- log (line );
258
-
259
- int exitVal = p .waitFor ();
260
- if (exitVal != 0 ) {
261
- log ("screenshot2 process exited with value: " + exitVal );
262
- }
263
- }
264
-
265
-
266
-
267
-
268
- private static void takeIDeviceScreenshot (String fullFileName ) throws IOException , InterruptedException {
269
- String [] cmd = new String []{"idevicescreenshot" , "-u" , udid , fullFileName };
270
- Process p = Runtime .getRuntime ().exec (cmd );
271
- BufferedReader in = new BufferedReader (new InputStreamReader (p .getInputStream ()));
272
- String line ;
273
- while ((line = in .readLine ()) != null )
274
- log (line );
275
-
276
- int exitVal = p .waitFor ();
277
- if (exitVal != 0 ) {
278
- log ("idevicescreenshot process exited with value: " + exitVal );
279
- }
280
- cmd = new String []{"sips" , "-s" , "format" , "png" , fullFileName , "--out" , fullFileName };
281
- p = Runtime .getRuntime ().exec (cmd );
282
- exitVal = p .waitFor ();
283
- if (exitVal != 0 ) {
284
- log ("sips process exited with value: " + exitVal );
285
- }
286
- }
287
181
288
182
289
183
0 commit comments