Skip to content

Commit 3a942a7

Browse files
committed
Java: Implementing ability to choose which drivers require restart before a test
1 parent 5acbfb4 commit 3a942a7

File tree

4 files changed

+78
-72
lines changed

4 files changed

+78
-72
lines changed

java/client/test/org/openqa/selenium/interactions/BasicMouseInterfaceTest.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@ public void testMousePositionIsNotPreservedInActionsChain() {
260260
}
261261
}
262262

263-
@Ignore(value = {FIREFOX, IE, REMOTE},
263+
@Ignore(value = {FIREFOX, IE, REMOTE, CHROME},
264264
reason = "Behaviour not finalized yet regarding linked images.")
265265
@NotYetImplemented(HTMLUNIT)
266266
@Test
@@ -432,7 +432,7 @@ public void testMovingMouseToRelativeZeroElementOffset() {
432432
}
433433

434434
@JavascriptEnabled
435-
@NeedsFreshDriver
435+
@NeedsFreshDriver({IE, CHROME})
436436
@Ignore(value = {SAFARI, MARIONETTE},
437437
reason = "Advanced mouse actions only implemented in rendered browsers",
438438
issues = {4136})
@@ -454,11 +454,8 @@ public void testMoveRelativeToBody() {
454454

455455
@JavascriptEnabled
456456
@Test
457-
@Ignore(value = {SAFARI, MARIONETTE},
458-
reason = "Advanced mouse actions only implemented in rendered browsers",
459-
issues = {4136})
457+
@Ignore(value = {SAFARI, MARIONETTE}, issues = {4136})
460458
@NotYetImplemented(HTMLUNIT)
461-
//@NoDriverAfterTest
462459
public void testMoveMouseByOffsetOverAndOutOfAnElement() {
463460
driver.get(pages.mouseOverPage);
464461

@@ -493,7 +490,6 @@ public void testMoveMouseByOffsetOverAndOutOfAnElement() {
493490
reason = "Advanced mouse actions only implemented in rendered browsers",
494491
issues = {4136})
495492
@NotYetImplemented(HTMLUNIT)
496-
@NoDriverAfterTest
497493
public void testCanMoveOverAndOutOfAnElement() {
498494
driver.get(pages.mouseOverPage);
499495

java/client/test/org/openqa/selenium/testing/JUnit4TestBase.java

Lines changed: 67 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ public abstract class JUnit4TestBase implements WrapsDriver {
5555

5656
private static final Logger logger = Logger.getLogger(JUnit4TestBase.class.getName());
5757

58+
private Browser browser = Browser.detect();
5859
protected TestEnvironment environment;
5960
protected AppServer appServer;
6061
protected Pages pages;
@@ -106,7 +107,8 @@ private class ManageDriverRule extends TestWatcher {
106107
protected void starting(Description description) {
107108
super.starting(description);
108109
NeedsFreshDriver annotation = description.getAnnotation(NeedsFreshDriver.class);
109-
if (annotation != null) {
110+
if (annotation != null && matches(browser, annotation.value())) {
111+
System.out.println("Restarting driver before " + description);
110112
removeDriver();
111113
}
112114
try {
@@ -120,7 +122,8 @@ protected void starting(Description description) {
120122
protected void finished(Description description) {
121123
super.finished(description);
122124
NoDriverAfterTest annotation = description.getAnnotation(NoDriverAfterTest.class);
123-
if (annotation != null) {
125+
if (annotation != null && matches(browser, annotation.value())) {
126+
System.out.println("Restarting driver after " + description);
124127
removeDriver();
125128
}
126129
}
@@ -171,15 +174,10 @@ private void dealWithSauceFailureIfNecessary(Throwable t) {
171174

172175
private class NotYetImplementedRule implements TestRule {
173176

174-
private Browser browser;
175-
176-
public NotYetImplementedRule() {
177-
browser = Browser.detect();
178-
}
179-
180177
@Override
181178
public Statement apply(final Statement base, final Description description) {
182-
if (!isNotYetImplemented(description)) {
179+
final NotYetImplemented notYetImplementedBrowsers = description.getAnnotation(NotYetImplemented.class);
180+
if (notYetImplementedBrowsers == null || !matches(browser, notYetImplementedBrowsers.value())) {
183181
return base;
184182
}
185183

@@ -201,62 +199,6 @@ public void evaluate() throws Throwable {
201199
}
202200
};
203201
}
204-
205-
private boolean isNotYetImplemented(final Description description) {
206-
final NotYetImplemented notYetImplementedBrowsers = description.getAnnotation(NotYetImplemented.class);
207-
boolean isNotYetImplemented = false;
208-
if (notYetImplementedBrowsers != null) {
209-
for (Driver driver : notYetImplementedBrowsers.value()) {
210-
if (!isNotYetImplemented) {
211-
switch (driver) {
212-
case ALL:
213-
isNotYetImplemented = true;
214-
break;
215-
216-
case CHROME:
217-
isNotYetImplemented = browser == Browser.chrome;
218-
break;
219-
220-
case FIREFOX:
221-
if (!Boolean.getBoolean("webdriver.firefox.marionette")) {
222-
isNotYetImplemented = browser == Browser.ff;
223-
}
224-
break;
225-
226-
case HTMLUNIT:
227-
isNotYetImplemented = browser == Browser.htmlunit || browser == Browser.htmlunit_js;
228-
break;
229-
230-
case IE:
231-
isNotYetImplemented = browser == Browser.ie;
232-
break;
233-
234-
case MARIONETTE:
235-
if (Boolean.getBoolean("webdriver.firefox.marionette")) {
236-
isNotYetImplemented = browser == Browser.ff;
237-
}
238-
break;
239-
240-
case PHANTOMJS:
241-
isNotYetImplemented = browser == Browser.phantomjs;
242-
break;
243-
244-
case REMOTE:
245-
isNotYetImplemented = Boolean.getBoolean("selenium.browser.remote") || SauceDriver.shouldUseSauce();
246-
break;
247-
248-
case SAFARI:
249-
isNotYetImplemented = browser == Browser.safari;
250-
break;
251-
252-
default:
253-
throw new RuntimeException("Cannot determine driver");
254-
}
255-
}
256-
}
257-
}
258-
return isNotYetImplemented;
259-
}
260202
}
261203

262204
public WebDriver getWrappedDriver() {
@@ -305,4 +247,64 @@ protected boolean isIeDriverTimedOutException(IllegalStateException e) {
305247
return e.getClass().getName().contains("TimedOutException");
306248
}
307249

250+
private static boolean matches(Browser browser, Driver[] drivers) {
251+
for (Driver driver : drivers) {
252+
switch (driver) {
253+
case ALL:
254+
return true;
255+
256+
case CHROME:
257+
if (browser == Browser.chrome) {
258+
return true;
259+
}
260+
break;
261+
262+
case FIREFOX:
263+
if (browser == Browser.ff && !Boolean.getBoolean("webdriver.firefox.marionette")) {
264+
return true;
265+
}
266+
break;
267+
268+
case HTMLUNIT:
269+
if (browser == Browser.htmlunit || browser == Browser.htmlunit_js) {
270+
return true;
271+
}
272+
break;
273+
274+
case IE:
275+
if (browser == Browser.ie) {
276+
return true;
277+
}
278+
break;
279+
280+
case MARIONETTE:
281+
if (browser == Browser.ff && Boolean.getBoolean("webdriver.firefox.marionette")) {
282+
return true;
283+
}
284+
break;
285+
286+
case PHANTOMJS:
287+
if (browser == Browser.phantomjs) {
288+
return true;
289+
}
290+
break;
291+
292+
case REMOTE:
293+
if (Boolean.getBoolean("selenium.browser.remote") || SauceDriver.shouldUseSauce()) {
294+
return true;
295+
}
296+
break;
297+
298+
case SAFARI:
299+
if (browser == Browser.safari) {
300+
return true;
301+
}
302+
break;
303+
304+
default:
305+
throw new RuntimeException("Cannot determine driver");
306+
}
307+
}
308+
return false;
309+
}
308310
}

java/client/test/org/openqa/selenium/testing/NeedsFreshDriver.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,8 @@
2626
@Target(ElementType.METHOD)
2727
public @interface NeedsFreshDriver {
2828

29+
Driver[] value() default {Driver.ALL};
30+
31+
String reason() default ("For unknown reason");
32+
2933
}

java/client/test/org/openqa/selenium/testing/NoDriverAfterTest.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,8 @@
3131
@Target(ElementType.METHOD)
3232
public @interface NoDriverAfterTest {
3333

34+
Driver[] value() default {Driver.ALL};
35+
36+
String reason() default ("For unknown reason");
37+
3438
}

0 commit comments

Comments
 (0)