benchpress
Version:
Benchpress - a framework for e2e performance tests
52 lines (51 loc) • 2.08 kB
JavaScript
import { PromiseWrapper } from 'angular2/src/facade/async';
import { bind } from 'angular2/src/core/di';
import { WebDriverAdapter } from '../web_driver_adapter';
import * as webdriver from 'selenium-webdriver';
/**
* Adapter for the selenium-webdriver.
*/
export class SeleniumWebDriverAdapter extends WebDriverAdapter {
constructor(_driver) {
super();
this._driver = _driver;
}
static get PROTRACTOR_BINDINGS() { return _PROTRACTOR_BINDINGS; }
_convertPromise(thenable) {
var completer = PromiseWrapper.completer();
thenable.then(
// selenium-webdriver uses an own Node.js context,
// so we need to convert data into objects of this context.
// Previously needed for rtts_asserts.
(data) => completer.resolve(convertToLocalProcess(data)), completer.reject);
return completer.promise;
}
waitFor(callback) {
return this._convertPromise(this._driver.controlFlow().execute(callback));
}
executeScript(script) {
return this._convertPromise(this._driver.executeScript(script));
}
executeAsyncScript(script) {
return this._convertPromise(this._driver.executeAsyncScript(script));
}
capabilities() {
return this._convertPromise(this._driver.getCapabilities().then((capsObject) => capsObject.serialize()));
}
logs(type) {
// Needed as selenium-webdriver does not forward
// performance logs in the correct way via manage().logs
return this._convertPromise(this._driver.schedule(new webdriver.Command(webdriver.CommandName.GET_LOG).setParameter('type', type), 'WebDriver.manage().logs().get(' + type + ')'));
}
}
function convertToLocalProcess(data) {
var serialized = JSON.stringify(data);
if ('' + serialized === 'undefined') {
return undefined;
}
return JSON.parse(serialized);
}
var _PROTRACTOR_BINDINGS = [
bind(WebDriverAdapter)
.toFactory(() => new SeleniumWebDriverAdapter(global.browser), [])
];