@@ -11,20 +11,32 @@ use std::env;
11
11
use std:: sync:: { Once , ONCE_INIT } ;
12
12
use std:: thread:: sleep;
13
13
use std:: time:: Duration ;
14
- use webdriver_client:: { Driver , HttpDriverBuilder } ;
14
+ use webdriver_client:: { Driver , HttpDriverBuilder , DriverSession } ;
15
15
use webdriver_client:: firefox:: GeckoDriver ;
16
+ use webdriver_client:: chrome:: ChromeDriver ;
16
17
use webdriver_client:: messages:: ExecuteCmd ;
17
18
18
19
#[ test]
19
- fn test_file ( ) {
20
+ fn test_file_geckodriver ( ) {
20
21
ensure_logging_init ( ) ;
21
-
22
22
// TODO: Perhaps calculate path from PATH environment variable.
23
23
let gecko = GeckoDriver :: build ( )
24
24
. firefox_binary ( "/usr/bin/firefox" )
25
25
. spawn ( ) . unwrap ( ) ;
26
26
let sess = gecko. session ( ) . unwrap ( ) ;
27
+ test_file ( sess) ;
28
+ }
29
+
30
+ #[ test]
31
+ fn test_file_chromedriver ( ) {
32
+ ensure_logging_init ( ) ;
33
+ let chrome = ChromeDriver :: build ( )
34
+ . spawn ( ) . unwrap ( ) ;
35
+ let sess = chrome. session ( ) . unwrap ( ) ;
36
+ test_file ( sess) ;
37
+ }
27
38
39
+ fn test_file ( sess : DriverSession ) {
28
40
let test_url = get_integration_test_url ( ) ;
29
41
sess. go ( & test_url) . unwrap ( ) ;
30
42
let url = sess. get_current_url ( ) . unwrap ( ) ;
@@ -55,22 +67,6 @@ fn test_file() {
55
67
assert_eq ! ( exec_int, 4 ) ;
56
68
}
57
69
58
- {
59
- // Test execute handling an exception
60
- let exec_res = sess. execute ( ExecuteCmd {
61
- script : "throw 'SomeException';" . to_owned ( ) ,
62
- args : vec ! [ ] ,
63
- } ) ;
64
- assert ! ( exec_res. is_err( ) ) ;
65
- let err = exec_res. err ( ) . unwrap ( ) ;
66
- let err = match err {
67
- webdriver_client:: Error :: WebDriverError ( e) => e,
68
- _ => panic ! ( "Unexpected error variant: {:#?}" , err) ,
69
- } ;
70
- assert_eq ! ( err. error, "javascript error" ) ;
71
- assert_eq ! ( err. message, "SomeException" ) ;
72
- }
73
-
74
70
{
75
71
// Test execute async
76
72
let exec_json = sess. execute_async ( ExecuteCmd {
@@ -86,14 +82,68 @@ fn test_file() {
86
82
}
87
83
88
84
#[ test]
89
- fn test_http_driver ( ) {
85
+ fn test_exception_handling_geckodriver ( ) {
86
+ ensure_logging_init ( ) ;
87
+ // TODO: Perhaps calculate path from PATH environment variable.
88
+ let gecko = GeckoDriver :: build ( )
89
+ . firefox_binary ( "/usr/bin/firefox" )
90
+ . spawn ( ) . unwrap ( ) ;
91
+ let sess = gecko. session ( ) . unwrap ( ) ;
92
+
93
+ let exec_res = sess. execute ( ExecuteCmd {
94
+ script : "throw 'SomeException';" . to_owned ( ) ,
95
+ args : vec ! [ ] ,
96
+ } ) ;
97
+ assert ! ( exec_res. is_err( ) ) ;
98
+ let err = exec_res. err ( ) . unwrap ( ) ;
99
+ let err = match err {
100
+ webdriver_client:: Error :: WebDriverError ( e) => e,
101
+ _ => panic ! ( "Unexpected error variant: {:#?}" , err) ,
102
+ } ;
103
+ assert_eq ! ( err. error, "javascript error" ) ;
104
+ assert_eq ! ( err. message, "SomeException" ) ;
105
+ }
106
+
107
+ /// This test is kept separate from the gecko variant because the error messages are different
108
+ /// in chrome and so are the other stacktrace information
109
+ #[ test]
110
+ fn test_exception_handling_chromedriver ( ) {
90
111
ensure_logging_init ( ) ;
112
+ let chrome = ChromeDriver :: build ( )
113
+ . spawn ( ) . unwrap ( ) ;
114
+ let sess = chrome. session ( ) . unwrap ( ) ;
115
+
116
+ let exec_res = sess. execute ( ExecuteCmd {
117
+ script : "throw 'SomeException';" . to_owned ( ) ,
118
+ args : vec ! [ ] ,
119
+ } ) ;
120
+ assert ! ( exec_res. is_err( ) ) ;
121
+ let err = exec_res. err ( ) . unwrap ( ) ;
122
+ match err {
123
+ webdriver_client:: Error :: WebDriverError ( _) => ( ) ,
124
+ _ => panic ! ( "Unexpected error variant: {:#?}" , err) ,
125
+ }
126
+ }
91
127
128
+ #[ test]
129
+ fn test_http_driver_geckodriver ( ) {
130
+ ensure_logging_init ( ) ;
92
131
// TODO: Perhaps calculate path from PATH environment variable.
93
132
let gecko = GeckoDriver :: build ( )
94
133
. firefox_binary ( "/usr/bin/firefox" )
95
134
. spawn ( ) . unwrap ( ) ;
135
+ test_http_driver ( gecko. url ( ) ) ;
136
+ }
137
+
138
+ #[ test]
139
+ fn test_http_driver_chromedriver ( ) {
140
+ ensure_logging_init ( ) ;
141
+ let chrome = ChromeDriver :: build ( )
142
+ . spawn ( ) . unwrap ( ) ;
143
+ test_http_driver ( chrome. url ( ) ) ;
144
+ }
96
145
146
+ fn test_http_driver ( url : & str ) {
97
147
// Hackily sleep a bit until geckodriver is ready, otherwise our session
98
148
// will fail to connect.
99
149
// If this is unreliable, we could try:
@@ -102,7 +152,7 @@ fn test_http_driver() {
102
152
sleep ( Duration :: from_millis ( 1000 ) ) ;
103
153
104
154
let http_driver = HttpDriverBuilder :: default ( )
105
- . url ( gecko . url ( ) )
155
+ . url ( url)
106
156
. build ( ) . unwrap ( ) ;
107
157
let sess = http_driver. session ( ) . unwrap ( ) ;
108
158
@@ -137,21 +187,36 @@ fn get_integration_test_url() -> String {
137
187
format ! ( "file://{crate}/tests/integration_test.html" , crate = crate_root)
138
188
}
139
189
190
+ /// This depends on an external page not under our control, we
191
+ /// should migrate to using local files.
140
192
mod youtube_integration_test {
141
- use webdriver_client:: Driver ;
193
+ use webdriver_client:: { Driver , DriverSession } ;
142
194
use webdriver_client:: firefox:: GeckoDriver ;
195
+ use webdriver_client:: chrome:: ChromeDriver ;
143
196
use webdriver_client:: messages:: LocationStrategy ;
144
197
145
- /// This depends on an external page not under our control, we
146
- /// should migrate to using local files.
147
198
#[ test]
148
199
#[ ignore]
149
- fn test ( ) {
200
+ fn test_geckodriver ( ) {
150
201
let gecko = GeckoDriver :: build ( )
151
202
. kill_on_drop ( true )
152
203
. spawn ( )
153
204
. unwrap ( ) ;
154
- let mut sess = gecko. session ( ) . unwrap ( ) ;
205
+ let sess = gecko. session ( ) . unwrap ( ) ;
206
+ test ( sess) ;
207
+ }
208
+
209
+ #[ test]
210
+ #[ ignore]
211
+ fn test_chromedriver ( ) {
212
+ let chrome = ChromeDriver :: build ( )
213
+ . spawn ( )
214
+ . unwrap ( ) ;
215
+ let sess = chrome. session ( ) . unwrap ( ) ;
216
+ test ( sess) ;
217
+ }
218
+
219
+ fn test ( mut sess : DriverSession ) {
155
220
sess. go ( "https://www.youtube.com/watch?v=dQw4w9WgXcQ" ) . unwrap ( ) ;
156
221
sess. get_current_url ( ) . unwrap ( ) ;
157
222
sess. back ( ) . unwrap ( ) ;
@@ -160,7 +225,7 @@ mod youtube_integration_test {
160
225
sess. get_page_source ( ) . unwrap ( ) ;
161
226
162
227
{
163
- let el = sess. find_element ( "a" , LocationStrategy :: Css ) . unwrap ( ) ;
228
+ let el = sess. find_element ( "a[href] " , LocationStrategy :: Css ) . unwrap ( ) ;
164
229
el. attribute ( "href" ) . unwrap ( ) ;
165
230
el. css_value ( "color" ) . unwrap ( ) ;
166
231
el. text ( ) . unwrap ( ) ;
0 commit comments