@@ -29,43 +29,59 @@ enum TestBrowser {
29
29
30
30
impl TestBrowser {
31
31
fn session ( & self ) -> DriverSession {
32
- match self {
33
- & TestBrowser :: Firefox => {
34
- let gecko = GeckoDriver :: build ( )
35
- . spawn ( ) . expect ( "Error starting geckodriver" ) ;
36
- let mut session_params = NewSessionCmd :: default ( ) ;
37
- session_params. extend_always_match (
38
- "moz:firefoxOptions" , json ! ( {
39
- "args" : [ "-headless" ]
40
- } ) ) ;
41
- gecko. session ( & session_params) . expect ( "Error starting session" )
32
+ match * self {
33
+ TestBrowser :: Firefox => {
34
+ GeckoDriver :: build ( )
35
+ . spawn ( )
36
+ . expect ( "Error starting geckodriver" )
37
+ . session ( & self . new_session_cmd ( ) )
38
+ . expect ( "Error starting session" )
42
39
}
43
- & TestBrowser :: Chrome => {
44
- let chrome = ChromeDriver :: build ( )
45
- . spawn ( ) . expect ( "Error starting chromedriver" ) ;
46
-
47
- // Make sure tests run in headless mode without a sandbox (Travis CI)
48
- let mut session_params: NewSessionCmd = Default :: default ( ) ;
49
- session_params. extend_always_match (
50
- "goog:chromeOptions" , json ! ( {
51
- "args" : [ "--no-sandbox" , "--headless" ] ,
52
- } ) ) ;
53
- chrome. session ( & session_params) . expect ( "Error starting session" )
40
+ TestBrowser :: Chrome => {
41
+ ChromeDriver :: build ( )
42
+ . spawn ( )
43
+ . expect ( "Error starting chromedriver" )
44
+ . session ( & self . new_session_cmd ( ) )
45
+ . expect ( "Error starting session" )
54
46
}
55
47
}
56
48
}
49
+
57
50
fn driver ( & self ) -> Box < Driver > {
58
- match self {
59
- & TestBrowser :: Firefox => {
51
+ match * self {
52
+ TestBrowser :: Firefox => {
60
53
Box :: new ( GeckoDriver :: build ( )
61
54
. spawn ( ) . expect ( "Error starting geckodriver" ) )
62
55
}
63
- & TestBrowser :: Chrome => {
56
+ TestBrowser :: Chrome => {
64
57
Box :: new ( ChromeDriver :: build ( )
65
58
. spawn ( ) . expect ( "Error starting chromedriver" ) )
66
59
}
67
60
}
68
61
}
62
+
63
+ fn new_session_cmd ( & self ) -> NewSessionCmd {
64
+ let mut new = NewSessionCmd :: default ( ) ;
65
+
66
+ match * self {
67
+ TestBrowser :: Firefox => {
68
+ new. always_match (
69
+ "moz:firefoxOptions" , json ! ( {
70
+ "args" : [ "-headless" ]
71
+ } ) )
72
+ }
73
+ TestBrowser :: Chrome => {
74
+ // Tests must run in headless mode without a
75
+ // sandbox (required for Travis CI).
76
+ new. always_match (
77
+ "goog:chromeOptions" , json ! ( {
78
+ "args" : [ "--no-sandbox" , "--headless" ] ,
79
+ } ) )
80
+ }
81
+ } ;
82
+
83
+ new
84
+ }
69
85
}
70
86
71
87
/// Tests defined in this macro are run once per browser. See the macro invocations below.
@@ -422,22 +438,8 @@ macro_rules! browser_tests {
422
438
. url( driver. url( ) )
423
439
. build( ) . unwrap( ) ;
424
440
425
- // TODO: Add these common settings to a method on
426
- // NewSessionCmd in lib, or somewhere similar.
427
- let mut session_params: NewSessionCmd = Default :: default ( ) ;
428
- session_params. extend_always_match(
429
- // Run Chrome in headless mode without sandbox
430
- // (required for Travis CI).
431
- "goog:chromeOptions" , json!( {
432
- "args" : [ "--no-sandbox" , "--headless" ] ,
433
- } ) ) ;
434
- session_params. extend_always_match(
435
- // Run Firefox in headless mode.
436
- "moz:firefoxOptions" , json!( {
437
- "args" : [ "-headless" ]
438
- } ) ) ;
439
-
440
- let sess = http_driver. session( & session_params) . unwrap( ) ;
441
+ let sess = http_driver. session( & test_browser( ) . new_session_cmd( ) )
442
+ . unwrap( ) ;
441
443
442
444
let server = FileServer :: new( ) ;
443
445
let test_url = server. url( "/page1.html" ) ;
0 commit comments