Skip to content

Commit 30ebe6e

Browse files
committed
Adding tests for focus and blur events inspired by #825
1 parent 870a5c0 commit 30ebe6e

File tree

1 file changed

+84
-28
lines changed

1 file changed

+84
-28
lines changed

java/client/test/org/openqa/selenium/CorrectEventFiringTest.java

Lines changed: 84 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,13 @@
4343
import static org.openqa.selenium.testing.TestUtilities.isOldIe;
4444

4545
import org.junit.Test;
46+
import org.openqa.selenium.support.ui.WebDriverWait;
4647
import org.openqa.selenium.testing.Ignore;
4748
import org.openqa.selenium.testing.JUnit4TestBase;
4849
import org.openqa.selenium.testing.NotYetImplemented;
4950
import org.openqa.selenium.testing.TestUtilities;
5051
import org.openqa.selenium.testing.drivers.SauceDriver;
52+
import org.openqa.selenium.testing.drivers.WebDriverBuilder;
5153

5254
import java.io.File;
5355
import java.io.IOException;
@@ -59,45 +61,65 @@ public class CorrectEventFiringTest extends JUnit4TestBase {
5961
public void testShouldFireFocusEventWhenClicking() {
6062
driver.get(pages.javascriptPage);
6163

62-
clickOnElementWhichRecordsEvents();
64+
clickOnElementWhichRecordsEvents(driver);
6365

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+
}
6587
}
6688

6789
@Test
6890
public void testShouldFireClickEventWhenClicking() {
6991
driver.get(pages.javascriptPage);
7092

71-
clickOnElementWhichRecordsEvents();
93+
clickOnElementWhichRecordsEvents(driver);
7294

73-
assertEventFired("click");
95+
assertEventFired("click", driver);
7496
}
7597

7698
@Test
7799
public void testShouldFireMouseDownEventWhenClicking() {
78100
driver.get(pages.javascriptPage);
79101

80-
clickOnElementWhichRecordsEvents();
102+
clickOnElementWhichRecordsEvents(driver);
81103

82-
assertEventFired("mousedown");
104+
assertEventFired("mousedown", driver);
83105
}
84106

85107
@Test
86108
public void testShouldFireMouseUpEventWhenClicking() {
87109
driver.get(pages.javascriptPage);
88110

89-
clickOnElementWhichRecordsEvents();
111+
clickOnElementWhichRecordsEvents(driver);
90112

91-
assertEventFired("mouseup");
113+
assertEventFired("mouseup", driver);
92114
}
93115

94116
@Test
95117
public void testShouldFireMouseOverEventWhenClicking() {
96118
driver.get(pages.javascriptPage);
97119

98-
clickOnElementWhichRecordsEvents();
120+
clickOnElementWhichRecordsEvents(driver);
99121

100-
assertEventFired("mouseover");
122+
assertEventFired("mouseover", driver);
101123
}
102124

103125
@Test
@@ -115,7 +137,7 @@ public void testShouldNotThrowIfEventHandlerThrows() {
115137
public void testShouldFireEventsInTheRightOrder() {
116138
driver.get(pages.javascriptPage);
117139

118-
clickOnElementWhichRecordsEvents();
140+
clickOnElementWhichRecordsEvents(driver);
119141

120142
String text = driver.findElement(By.id("result")).getText();
121143

@@ -134,7 +156,7 @@ public void testsShouldIssueMouseDownEvents() {
134156
driver.get(pages.javascriptPage);
135157
driver.findElement(By.id("mousedown")).click();
136158

137-
assertEventFired("mouse down");
159+
assertEventFired("mouse down", driver);
138160
String result = driver.findElement(By.id("result")).getText();
139161
assertThat(result, equalTo("mouse down"));
140162
}
@@ -254,7 +276,41 @@ public void testSendingKeysToAnotherElementShouldCauseTheBlurEventToFire() {
254276
element.sendKeys("foo");
255277
WebElement element2 = driver.findElement(By.id("changeable"));
256278
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);
258314
}
259315

260316
@Test
@@ -264,7 +320,7 @@ public void testSendingKeysToAnElementShouldCauseTheFocusEventToFire() {
264320
driver.get(pages.javascriptPage);
265321
WebElement element = driver.findElement(By.id("theworks"));
266322
element.sendKeys("foo");
267-
assertEventFired("focus");
323+
assertEventFired("focus", driver);
268324
}
269325

270326
@Test
@@ -295,7 +351,7 @@ public void testSendingKeysToAFocusedElementShouldNotBlurThatElement() {
295351
}
296352

297353
element.sendKeys("a");
298-
assertEventNotFired("blur");
354+
assertEventNotFired("blur", driver);
299355
}
300356

