1 | import {PromiseWrapper} from 'angular2/src/facade/async';
|
2 | import {bind, provide, Provider} from 'angular2/src/core/di';
|
3 | import {WebDriverAdapter} from '../web_driver_adapter';
|
4 |
|
5 | import * as webdriver from 'selenium-webdriver';
|
6 |
|
7 |
|
8 |
|
9 |
|
10 | export class SeleniumWebDriverAdapter extends WebDriverAdapter {
|
11 | static get PROTRACTOR_BINDINGS(): Provider[] { return _PROTRACTOR_BINDINGS; }
|
12 |
|
13 | constructor(private _driver: any) { super(); }
|
14 |
|
15 | _convertPromise(thenable) {
|
16 | var completer = PromiseWrapper.completer();
|
17 | thenable.then(
|
18 |
|
19 |
|
20 |
|
21 | (data) => completer.resolve(convertToLocalProcess(data)), completer.reject);
|
22 | return completer.promise;
|
23 | }
|
24 |
|
25 | waitFor(callback): Promise<any> {
|
26 | return this._convertPromise(this._driver.controlFlow().execute(callback));
|
27 | }
|
28 |
|
29 | executeScript(script: string): Promise<any> {
|
30 | return this._convertPromise(this._driver.executeScript(script));
|
31 | }
|
32 |
|
33 | executeAsyncScript(script: string): Promise<any> {
|
34 | return this._convertPromise(this._driver.executeAsyncScript(script));
|
35 | }
|
36 |
|
37 | capabilities(): Promise<any> {
|
38 | return this._convertPromise(
|
39 | this._driver.getCapabilities().then((capsObject) => capsObject.serialize()));
|
40 | }
|
41 |
|
42 | logs(type: string): Promise<any> {
|
43 |
|
44 |
|
45 | return this._convertPromise(this._driver.schedule(
|
46 | new webdriver.Command(webdriver.CommandName.GET_LOG).setParameter('type', type),
|
47 | 'WebDriver.manage().logs().get(' + type + ')'));
|
48 | }
|
49 | }
|
50 |
|
51 | function convertToLocalProcess(data): Object {
|
52 | var serialized = JSON.stringify(data);
|
53 | if ('' + serialized === 'undefined') {
|
54 | return undefined;
|
55 | }
|
56 | return JSON.parse(serialized);
|
57 | }
|
58 |
|
59 | var _PROTRACTOR_BINDINGS = [
|
60 | bind(WebDriverAdapter)
|
61 | .toFactory(() => new SeleniumWebDriverAdapter((<any>global).browser), [])
|
62 | ];
|