@@ -55,6 +55,7 @@ public abstract class JUnit4TestBase implements WrapsDriver {
55
55
56
56
private static final Logger logger = Logger .getLogger (JUnit4TestBase .class .getName ());
57
57
58
+ private Browser browser = Browser .detect ();
58
59
protected TestEnvironment environment ;
59
60
protected AppServer appServer ;
60
61
protected Pages pages ;
@@ -106,7 +107,8 @@ private class ManageDriverRule extends TestWatcher {
106
107
protected void starting (Description description ) {
107
108
super .starting (description );
108
109
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 );
110
112
removeDriver ();
111
113
}
112
114
try {
@@ -120,7 +122,8 @@ protected void starting(Description description) {
120
122
protected void finished (Description description ) {
121
123
super .finished (description );
122
124
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 );
124
127
removeDriver ();
125
128
}
126
129
}
@@ -171,15 +174,10 @@ private void dealWithSauceFailureIfNecessary(Throwable t) {
171
174
172
175
private class NotYetImplementedRule implements TestRule {
173
176
174
- private Browser browser ;
175
-
176
- public NotYetImplementedRule () {
177
- browser = Browser .detect ();
178
- }
179
-
180
177
@ Override
181
178
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 ())) {
183
181
return base ;
184
182
}
185
183
@@ -201,62 +199,6 @@ public void evaluate() throws Throwable {
201
199
}
202
200
};
203
201
}
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
- }
260
202
}
261
203
262
204
public WebDriver getWrappedDriver () {
@@ -305,4 +247,64 @@ protected boolean isIeDriverTimedOutException(IllegalStateException e) {
305
247
return e .getClass ().getName ().contains ("TimedOutException" );
306
248
}
307
249
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
+ }
308
310
}
0 commit comments