301357
@Test
@@ -307,40 +363,40 @@ public void testClickingAnUnfocusableChildShouldNotBlurTheParent() {
307363
// Click on parent, giving it the focus.
308364
WebElement parent = driver.findElement(By.id("hideOnBlur"));
309365
parent.click();
310-
assertEventNotFired("blur");
366+
assertEventNotFired("blur", driver);
311367
// Click on child. It is not focusable, so focus should stay on the parent.
312368
driver.findElement(By.id("hideOnBlurChild")).click();
313369
assertTrue("#hideOnBlur should still be displayed after click",
314370
parent.isDisplayed());
315-
assertEventNotFired("blur");
371+
assertEventNotFired("blur", driver);
316372
// Click elsewhere, and let the element disappear.
317373
driver.findElement(By.id("result")).click();
318-
assertEventFired("blur");
374+
assertEventFired("blur", driver);
319375
}
320376

321377
@Test
322378
public void testSubmittingFormFromFormElementShouldFireOnSubmitForThatForm() {
323379
driver.get(pages.javascriptPage);
324380
WebElement formElement = driver.findElement(By.id("submitListeningForm"));
325381
formElement.submit();
326-
assertEventFired("form-onsubmit");
382+
assertEventFired("form-onsubmit", driver);
327383
}
328384

329385
@Test
330386
public void testSubmittingFormFromFormInputSubmitElementShouldFireOnSubmitForThatForm() {
331387
driver.get(pages.javascriptPage);
332388
WebElement submit = driver.findElement(By.id("submitListeningForm-submit"));
333389
submit.submit();
334-
assertEventFired("form-onsubmit");
390+
assertEventFired("form-onsubmit", driver);
335391
}
336392

337393
@Test
338394
public void testSubmittingFormFromFormInputTextElementShouldFireOnSubmitForThatFormAndNotClickOnThatInput() {
339395
driver.get(pages.javascriptPage);
340396
WebElement submit = driver.findElement(By.id("submitListeningForm-submit"));
341397
submit.submit();
342-
assertEventFired("form-onsubmit");
343-
assertEventNotFired("text-onclick");
398+
assertEventFired("form-onsubmit", driver);
399+
assertEventNotFired("text-onclick", driver);
344400
}
345401

346402
@Test
@@ -462,26 +518,26 @@ public void testClickAnElementThatDisappear() {
462518
+ "mouseup in under (handled by body)"));
463519
}
464520

465-
private void clickOnElementWhichRecordsEvents() {
521+
private static void clickOnElementWhichRecordsEvents(WebDriver driver) {
466522
driver.findElement(By.id("plainButton")).click();
467523
}
468524

469-
private void assertEventFired(String eventName) {
525+
private static void assertEventFired(String eventName, WebDriver driver) {
470526
WebElement result = driver.findElement(By.id("result"));
471527

472-
String text = wait.until(elementTextToContain(result, eventName));
528+
String text = new WebDriverWait(driver, 10).until(elementTextToContain(result, eventName));
473529
boolean conditionMet = text.contains(eventName);
474530

475531
assertTrue("No " + eventName + " fired: " + text, conditionMet);
476532
}
477533

478-
private void assertEventNotFired(String eventName) {
534+
private static void assertEventNotFired(String eventName, WebDriver driver) {
479535
WebElement result = driver.findElement(By.id("result"));
480536
String text = result.getText();
481537
assertFalse(eventName + " fired: " + text, text.contains(eventName));
482538
}
483539

484-
private boolean browserNeedsFocusOnThisOs(WebDriver driver) {
540+
private static boolean browserNeedsFocusOnThisOs(WebDriver driver) {
485541
// No browser yet demands focus on windows
486542
if (TestUtilities.getEffectivePlatform().is(Platform.WINDOWS))
487543
return false;
@@ -494,7 +550,7 @@ private boolean browserNeedsFocusOnThisOs(WebDriver driver) {
494550
return browserName.toLowerCase().contains("firefox");
495551
}
496552

497-
private String getBrowserName(WebDriver driver) {
553+
private static String getBrowserName(WebDriver driver) {
498554
if (driver instanceof HasCapabilities) {
499555
return ((HasCapabilities) driver).getCapabilities().getBrowserName();
500556
}

0 commit comments

Comments
 (0)