blob: 783322a78e39530d148c94023e758130eb29cf95 [file] [log] [blame]
// Copyright 2013 Software Freedom Conservancy
//
// 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.
/**
* @fileoverview Defines the webdriver.Capabilities class.
*/
goog.provide('webdriver.Browser');
goog.provide('webdriver.Capabilities');
goog.provide('webdriver.Capability');
/**
* Recognized browser names.
* @enum {string}
*/
webdriver.Browser = {
ANDROID: 'android',
CHROME: 'chrome',
FIREFOX: 'firefox',
INTERNET_EXPLORER: 'internet explorer',
IPAD: 'iPad',
IPHONE: 'iPhone',
OPERA: 'opera',
PHANTOM_JS: 'phantomjs',
SAFARI: 'safari',
HTMLUNIT: 'htmlunit'
};
/**
* Common webdriver capability keys.
* @enum {string}
*/
webdriver.Capability = {
/**
* Indicates whether a driver should accept all SSL certs by default. This
* capability only applies when requesting a new session. To query whether
* a driver can handle insecure SSL certs, see
* {@link webdriver.Capability.SECURE_SSL}.
*/
ACCEPT_SSL_CERTS: 'acceptSslCerts',
/**
* The browser name. Common browser names are defined in the
* {@link webdriver.Browser} enum.
*/
BROWSER_NAME: 'browserName',
/**
* Whether the driver is capable of handling modal alerts (e.g. alert,
* confirm, prompt). To define how a driver <i>should</i> handle alerts,
* use {@link webdriver.Capability.UNEXPECTED_ALERT_BEHAVIOR}.
*/
HANDLES_ALERTS: 'handlesAlerts',
/**
* Key for the logging driver logging preferences.
*/
LOGGING_PREFS: 'loggingPrefs',
/**
* Describes the platform the browser is running on. Will be one of
* ANDROID, IOS, LINUX, MAC, UNIX, or WINDOWS. When <i>requesting</i> a
* session, ANY may be used to indicate no platform preference (this is
* semantically equivalent to omitting the platform capability).
*/
PLATFORM: 'platform',
/**
* Describes the proxy configuration to use for a new WebDriver session.
*/
PROXY: 'proxy',
/** Whether the driver supports changing the brower's orientation. */
ROTATABLE: 'rotatable',
/**
* Whether a driver is only capable of handling secure SSL certs. To request
* that a driver accept insecure SSL certs by default, use
* {@link webdriver.Capability.ACCEPT_SSL_CERTS}.
*/
SECURE_SSL: 'secureSsl',
/** Whether the driver supports manipulating the app cache. */
SUPPORTS_APPLICATION_CACHE: 'applicationCacheEnabled',
/**
* Whether the driver supports controlling the browser's internet
* connectivity.
*/
SUPPORTS_BROWSER_CONNECTION: 'browserConnectionEnabled',
/** Whether the driver supports locating elements with CSS selectors. */
SUPPORTS_CSS_SELECTORS: 'cssSelectorsEnabled',
/** Whether the browser supports JavaScript. */
SUPPORTS_JAVASCRIPT: 'javascriptEnabled',
/** Whether the driver supports controlling the browser's location info. */
SUPPORTS_LOCATION_CONTEXT: 'locationContextEnabled',
/** Whether the driver supports taking screenshots. */
TAKES_SCREENSHOT: 'takesScreenshot',
/**
* Defines how the driver should handle unexpected alerts. The value should
* be one of "accept", "dismiss", or "ignore.
*/
UNEXPECTED_ALERT_BEHAVIOR: 'unexpectedAlertBehavior',
/** Defines the browser version. */
VERSION: 'version'
};
/**
* @param {(webdriver.Capabilities|Object)=} opt_other Another set of
* capabilities to merge into this instance.
* @constructor
*/
webdriver.Capabilities = function(opt_other) {
/** @private {!Object} */
this.caps_ = {};
if (opt_other) {
this.merge(opt_other);
}
};
/**
* @return {!webdriver.Capabilities} A basic set of capabilities for Android.
*/
webdriver.Capabilities.android = function() {
return new webdriver.Capabilities().
set(webdriver.Capability.BROWSER_NAME, webdriver.Browser.ANDROID).
set(webdriver.Capability.PLATFORM, 'ANDROID');
};
/**
* @return {!webdriver.Capabilities} A basic set of capabilities for Chrome.
*/
webdriver.Capabilities.chrome = function() {
return new webdriver.Capabilities().
set(webdriver.Capability.BROWSER_NAME, webdriver.Browser.CHROME);
};
/**
* @return {!webdriver.Capabilities} A basic set of capabilities for Firefox.
*/
webdriver.Capabilities.firefox = function() {
return new webdriver.Capabilities().
set(webdriver.Capability.BROWSER_NAME, webdriver.Browser.FIREFOX);
};
/**
* @return {!webdriver.Capabilities} A basic set of capabilities for
* Internet Explorer.
*/
webdriver.Capabilities.ie = function() {
return new webdriver.Capabilities().
set(webdriver.Capability.BROWSER_NAME,
webdriver.Browser.INTERNET_EXPLORER).
set(webdriver.Capability.PLATFORM, 'WINDOWS');
};
/**
* @return {!webdriver.Capabilities} A basic set of capabilities for iPad.
*/
webdriver.Capabilities.ipad = function() {
return new webdriver.Capabilities().
set(webdriver.Capability.BROWSER_NAME, webdriver.Browser.IPAD).
set(webdriver.Capability.PLATFORM, 'MAC');
};
/**
* @return {!webdriver.Capabilities} A basic set of capabilities for iPhone.
*/
webdriver.Capabilities.iphone = function() {
return new webdriver.Capabilities().
set(webdriver.Capability.BROWSER_NAME, webdriver.Browser.IPHONE).
set(webdriver.Capability.PLATFORM, 'MAC');
};
/**
* @return {!webdriver.Capabilities} A basic set of capabilities for Opera.
*/
webdriver.Capabilities.opera = function() {
return new webdriver.Capabilities().
set(webdriver.Capability.BROWSER_NAME, webdriver.Browser.OPERA);
};
/**
* @return {!webdriver.Capabilities} A basic set of capabilities for
* PhantomJS.
*/
webdriver.Capabilities.phantomjs = function() {
return new webdriver.Capabilities().
set(webdriver.Capability.BROWSER_NAME, webdriver.Browser.PHANTOM_JS);
};
/**
* @return {!webdriver.Capabilities} A basic set of capabilities for Safari.
*/
webdriver.Capabilities.safari = function() {
return new webdriver.Capabilities().
set(webdriver.Capability.BROWSER_NAME, webdriver.Browser.SAFARI);
};
/**
* @return {!webdriver.Capabilities} A basic set of capabilities for HTMLUnit.
*/
webdriver.Capabilities.htmlunit = function() {
return new webdriver.Capabilities().
set(webdriver.Capability.BROWSER_NAME, webdriver.Browser.HTMLUNIT);
};
/**
* @return {!webdriver.Capabilities} A basic set of capabilities for HTMLUnit
* with enabled Javascript.
*/
webdriver.Capabilities.htmlunitwithjs = function() {
return new webdriver.Capabilities().
set(webdriver.Capability.BROWSER_NAME, webdriver.Browser.HTMLUNIT).
set(webdriver.Capability.SUPPORTS_JAVASCRIPT, true);
};
/** @return {!Object} The JSON representation of this instance. */
webdriver.Capabilities.prototype.toJSON = function() {
return this.caps_;
};
/**
* Merges another set of capabilities into this instance. Any duplicates in
* the provided set will override those already set on this instance.
* @param {!(webdriver.Capabilities|Object)} other The capabilities to
* merge into this instance.
* @return {!webdriver.Capabilities} A self reference.
*/
webdriver.Capabilities.prototype.merge = function(other) {
var caps = other instanceof webdriver.Capabilities ?
other.caps_ : other;
for (var key in caps) {
if (caps.hasOwnProperty(key)) {
this.set(key, caps[key]);
}
}
return this;
};
/**
* @param {string} key The capability to set.
* @param {*} value The capability value. Capability values must be JSON
* serializable. Pass {@code null} to unset the capability.
* @return {!webdriver.Capabilities} A self reference.
*/
webdriver.Capabilities.prototype.set = function(key, value) {
if (goog.isDefAndNotNull(value)) {
this.caps_[key] = value;
} else {
delete this.caps_[key];
}
return this;
};
/**
* @param {string} key The capability to return.
* @return {*} The capability with the given key, or {@code null} if it has
* not been set.
*/
webdriver.Capabilities.prototype.get = function(key) {
var val = null;
if (this.caps_.hasOwnProperty(key)) {
val = this.caps_[key];
}
return goog.isDefAndNotNull(val) ? val : null;
};
/**
* @param {string} key The capability to check.
* @return {boolean} Whether the specified capability is set.
*/
webdriver.Capabilities.prototype.has = function(key) {
return !!this.get(key);
};