UNPKG

2.08 kBPlain TextView Raw
1import {PromiseWrapper} from 'angular2/src/facade/async';
2import {bind, provide, Provider} from 'angular2/src/core/di';
3import {WebDriverAdapter} from '../web_driver_adapter';
4
5import * as webdriver from 'selenium-webdriver';
6
7/**
8 * Adapter for the selenium-webdriver.
9 */
10export 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 // selenium-webdriver uses an own Node.js context,
19 // so we need to convert data into objects of this context.
20 // Previously needed for rtts_asserts.
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 // Needed as selenium-webdriver does not forward
44 // performance logs in the correct way via manage().logs
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
51function convertToLocalProcess(data): Object {
52 var serialized = JSON.stringify(data);
53 if ('' + serialized === 'undefined') {
54 return undefined;
55 }
56 return JSON.parse(serialized);
57}
58
59var _PROTRACTOR_BINDINGS = [
60 bind(WebDriverAdapter)
61 .toFactory(() => new SeleniumWebDriverAdapter((<any>global).browser), [])
62];