1
+ /**
2
+ * Copyright (c) Microsoft Corporation. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ 'use strict' ;
7
+ import { Locator , WebDriver , Builder , until , Capabilities , WebElement , WebElementPromise , ThenableWebDriver , FileDetector , Session , Actions , WebElementCondition , Condition , Options , Navigation , TargetLocator } from 'selenium-webdriver'
8
+ import { Command , Executor } from 'selenium-webdriver/lib/command'
9
+
10
+ interface IWebDriver2 extends WebDriver {
11
+ isActive ( ) : Promise < boolean > ;
12
+ lastError ( ) : any ;
13
+ }
14
+
15
+ export class WebDriver2 implements IWebDriver2 {
16
+ /**
17
+ * @see WebDriver.wait
18
+ */
19
+ wait ( condition : WebElementCondition , opt_timeout ?: number | undefined , opt_message ?: string | undefined ) : WebElementPromise {
20
+ return this . seleniumDriver . wait ( condition , opt_timeout , opt_message ) ;
21
+ }
22
+
23
+ /**
24
+ * @see WebDriver.wait
25
+ */
26
+ wait2 < T > ( condition : Function | PromiseLike < T > | Condition < T > | ( ( driver : WebDriver ) => T | PromiseLike < T > ) , opt_timeout ?: number | undefined , opt_message ?: string | undefined ) : Promise < T > {
27
+ return this . seleniumDriver . wait < T > ( condition , opt_timeout , opt_message ) ;
28
+ }
29
+
30
+ /**
31
+ * @see WebDriver.sleep
32
+ */
33
+ sleep ( ms : number ) : Promise < void > {
34
+ return this . seleniumDriver . sleep ( ms ) ;
35
+ }
36
+
37
+ /**
38
+ * @see WebDriver.execute
39
+ */
40
+ execute < T > ( command : Command , description ?: string | undefined ) : Promise < T > {
41
+ return this . seleniumDriver . execute < T > ( command , description ) ;
42
+ }
43
+
44
+ /**
45
+ * @see WebDriver.setFileDetector
46
+ */
47
+ setFileDetector ( detector : FileDetector ) : void {
48
+ return this . seleniumDriver . setFileDetector ( detector ) ;
49
+ }
50
+
51
+ /**
52
+ * @see WebDriver.getExecutor
53
+ */
54
+ getExecutor ( ) : Executor {
55
+ return this . seleniumDriver . getExecutor ( ) ;
56
+ }
57
+
58
+ /**
59
+ * @see WebDriver.getSession
60
+ */
61
+ getSession ( ) : Promise < Session > {
62
+ return this . seleniumDriver . getSession ( ) ;
63
+ }
64
+
65
+ /**
66
+ * @see WebDriver.getCapabilities
67
+ */
68
+ getCapabilities ( ) : Promise < Capabilities > {
69
+ return this . seleniumDriver . getCapabilities ( ) ;
70
+ }
71
+
72
+ /**
73
+ * @see WebDriver.quit
74
+ */
75
+ quit ( ) : Promise < void > {
76
+ return new Promise < void > ( ( resolve , reject ) => {
77
+ if ( this . webDriver ) {
78
+ this . webDriver
79
+ . quit ( )
80
+ . then ( ( ) => { this . webDriver = undefined ; resolve ( ) ; } )
81
+ . catch ( e => { this . error_ = e ; reject ( e ) } )
82
+ } else {
83
+ resolve ( ) ;
84
+ }
85
+ } ) ;
86
+ }
87
+
88
+ /**
89
+ * @see WebDriver.actions
90
+ */
91
+ actions ( options ?: { async : boolean ; bridge : boolean ; } | { async : boolean ; } | { bridge : boolean ; } | undefined ) : Actions {
92
+ return this . seleniumDriver . actions ( options ) ;
93
+ }
94
+
95
+ /**
96
+ * @see WebDriver.executeScript
97
+ */
98
+ executeScript < T > ( script : string | Function , ...var_args : any [ ] ) : Promise < T > {
99
+ return this . seleniumDriver . executeScript ( script , var_args ) ;
100
+ }
101
+
102
+ /**
103
+ * @see WebDriver.executeAsyncScript
104
+ */
105
+ executeAsyncScript < T > ( script : string | Function , ...var_args : any [ ] ) : Promise < T > {
106
+ return this . seleniumDriver . executeAsyncScript < T > ( script , var_args ) ;
107
+ }
108
+
109
+ /**
110
+ * @see WebDriver.getWindowHandle
111
+ */
112
+ getWindowHandle ( ) : Promise < string > {
113
+ return this . seleniumDriver . getWindowHandle ( ) ;
114
+ }
115
+
116
+ /**
117
+ * @see WebDriver.getAllWindowHandles
118
+ */
119
+ getAllWindowHandles ( ) : Promise < string [ ] > {
120
+ return this . seleniumDriver . getAllWindowHandles ( ) ;
121
+ }
122
+
123
+ /**
124
+ * @see WebDriver.getPageSource
125
+ */
126
+ getPageSource ( ) : Promise < string > {
127
+ return this . seleniumDriver . getPageSource ( ) ;
128
+ }
129
+
130
+ /**
131
+ * @see WebDriver.close
132
+ */
133
+ close ( ) : Promise < void > {
134
+ return this . seleniumDriver . close ( ) ;
135
+ }
136
+
137
+ /**
138
+ * @see WebDriver.get
139
+ */
140
+ get ( url : string ) : Promise < void > {
141
+ return this . seleniumDriver . get ( url ) ;
142
+ }
143
+
144
+ /**
145
+ * @see WebDriver.getCurrentUrl
146
+ */
147
+ getCurrentUrl ( ) : Promise < string > {
148
+ return this . seleniumDriver . getCurrentUrl ( ) ;
149
+ }
150
+
151
+ /**
152
+ * @see WebDriver.getTitle
153
+ */
154
+ getTitle ( ) : Promise < string > {
155
+ return this . seleniumDriver . getTitle ( ) ;
156
+ }
157
+
158
+ /**
159
+ * @see WebDriver.findElement
160
+ */
161
+ findElement ( locator : Locator ) : WebElementPromise {
162
+ return this . seleniumDriver . findElement ( locator ) ;
163
+ }
164
+
165
+ /**
166
+ * @see WebDriver.findElements
167
+ */
168
+ findElements ( locator : Locator ) : Promise < WebElement [ ] > {
169
+ return this . seleniumDriver . findElements ( locator ) ;
170
+ }
171
+
172
+ /**
173
+ * @see WebDriver.takeScreenshot
174
+ */
175
+ takeScreenshot ( ) : Promise < string > {
176
+ return this . seleniumDriver . takeScreenshot ( ) ;
177
+ }
178
+
179
+ /**
180
+ * @see WebDriver.manage
181
+ */
182
+ manage ( ) : Options {
183
+ return this . seleniumDriver . manage ( ) ;
184
+ }
185
+
186
+ /**
187
+ * @see WebDriver.navigate
188
+ */
189
+ navigate ( ) : Navigation {
190
+ return this . seleniumDriver . navigate ( ) ;
191
+ }
192
+
193
+ /**
194
+ * @see WebDriver.switchTo
195
+ */
196
+ switchTo ( ) : TargetLocator {
197
+ return this . seleniumDriver . switchTo ( ) ;
198
+ }
199
+
200
+ get seleniumDriver ( ) : WebDriver {
201
+ if ( this . webDriver )
202
+ return this . webDriver ;
203
+ throw new Error ( "no valid connection" ) ;
204
+ }
205
+
206
+ lastError ( ) {
207
+ return this . error_ ;
208
+ }
209
+
210
+ startWithWebDriver ( webDriver : WebDriver ) : void {
211
+ this . webDriver = webDriver ;
212
+ }
213
+
214
+ startWithCapabilities ( capabilities : { } | Capabilities , url : string = "http://localhost:4723/wd/hub" ) : Promise < void > {
215
+ return new Promise < void > ( ( resolve , reject ) => {
216
+ if ( capabilities ) {
217
+ new Builder ( )
218
+ . usingServer ( url )
219
+ . withCapabilities ( capabilities )
220
+ . build ( )
221
+ . then ( driver => { this . webDriver = driver ; resolve ( ) ; } )
222
+ . catch ( e => { this . error_ = e ; reject ( e ) } ) ;
223
+ }
224
+ else {
225
+ reject ( "capabilities is not set" ) ;
226
+ }
227
+ } ) ;
228
+ }
229
+
230
+ private error_ ?: any ;
231
+ private webDriver ?: WebDriver ;
232
+
233
+ isActive ( ) : Promise < boolean > {
234
+ return new Promise < boolean > ( resolve => {
235
+ if ( this . webDriver ) {
236
+ this . webDriver . getSession ( ) . then ( ( ) => resolve ( true ) , reason => resolve ( false ) )
237
+ } else {
238
+ resolve ( false ) ;
239
+ }
240
+ } ) ;
241
+ }
242
+
243
+ toString ( ) : string {
244
+ return 'WebDriver2'
245
+ }
246
+ }
247
+
248
+ export const driver = new WebDriver2 ( ) ;
0 commit comments