77import { Locator , WebDriver , Builder , until , Capabilities , WebElement , WebElementPromise , ThenableWebDriver , FileDetector , Session , Actions , WebElementCondition , Condition , Options , Navigation , TargetLocator } from 'selenium-webdriver'
88import { Command , Executor } from 'selenium-webdriver/lib/command'
99import { By2 } from './by2' ;
10- import { MobileExtensionCommand , NetworkConnectionType } from './mobileextension' ;
10+ import { MobileJSONWireCommand , NetworkConnectionParam , configureMobileJSONWireExtension } from './mobileextension' ;
1111
1212interface INativeWaitAndGet {
13+ /**
14+ * wait until element by accessibility id exists or timeout
15+ */
1316 getByNativeAccessibilityId ( id : string , timeout ?: number , message ?: string ) : WebElementPromise ;
17+ /**
18+ * wait until element by name exists or timeout
19+ */
1420 getByNativeName ( name : string , timeout ?: number , message ?: string ) : WebElementPromise ;
21+ /**
22+ * wait until element by id exists or timeout
23+ */
1524 getByNativeId ( id : string , timeout ?: number , message ?: string ) : WebElementPromise ;
25+ /**
26+ * wait until element by class name exists or timeout
27+ */
1628 getByNativeclassName ( className : string , timeout ?: number , message ?: string ) : WebElementPromise ;
1729}
1830
1931interface IWaitAndGet extends INativeWaitAndGet {
32+ /**
33+ * wait until element by locator exists or timeout
34+ */
2035 getBy ( locator : Locator , timeout ?: number , message ?: string ) : WebElementPromise ;
2136}
2237
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
2553 attach ( webDriver : WebDriver ) : void ;
2654 detach ( ) : void ;
2755
@@ -33,117 +61,195 @@ export interface IWebDriver2 extends IWaitAndGet {
3361 isActive ( ) : Promise < boolean > ;
3462 seleniumDriver ( ) : WebDriver ;
3563 lastError ( ) : any ;
36-
64+
3765}
3866
3967export 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 ( ) ) ;
4770 }
4871
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 ) ) ;
5374 }
5475
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+ */
5585 wait ( condition : WebElementCondition , opt_timeout ?: number | undefined , opt_message ?: string | undefined ) : WebElementPromise {
5686 return this . seleniumDriver ( ) . wait ( condition , opt_timeout , opt_message ) ;
5787 }
5888
89+ /**
90+ * @see WebDriver.wait
91+ */
5992 wait2 < T > ( condition : Function | PromiseLike < T > | Condition < T > | ( ( driver : WebDriver ) => T | PromiseLike < T > ) , opt_timeout ?: number | undefined , opt_message ?: string | undefined ) : Promise < T > {
6093 return this . seleniumDriver ( ) . wait < T > ( condition , opt_timeout , opt_message ) ;
6194 }
6295
96+ /**
97+ * @see WebDriver.sleep
98+ */
6399 sleep ( ms : number ) : Promise < void > {
64100 return this . seleniumDriver ( ) . sleep ( ms ) ;
65101 }
66102
67- [ Symbol . toStringTag ] : string ;
103+ /**
104+ * @see WebDriver.execute
105+ */
68106 execute < T > ( command : Command , description ?: string | undefined ) : Promise < T > {
69107 return this . seleniumDriver ( ) . execute < T > ( command , description ) ;
70108 }
71109
110+ /**
111+ * @see WebDriver.setFileDetector
112+ */
72113 setFileDetector ( detector : FileDetector ) : void {
73114 return this . seleniumDriver ( ) . setFileDetector ( detector ) ;
74115 }
75116
117+ /**
118+ * @see WebDriver.getExecutor
119+ */
76120 getExecutor ( ) : Executor {
77121 return this . seleniumDriver ( ) . getExecutor ( ) ;
78122 }
79123
124+ /**
125+ * @see WebDriver.getSession
126+ */
80127 getSession ( ) : Promise < Session > {
81128 return this . seleniumDriver ( ) . getSession ( ) ;
82129 }
83130
131+ /**
132+ * @see WebDriver.getCapabilities
133+ */
84134 getCapabilities ( ) : Promise < Capabilities > {
85135 return this . seleniumDriver ( ) . getCapabilities ( ) ;
86136 }
87137
138+ /**
139+ * @see WebDriver.quit
140+ */
88141 quit ( ) : Promise < void > {
89142 return this . stop ( ) ;
90143 }
91144
145+ /**
146+ * @see WebDriver.actions
147+ */
92148 actions ( options ?: { async : boolean ; bridge : boolean ; } | { async : boolean ; } | { bridge : boolean ; } | undefined ) : Actions {
93149 return this . seleniumDriver ( ) . actions ( options ) ;
94150 }
95151
152+ /**
153+ * @see WebDriver.executeScript
154+ */
96155 executeScript < T > ( script : string | Function , ...var_args : any [ ] ) : Promise < T > {
97156 return this . seleniumDriver ( ) . executeScript ( script , var_args ) ;
98157 }
99158
159+ /**
160+ * @see WebDriver.executeAsyncScript
161+ */
100162 executeAsyncScript < T > ( script : string | Function , ...var_args : any [ ] ) : Promise < T > {
101163 return this . seleniumDriver ( ) . executeAsyncScript < T > ( script , var_args ) ;
102164 }
103165
166+ /**
167+ * @see WebDriver.getWindowHandle
168+ */
104169 getWindowHandle ( ) : Promise < string > {
105170 return this . seleniumDriver ( ) . getWindowHandle ( ) ;
106171 }
107172
173+ /**
174+ * @see WebDriver.getAllWindowHandles
175+ */
108176 getAllWindowHandles ( ) : Promise < string [ ] > {
109177 return this . seleniumDriver ( ) . getAllWindowHandles ( ) ;
110178 }
111179
180+ /**
181+ * @see WebDriver.getPageSource
182+ */
112183 getPageSource ( ) : Promise < string > {
113184 return this . seleniumDriver ( ) . getPageSource ( ) ;
114185 }
115186
187+ /**
188+ * @see WebDriver.close
189+ */
116190 close ( ) : Promise < void > {
117191 return this . seleniumDriver ( ) . close ( ) ;
118192 }
119193
194+ /**
195+ * @see WebDriver.get
196+ */
120197 get ( url : string ) : Promise < void > {
121198 return this . seleniumDriver ( ) . get ( url ) ;
122199 }
123200
201+ /**
202+ * @see WebDriver.getCurrentUrl
203+ */
124204 getCurrentUrl ( ) : Promise < string > {
125205 return this . seleniumDriver ( ) . getCurrentUrl ( ) ;
126206 }
127207
208+ /**
209+ * @see WebDriver.getTitle
210+ */
128211 getTitle ( ) : Promise < string > {
129212 return this . seleniumDriver ( ) . getTitle ( ) ;
130213 }
131214
215+ /**
216+ * @see WebDriver.findElement
217+ */
132218 findElement ( locator : Locator ) : WebElementPromise {
133219 return this . seleniumDriver ( ) . findElement ( locator ) ;
134220 }
221+
222+ /**
223+ * @see WebDriver.findElements
224+ */
135225 findElements ( locator : Locator ) : Promise < WebElement [ ] > {
136226 return this . seleniumDriver ( ) . findElements ( locator ) ;
137227 }
228+
229+ /**
230+ * @see WebDriver.takeScreenshot
231+ */
138232 takeScreenshot ( ) : Promise < string > {
139233 return this . seleniumDriver ( ) . takeScreenshot ( ) ;
140234 }
235+
236+ /**
237+ * @see WebDriver.manage
238+ */
141239 manage ( ) : Options {
142240 return this . seleniumDriver ( ) . manage ( ) ;
143241 }
242+
243+ /**
244+ * @see WebDriver.navigate
245+ */
144246 navigate ( ) : Navigation {
145247 return this . seleniumDriver ( ) . navigate ( ) ;
146248 }
249+
250+ /**
251+ * @see WebDriver.switchTo
252+ */
147253 switchTo ( ) : TargetLocator {
148254 return this . seleniumDriver ( ) . switchTo ( ) ;
149255 }
0 commit comments