43
43
import static org .openqa .selenium .testing .TestUtilities .isOldIe ;
44
44
45
45
import org .junit .Test ;
46
+ import org .openqa .selenium .support .ui .WebDriverWait ;
46
47
import org .openqa .selenium .testing .Ignore ;
47
48
import org .openqa .selenium .testing .JUnit4TestBase ;
48
49
import org .openqa .selenium .testing .NotYetImplemented ;
49
50
import org .openqa .selenium .testing .TestUtilities ;
50
51
import org .openqa .selenium .testing .drivers .SauceDriver ;
52
+ import org .openqa .selenium .testing .drivers .WebDriverBuilder ;
51
53
52
54
import java .io .File ;
53
55
import java .io .IOException ;
@@ -59,45 +61,65 @@ public class CorrectEventFiringTest extends JUnit4TestBase {
59
61
public void testShouldFireFocusEventWhenClicking () {
60
62
driver .get (pages .javascriptPage );
61
63
62
- clickOnElementWhichRecordsEvents ();
64
+ clickOnElementWhichRecordsEvents (driver );
63
65
64
- assertEventFired ("focus" );
66
+ assertEventFired ("focus" , driver );
67
+ }
68
+
69
+ @ Test
70
+ @ Ignore (value = MARIONETTE , issue = "https://github.com/mozilla/geckodriver/issues/906" )
71
+ public void testShouldFireFocusEventInNonTopmostWindow () {
72
+ WebDriver driver2 = new WebDriverBuilder ().get ();
73
+ try {
74
+ // topmost
75
+ driver2 .get (pages .javascriptPage );
76
+ clickOnElementWhichRecordsEvents (driver2 );
77
+ assertEventFired ("focus" , driver2 );
78
+
79
+ // non-topmost
80
+ driver .get (pages .javascriptPage );
81
+ clickOnElementWhichRecordsEvents (driver );
82
+ assertEventFired ("focus" , driver );
83
+
84
+ } finally {
85
+ driver2 .quit ();
86
+ }
65
87
}
66
88
67
89
@ Test
68
90
public void testShouldFireClickEventWhenClicking () {
69
91
driver .get (pages .javascriptPage );
70
92
71
- clickOnElementWhichRecordsEvents ();
93
+ clickOnElementWhichRecordsEvents (driver );
72
94
73
- assertEventFired ("click" );
95
+ assertEventFired ("click" , driver );
74
96
}
75
97
76
98
@ Test
77
99
public void testShouldFireMouseDownEventWhenClicking () {
78
100
driver .get (pages .javascriptPage );
79
101
80
- clickOnElementWhichRecordsEvents ();
102
+ clickOnElementWhichRecordsEvents (driver );
81
103
82
- assertEventFired ("mousedown" );
104
+ assertEventFired ("mousedown" , driver );
83
105
}
84
106
85
107
@ Test
86
108
public void testShouldFireMouseUpEventWhenClicking () {
87
109
driver .get (pages .javascriptPage );
88
110
89
- clickOnElementWhichRecordsEvents ();
111
+ clickOnElementWhichRecordsEvents (driver );
90
112
91
- assertEventFired ("mouseup" );
113
+ assertEventFired ("mouseup" , driver );
92
114
}
93
115
94
116
@ Test
95
117
public void testShouldFireMouseOverEventWhenClicking () {
96
118
driver .get (pages .javascriptPage );
97
119
98
- clickOnElementWhichRecordsEvents ();
120
+ clickOnElementWhichRecordsEvents (driver );
99
121
100
- assertEventFired ("mouseover" );
122
+ assertEventFired ("mouseover" , driver );
101
123
}
102
124
103
125
@ Test
@@ -115,7 +137,7 @@ public void testShouldNotThrowIfEventHandlerThrows() {
115
137
public void testShouldFireEventsInTheRightOrder () {
116
138
driver .get (pages .javascriptPage );
117
139
118
- clickOnElementWhichRecordsEvents ();
140
+ clickOnElementWhichRecordsEvents (driver );
119
141
120
142
String text = driver .findElement (By .id ("result" )).getText ();
121
143
@@ -134,7 +156,7 @@ public void testsShouldIssueMouseDownEvents() {
134
156
driver .get (pages .javascriptPage );
135
157
driver .findElement (By .id ("mousedown" )).click ();
136
158
137
- assertEventFired ("mouse down" );
159
+ assertEventFired ("mouse down" , driver );
138
160
String result = driver .findElement (By .id ("result" )).getText ();
139
161
assertThat (result , equalTo ("mouse down" ));
140
162
}
@@ -254,7 +276,41 @@ public void testSendingKeysToAnotherElementShouldCauseTheBlurEventToFire() {
254
276
element .sendKeys ("foo" );
255
277
WebElement element2 = driver .findElement (By .id ("changeable" ));
256
278
element2 .sendKeys ("bar" );
257
- assertEventFired ("blur" );
279
+ assertEventFired ("blur" , driver );
280
+ }
281
+
282
+ @ Test
283
+ public void testSendingKeysToAnotherElementShouldCauseTheBlurEventToFireInNonTopmostWindow () {
284
+ assumeFalse (browserNeedsFocusOnThisOs (driver ));
285
+
286
+ WebDriver driver2 = new WebDriverBuilder ().get ();
287
+ try {
288
+ // topmost
289
+ driver2 .get (pages .javascriptPage );
290
+ WebElement element = driver2 .findElement (By .id ("theworks" ));
291
+ element .sendKeys ("foo" );
292
+ WebElement element2 = driver2 .findElement (By .id ("changeable" ));
293
+ element2 .sendKeys ("bar" );
294
+ assertEventFired ("blur" , driver2 );
295
+
296
+ // non-topmost
297
+ driver .get (pages .javascriptPage );
298
+ element = driver .findElement (By .id ("theworks" ));
299
+ element .sendKeys ("foo" );
300
+ element2 = driver .findElement (By .id ("changeable" ));
301
+ element2 .sendKeys ("bar" );
302
+ assertEventFired ("blur" , driver );
303
+
304
+ } finally {
305
+ driver2 .quit ();
306
+ }
307
+
308
+ driver .get (pages .javascriptPage );
309
+ WebElement element = driver .findElement (By .id ("theworks" ));
310
+ element .sendKeys ("foo" );
311
+ WebElement element2 = driver .findElement (By .id ("changeable" ));
312
+ element2 .sendKeys ("bar" );
313
+ assertEventFired ("blur" , driver );
258
314
}
259
315
260
316
@ Test
@@ -264,7 +320,7 @@ public void testSendingKeysToAnElementShouldCauseTheFocusEventToFire() {
264
320
driver .get (pages .javascriptPage );
265
321
WebElement element = driver .findElement (By .id ("theworks" ));
266
322
element .sendKeys ("foo" );
267
- assertEventFired ("focus" );
323
+ assertEventFired ("focus" , driver );
268
324
}
269
325
270
326
@ Test
@@ -295,7 +351,7 @@ public void testSendingKeysToAFocusedElementShouldNotBlurThatElement() {
295
351
}
296
352
297
353
element .sendKeys ("a" );
298
- assertEventNotFired ("blur" );
354
+ assertEventNotFired ("blur" , driver );
299
355
}
300
356
301
357
@ Test
@@ -307,40 +363,40 @@ public void testClickingAnUnfocusableChildShouldNotBlurTheParent() {
307
363
// Click on parent, giving it the focus.
308
364
WebElement parent = driver .findElement (By .id ("hideOnBlur" ));
309
365
parent .click ();
310
- assertEventNotFired ("blur" );
366
+ assertEventNotFired ("blur" , driver );
311
367
// Click on child. It is not focusable, so focus should stay on the parent.
312
368
driver .findElement (By .id ("hideOnBlurChild" )).click ();
313
369
assertTrue ("#hideOnBlur should still be displayed after click" ,
314
370
parent .isDisplayed ());
315
- assertEventNotFired ("blur" );
371
+ assertEventNotFired ("blur" , driver );
316
372
// Click elsewhere, and let the element disappear.
317
373
driver .findElement (By .id ("result" )).click ();
318
- assertEventFired ("blur" );
374
+ assertEventFired ("blur" , driver );
319
375
}
320
376
321
377
@ Test
322
378
public void testSubmittingFormFromFormElementShouldFireOnSubmitForThatForm () {
323
379
driver .get (pages .javascriptPage );
324
380
WebElement formElement = driver .findElement (By .id ("submitListeningForm" ));
325
381
formElement .submit ();
326
- assertEventFired ("form-onsubmit" );
382
+ assertEventFired ("form-onsubmit" , driver );
327
383
}
328
384
329
385
@ Test
330
386
public void testSubmittingFormFromFormInputSubmitElementShouldFireOnSubmitForThatForm () {
331
387
driver .get (pages .javascriptPage );
332
388
WebElement submit = driver .findElement (By .id ("submitListeningForm-submit" ));
333
389
submit .submit ();
334
- assertEventFired ("form-onsubmit" );
390
+ assertEventFired ("form-onsubmit" , driver );
335
391
}
336
392
337
393
@ Test
338
394
public void testSubmittingFormFromFormInputTextElementShouldFireOnSubmitForThatFormAndNotClickOnThatInput () {
339
395
driver .get (pages .javascriptPage );
340
396
WebElement submit = driver .findElement (By .id ("submitListeningForm-submit" ));
341
397
submit .submit ();
342
- assertEventFired ("form-onsubmit" );
343
- assertEventNotFired ("text-onclick" );
398
+ assertEventFired ("form-onsubmit" , driver );
399
+ assertEventNotFired ("text-onclick" , driver );
344
400
}
345
401
346
402
@ Test
@@ -462,26 +518,26 @@ public void testClickAnElementThatDisappear() {
462
518
+ "mouseup in under (handled by body)" ));
463
519
}
464
520
465
- private void clickOnElementWhichRecordsEvents () {
521
+ private static void clickOnElementWhichRecordsEvents (WebDriver driver ) {
466
522
driver .findElement (By .id ("plainButton" )).click ();
467
523
}
468
524
469
- private void assertEventFired (String eventName ) {
525
+ private static void assertEventFired (String eventName , WebDriver driver ) {
470
526
WebElement result = driver .findElement (By .id ("result" ));
471
527
472
- String text = wait .until (elementTextToContain (result , eventName ));
528
+ String text = new WebDriverWait ( driver , 10 ) .until (elementTextToContain (result , eventName ));
473
529
boolean conditionMet = text .contains (eventName );
474
530
475
531
assertTrue ("No " + eventName + " fired: " + text , conditionMet );
476
532
}
477
533
478
- private void assertEventNotFired (String eventName ) {
534
+ private static void assertEventNotFired (String eventName , WebDriver driver ) {
479
535
WebElement result = driver .findElement (By .id ("result" ));
480
536
String text = result .getText ();
481
537
assertFalse (eventName + " fired: " + text , text .contains (eventName ));
482
538
}
483
539
484
- private boolean browserNeedsFocusOnThisOs (WebDriver driver ) {
540
+ private static boolean browserNeedsFocusOnThisOs (WebDriver driver ) {
485
541
// No browser yet demands focus on windows
486
542
if (TestUtilities .getEffectivePlatform ().is (Platform .WINDOWS ))
487
543
return false ;
@@ -494,7 +550,7 @@ private boolean browserNeedsFocusOnThisOs(WebDriver driver) {
494
550
return browserName .toLowerCase ().contains ("firefox" );
495
551
}
496
552
497
- private String getBrowserName (WebDriver driver ) {
553
+ private static String getBrowserName (WebDriver driver ) {
498
554
if (driver instanceof HasCapabilities ) {
499
555
return ((HasCapabilities ) driver ).getCapabilities ().getBrowserName ();
500
556
}
0 commit comments