29
29
import org .junit .jupiter .api .Tag ;
30
30
import org .openqa .selenium .Alert ;
31
31
import org .openqa .selenium .By ;
32
+ import org .openqa .selenium .Capabilities ;
33
+ import org .openqa .selenium .ImmutableCapabilities ;
32
34
import org .openqa .selenium .JavascriptExecutor ;
33
35
import org .openqa .selenium .WebDriver ;
34
36
import org .openqa .selenium .WebDriverException ;
35
37
import org .openqa .selenium .WebElement ;
38
+ import org .openqa .selenium .remote .RemoteWebDriver ;
36
39
37
40
import java .lang .reflect .InvocationTargetException ;
38
41
import java .lang .reflect .Method ;
@@ -81,7 +84,7 @@ public void afterGet(WebDriver driver, String url) {
81
84
acc .append ("afterGet\n " );
82
85
}
83
86
};
84
- WebDriver decorated = new EventFiringDecorator (listener ).decorate (driver );
87
+ WebDriver decorated = new EventFiringDecorator <> (listener ).decorate (driver );
85
88
86
89
decorated .get ("http://example.com/" );
87
90
@@ -134,7 +137,7 @@ public void afterClick(WebElement element) {
134
137
}
135
138
};
136
139
137
- WebDriver decorated = new EventFiringDecorator (listener ).decorate (driver );
140
+ WebDriver decorated = new EventFiringDecorator <> (listener ).decorate (driver );
138
141
139
142
decorated .findElement (By .id ("test" )).click ();
140
143
@@ -183,7 +186,7 @@ public void afterBack(WebDriver.Navigation navigation) {
183
186
}
184
187
};
185
188
186
- WebDriver decorated = new EventFiringDecorator (listener ).decorate (driver );
189
+ WebDriver decorated = new EventFiringDecorator <> (listener ).decorate (driver );
187
190
188
191
decorated .navigate ().back ();
189
192
@@ -231,7 +234,7 @@ public void afterDismiss(Alert alert) {
231
234
}
232
235
};
233
236
234
- WebDriver decorated = new EventFiringDecorator (listener ).decorate (driver );
237
+ WebDriver decorated = new EventFiringDecorator <> (listener ).decorate (driver );
235
238
236
239
decorated .switchTo ().alert ().dismiss ();
237
240
@@ -273,7 +276,7 @@ public void afterExecuteScript(WebDriver driver, String script, Object[] args, O
273
276
}
274
277
};
275
278
276
- WebDriver decorated = new EventFiringDecorator (listener ).decorate (driver );
279
+ WebDriver decorated = new EventFiringDecorator <> (listener ).decorate (driver );
277
280
278
281
((JavascriptExecutor ) decorated ).executeScript ("sum" , "2" , "2" );
279
282
@@ -297,7 +300,7 @@ public void beforeAnyCall(Object target, Method method, Object[] args) {
297
300
}
298
301
};
299
302
300
- WebDriver decorated = new EventFiringDecorator (listener ).decorate (driver );
303
+ WebDriver decorated = new EventFiringDecorator <> (listener ).decorate (driver );
301
304
302
305
assertThatNoException ().isThrownBy (decorated ::getWindowHandle );
303
306
}
@@ -327,7 +330,7 @@ public void beforeGetWindowHandle(WebDriver driver) {
327
330
}
328
331
};
329
332
330
- WebDriver decorated = new EventFiringDecorator (listener ).decorate (driver );
333
+ WebDriver decorated = new EventFiringDecorator <> (listener ).decorate (driver );
331
334
332
335
assertThatNoException ().isThrownBy (decorated ::getWindowHandle );
333
336
}
@@ -342,7 +345,7 @@ public void afterAnyCall(Object target, Method method, Object[] args, Object res
342
345
}
343
346
};
344
347
345
- WebDriver decorated = new EventFiringDecorator (listener ).decorate (driver );
348
+ WebDriver decorated = new EventFiringDecorator <> (listener ).decorate (driver );
346
349
347
350
assertThatNoException ().isThrownBy (decorated ::getWindowHandle );
348
351
}
@@ -358,7 +361,7 @@ public void afterAnyWebDriverCall(WebDriver driver, Method method, Object[] args
358
361
}
359
362
};
360
363
361
- WebDriver decorated = new EventFiringDecorator (listener ).decorate (driver );
364
+ WebDriver decorated = new EventFiringDecorator <> (listener ).decorate (driver );
362
365
363
366
assertThatNoException ().isThrownBy (decorated ::getWindowHandle );
364
367
}
@@ -373,7 +376,7 @@ public void afterGetWindowHandle(WebDriver driver, String result) {
373
376
}
374
377
};
375
378
376
- WebDriver decorated = new EventFiringDecorator (listener ).decorate (driver );
379
+ WebDriver decorated = new EventFiringDecorator <> (listener ).decorate (driver );
377
380
378
381
assertThatNoException ().isThrownBy (decorated ::getWindowHandle );
379
382
}
@@ -389,7 +392,46 @@ public void onError(Object target, Method method, Object[] args, InvocationTarge
389
392
}
390
393
};
391
394
392
- WebDriver decorated = new EventFiringDecorator (listener ).decorate (driver );
395
+ WebDriver decorated = new EventFiringDecorator <>(listener ).decorate (driver );
396
+
397
+ assertThatExceptionOfType (WebDriverException .class )
398
+ .isThrownBy (decorated ::getWindowHandle );
399
+ }
400
+
401
+ @ Test
402
+ void shouldBeAbleToDecorateAChildClassOfWebDriver () {
403
+ RemoteWebDriver driver = mock (RemoteWebDriver .class );
404
+ when (driver .getCapabilities ()).thenReturn (new ImmutableCapabilities ("browserName" , "firefox" ));
405
+
406
+ WebDriverListener listener = new WebDriverListener () {
407
+ @ Override
408
+ public void onError (Object target , Method method , Object [] args , InvocationTargetException e ) {
409
+ throw new RuntimeException ("listener" );
410
+ }
411
+ };
412
+
413
+ RemoteWebDriver decorated =
414
+ new EventFiringDecorator <>(RemoteWebDriver .class , listener ).decorate (driver );
415
+
416
+ Capabilities caps = decorated .getCapabilities ();
417
+
418
+ assertThat (caps .getBrowserName ()).isEqualTo ("firefox" );
419
+ }
420
+
421
+ @ Test
422
+ void shouldBeAbleToCallDecoratedMethodForDecoratedChildClass () {
423
+ RemoteWebDriver driver = mock (RemoteWebDriver .class );
424
+ when (driver .getWindowHandle ()).thenThrow (new WebDriverException ());
425
+
426
+ WebDriverListener listener = new WebDriverListener () {
427
+ @ Override
428
+ public void onError (Object target , Method method , Object [] args , InvocationTargetException e ) {
429
+ throw new RuntimeException ("listener" );
430
+ }
431
+ };
432
+
433
+ RemoteWebDriver decorated =
434
+ new EventFiringDecorator <>(RemoteWebDriver .class , listener ).decorate (driver );
393
435
394
436
assertThatExceptionOfType (WebDriverException .class )
395
437
.isThrownBy (decorated ::getWindowHandle );
0 commit comments