7
7
import { Locator , WebDriver , Builder , until , Capabilities , WebElement , WebElementPromise , ThenableWebDriver , FileDetector , Session , Actions , WebElementCondition , Condition , Options , Navigation , TargetLocator } from 'selenium-webdriver'
8
8
import { Command , Executor } from 'selenium-webdriver/lib/command'
9
9
import { By2 } from './by2' ;
10
- import { MobileExtensionCommand , NetworkConnectionType } from './mobileextension' ;
10
+ import { MobileJSONWireCommand , NetworkConnectionParam , configureMobileJSONWireExtension } from './mobileextension' ;
11
11
12
12
interface INativeWaitAndGet {
13
+ /**
14
+ * wait until element by accessibility id exists or timeout
15
+ */
13
16
getByNativeAccessibilityId ( id : string , timeout ?: number , message ?: string ) : WebElementPromise ;
17
+ /**
18
+ * wait until element by name exists or timeout
19
+ */
14
20
getByNativeName ( name : string , timeout ?: number , message ?: string ) : WebElementPromise ;
21
+ /**
22
+ * wait until element by id exists or timeout
23
+ */
15
24
getByNativeId ( id : string , timeout ?: number , message ?: string ) : WebElementPromise ;
25
+ /**
26
+ * wait until element by class name exists or timeout
27
+ */
16
28
getByNativeclassName ( className : string , timeout ?: number , message ?: string ) : WebElementPromise ;
17
29
}
18
30
19
31
interface IWaitAndGet extends INativeWaitAndGet {
32
+ /**
33
+ * wait until element by locator exists or timeout
34
+ */
20
35
getBy ( locator : Locator , timeout ?: number , message ?: string ) : WebElementPromise ;
21
36
}
22
37
23
- export interface IWebDriver2 extends IWaitAndGet {
24
- // internal WebDriver is created by user
38
+ /**
39
+ * @see https://github.com/SeleniumHQ/mobile-spec/blob/master/spec-draft.md
40
+ */
41
+ export interface IMobileJSONWireExtension {
42
+ /**
43
+ * A workaround before WebDriver supports Mobile JSONWire
44
+ */
45
+ enableMobileJSONWire ( ) : void ;
46
+
47
+ getNetworkCondition ( ) : Promise < NetworkConnectionParam > ;
48
+ setNetworkCondition ( params : NetworkConnectionParam ) : Promise < NetworkConnectionParam > ;
49
+ }
50
+
51
+ export interface IWebDriver2 extends IWaitAndGet , IMobileJSONWireExtension {
52
+ // For user who want to customize the WebDriver create process
25
53
attach ( webDriver : WebDriver ) : void ;
26
54
detach ( ) : void ;
27
55
@@ -33,117 +61,195 @@ export interface IWebDriver2 extends IWaitAndGet {
33
61
isActive ( ) : Promise < boolean > ;
34
62
seleniumDriver ( ) : WebDriver ;
35
63
lastError ( ) : any ;
36
-
64
+
37
65
}
38
66
39
67
export class WebDriver2 implements IWebDriver2 {
40
- /**
41
- * Schedules a command to get Chrome network emulation settings.
42
- * @return {!Promise } A promise that will be resolved when network
43
- * emulation settings are retrievied.
44
- */
45
- getNetworkCondition ( ) : Promise < { type : NetworkConnectionType } > {
46
- return this . execute ( new Command ( MobileExtensionCommand . GET_NETWORK_CONDITION ) ) ;
68
+ enableMobileJSONWire ( ) {
69
+ configureMobileJSONWireExtension ( this . getExecutor ( ) ) ;
47
70
}
48
71
49
- setNetworkCondition ( type : NetworkConnectionType ) {
50
- return this . execute (
51
- new Command ( MobileExtensionCommand . SET_NETWORK_CONDITION )
52
- . setParameter ( 'network_conditions' , { type : type } ) ) ;
72
+ getNetworkCondition ( ) : Promise < NetworkConnectionParam > {
73
+ return this . execute < NetworkConnectionParam > ( new Command ( MobileJSONWireCommand . GET_NETWORK_CONDITION ) ) ;
53
74
}
54
75
76
+ setNetworkCondition ( params : NetworkConnectionParam ) {
77
+ return this . execute < NetworkConnectionParam > (
78
+ new Command ( MobileJSONWireCommand . SET_NETWORK_CONDITION )
79
+ . setParameter ( 'type' , params . type ) ) ;
80
+ }
81
+
82
+ /**
83
+ * @see WebDriver.wait
84
+ */
55
85
wait ( condition : WebElementCondition , opt_timeout ?: number | undefined , opt_message ?: string | undefined ) : WebElementPromise {
56
86
return this . seleniumDriver ( ) . wait ( condition , opt_timeout , opt_message ) ;
57
87
}
58
88
89
+ /**
90
+ * @see WebDriver.wait
91
+ */
59
92
wait2 < T > ( condition : Function | PromiseLike < T > | Condition < T > | ( ( driver : WebDriver ) => T | PromiseLike < T > ) , opt_timeout ?: number | undefined , opt_message ?: string | undefined ) : Promise < T > {
60
93
return this . seleniumDriver ( ) . wait < T > ( condition , opt_timeout , opt_message ) ;
61
94
}
62
95
96
+ /**
97
+ * @see WebDriver.sleep
98
+ */
63
99
sleep ( ms : number ) : Promise < void > {
64
100
return this . seleniumDriver ( ) . sleep ( ms ) ;
65
101
}
66
102
67
- [ Symbol . toStringTag ] : string ;
103
+ /**
104
+ * @see WebDriver.execute
105
+ */
68
106
execute < T > ( command : Command , description ?: string | undefined ) : Promise < T > {
69
107
return this . seleniumDriver ( ) . execute < T > ( command , description ) ;
70
108
}
71
109
110
+ /**
111
+ * @see WebDriver.setFileDetector
112
+ */
72
113
setFileDetector ( detector : FileDetector ) : void {
73
114
return this . seleniumDriver ( ) . setFileDetector ( detector ) ;
74
115
}
75
116
117
+ /**
118
+ * @see WebDriver.getExecutor
119
+ */
76
120
getExecutor ( ) : Executor {
77
121
return this . seleniumDriver ( ) . getExecutor ( ) ;
78
122
}
79
123
124
+ /**
125
+ * @see WebDriver.getSession
126
+ */
80
127
getSession ( ) : Promise < Session > {
81
128
return this . seleniumDriver ( ) . getSession ( ) ;
82
129
}
83
130
131
+ /**
132
+ * @see WebDriver.getCapabilities
133
+ */
84
134
getCapabilities ( ) : Promise < Capabilities > {
85
135
return this . seleniumDriver ( ) . getCapabilities ( ) ;
86
136
}
87
137
138
+ /**
139
+ * @see WebDriver.quit
140
+ */
88
141
quit ( ) : Promise < void > {
89
142
return this . stop ( ) ;
90
143
}
91
144
145
+ /**
146
+ * @see WebDriver.actions
147
+ */
92
148
actions ( options ?: { async : boolean ; bridge : boolean ; } | { async : boolean ; } | { bridge : boolean ; } | undefined ) : Actions {
93
149
return this . seleniumDriver ( ) . actions ( options ) ;
94
150
}
95
151
152
+ /**
153
+ * @see WebDriver.executeScript
154
+ */
96
155
executeScript < T > ( script : string | Function , ...var_args : any [ ] ) : Promise < T > {
97
156
return this . seleniumDriver ( ) . executeScript ( script , var_args ) ;
98
157
}
99
158
159
+ /**
160
+ * @see WebDriver.executeAsyncScript
161
+ */
100
162
executeAsyncScript < T > ( script : string | Function , ...var_args : any [ ] ) : Promise < T > {
101
163
return this . seleniumDriver ( ) . executeAsyncScript < T > ( script , var_args ) ;
102
164
}
103
165
166
+ /**
167
+ * @see WebDriver.getWindowHandle
168
+ */
104
169
getWindowHandle ( ) : Promise < string > {
105
170
return this . seleniumDriver ( ) . getWindowHandle ( ) ;
106
171
}
107
172
173
+ /**
174
+ * @see WebDriver.getAllWindowHandles
175
+ */
108
176
getAllWindowHandles ( ) : Promise < string [ ] > {
109
177
return this . seleniumDriver ( ) . getAllWindowHandles ( ) ;
110
178
}
111
179
180
+ /**
181
+ * @see WebDriver.getPageSource
182
+ */
112
183
getPageSource ( ) : Promise < string > {
113
184
return this . seleniumDriver ( ) . getPageSource ( ) ;
114
185
}
115
186
187
+ /**
188
+ * @see WebDriver.close
189
+ */
116
190
close ( ) : Promise < void > {
117
191
return this . seleniumDriver ( ) . close ( ) ;
118
192
}
119
193
194
+ /**
195
+ * @see WebDriver.get
196
+ */
120
197
get ( url : string ) : Promise < void > {
121
198
return this . seleniumDriver ( ) . get ( url ) ;
122
199
}
123
200
201
+ /**
202
+ * @see WebDriver.getCurrentUrl
203
+ */
124
204
getCurrentUrl ( ) : Promise < string > {
125
205
return this . seleniumDriver ( ) . getCurrentUrl ( ) ;
126
206
}
127
207
208
+ /**
209
+ * @see WebDriver.getTitle
210
+ */
128
211
getTitle ( ) : Promise < string > {
129
212
return this . seleniumDriver ( ) . getTitle ( ) ;
130
213
}
131
214
215
+ /**
216
+ * @see WebDriver.findElement
217
+ */
132
218
findElement ( locator : Locator ) : WebElementPromise {
133
219
return this . seleniumDriver ( ) . findElement ( locator ) ;
134
220
}
221
+
222
+ /**
223
+ * @see WebDriver.findElements
224
+ */
135
225
findElements ( locator : Locator ) : Promise < WebElement [ ] > {
136
226
return this . seleniumDriver ( ) . findElements ( locator ) ;
137
227
}
228
+
229
+ /**
230
+ * @see WebDriver.takeScreenshot
231
+ */
138
232
takeScreenshot ( ) : Promise < string > {
139
233
return this . seleniumDriver ( ) . takeScreenshot ( ) ;
140
234
}
235
+
236
+ /**
237
+ * @see WebDriver.manage
238
+ */
141
239
manage ( ) : Options {
142
240
return this . seleniumDriver ( ) . manage ( ) ;
143
241
}
242
+
243
+ /**
244
+ * @see WebDriver.navigate
245
+ */
144
246
navigate ( ) : Navigation {
145
247
return this . seleniumDriver ( ) . navigate ( ) ;
146
248
}
249
+
250
+ /**
251
+ * @see WebDriver.switchTo
252
+ */
147
253
switchTo ( ) : TargetLocator {
148
254
return this . seleniumDriver ( ) . switchTo ( ) ;
149
255
}
0 commit comments