You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
114 lines
3.4 KiB
114 lines
3.4 KiB
// Copyright 2011 Software Freedom Conservancy. All Rights Reserved.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
var base = require('./_base'),
|
|
executors = require('./executors');
|
|
|
|
var goog = base.require('goog'),
|
|
AbstractBuilder = base.require('webdriver.AbstractBuilder'),
|
|
Browser = base.require('webdriver.Browser'),
|
|
Capability = base.require('webdriver.Capability'),
|
|
WebDriver = base.require('webdriver.WebDriver'),
|
|
promise = base.require('webdriver.promise');
|
|
|
|
|
|
/**
|
|
* @param {!webdriver.Capabilities} capabilities The desired capabilities.
|
|
* @return {webdriver.WebDriver} A new WebDriver instance or {@code null}
|
|
* if the requested browser is not natively supported in Node.
|
|
*/
|
|
function createNativeDriver(capabilities) {
|
|
switch (capabilities.get(Capability.BROWSER_NAME)) {
|
|
case Browser.CHROME:
|
|
// Requiring 'chrome' above would create a cycle:
|
|
// index -> builder -> chrome -> index
|
|
var chrome = require('./chrome');
|
|
return chrome.createDriver(capabilities);
|
|
|
|
case Browser.PHANTOM_JS:
|
|
// Requiring 'phantomjs' would create a cycle:
|
|
// index -> builder -> phantomjs -> index
|
|
var phantomjs = require('./phantomjs');
|
|
return phantomjs.createDriver(capabilities);
|
|
|
|
default:
|
|
return null;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* Creates new {@link webdriver.WebDriver WebDriver} instances.
|
|
* @constructor
|
|
* @extends {webdriver.AbstractBuilder}
|
|
*/
|
|
var Builder = function() {
|
|
goog.base(this);
|
|
};
|
|
goog.inherits(Builder, AbstractBuilder);
|
|
|
|
|
|
/**
|
|
* Sets the proxy configuration to use for WebDriver clients created by this
|
|
* builder. Any calls to {@link #withCapabilities} after this function will
|
|
* overwrite these settings.
|
|
* @param {!proxy.ProxyConfig} config The configuration to use.
|
|
* @return {!Builder} A self reference.
|
|
*/
|
|
Builder.prototype.setProxy = function(config) {
|
|
this.getCapabilities().set(Capability.PROXY, config);
|
|
return this;
|
|
};
|
|
|
|
|
|
/**
|
|
* Sets Chrome-specific options for drivers created by this builder.
|
|
* @param {!chrome.Options} options The ChromeDriver options to use.
|
|
* @return {!Builder} A self reference.
|
|
*/
|
|
Builder.prototype.setChromeOptions = function(options) {
|
|
var newCapabilities = options.toCapabilities(this.getCapabilities());
|
|
return /** @type {!Builder} */(this.withCapabilities(newCapabilities));
|
|
};
|
|
|
|
|
|
/**
|
|
* @override
|
|
*/
|
|
Builder.prototype.build = function() {
|
|
var url = this.getServerUrl();
|
|
|
|
// If a remote server wasn't specified, check for browsers we support
|
|
// natively in node before falling back to using the java Selenium server.
|
|
if (!url) {
|
|
var driver = createNativeDriver(this.getCapabilities());
|
|
if (driver) {
|
|
return driver;
|
|
}
|
|
|
|
// Nope, fall-back to using the default java server.
|
|
url = AbstractBuilder.DEFAULT_SERVER_URL;
|
|
}
|
|
|
|
var executor = executors.createExecutor(url);
|
|
return WebDriver.createSession(executor, this.getCapabilities());
|
|
};
|
|
|
|
|
|
// PUBLIC API
|
|
|
|
|
|
exports.Builder = Builder;
|