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