Skip to content

Commit 43e59c9

Browse files
committed
new implementation
1 parent ff02d5a commit 43e59c9

File tree

9 files changed

+579
-501
lines changed

9 files changed

+579
-501
lines changed

src/Config.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/**
2+
* Copyright (c) Microsoft Corporation. All rights reserved.
3+
* Licensed under the MIT License.
4+
*/
5+
6+
'use strict';
7+
8+
class Configuration {
9+
private waitforTimeout: number = 10000;
10+
private waitforPageTimeout: number = 30000;
11+
12+
setWaitForTimeout(timeout: number) {
13+
this.waitforTimeout = timeout;
14+
}
15+
getWaitForTimeout(): number {
16+
return this.waitforTimeout;
17+
}
18+
19+
setWaitforPageTimeout(timeout: number) {
20+
this.waitforPageTimeout = timeout;
21+
}
22+
getWaitforPageTimeout(): number {
23+
return this.waitforPageTimeout;
24+
}
25+
};
26+
27+
export const Config = new Configuration();

src/Driver.ts

Lines changed: 248 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,248 @@
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();

src/webdriver2.windows.ts renamed to src/WinAppDriver.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
'use strict';
77

8-
export function windowsNativeAppCapabilities(appName: string) {
8+
export function windowsAppDriverCapabilities(appName: string) {
99
return {
1010
browserName: '',
1111
platformName: 'windows',

0 commit comments

Comments
 (0)