diff --git a/docs/api/javascript/index.html b/docs/api/javascript/index.html index f6977fb422c24..4d91ae554fc9a 100644 --- a/docs/api/javascript/index.html +++ b/docs/api/javascript/index.html @@ -8,7 +8,7 @@

Installation

natively supports the ChromeDriver. Simply download a copy and make sure it can be found on your PATH. The other drivers (e.g. Firefox, Internet Explorer, and Safari), still require the -standalone Selenium server.

+standalone Selenium server.

Running the tests

To run the tests, you will need to download a copy of the ChromeDriver and make @@ -16,7 +16,7 @@

Running the tests

npm test selenium-webdriver
 

To run the tests against multiple browsers, download the -Selenium server and +Selenium server and specify its location through the SELENIUM_SERVER_JAR environment variable. You can use the SELENIUM_BROWSER environment variable to define a comma-separated list of browsers you wish to test against. For example:

diff --git a/docs/api/javascript/module_selenium-webdriver.html b/docs/api/javascript/module_selenium-webdriver.html index be2a3e1eec383..2764d07aa8090 100644 --- a/docs/api/javascript/module_selenium-webdriver.html +++ b/docs/api/javascript/module_selenium-webdriver.html @@ -1,4 +1,4 @@ -selenium-webdriver

Module selenium-webdriver

code »

The main user facing module. Exports WebDriver's primary +selenium-webdriver

Module selenium-webdriver

code »

The main user facing module. Exports WebDriver's primary public API and provides convenience assessors to certain sub-modules.

Classes

ActionSequence
Class for defining sequences of complex user interactions.
Builder
Creates new WebDriver instances.
Capabilities
No Description.
Command
Describes a command to be executed by the WebDriverJS framework.
EventEmitter
Object that can emit events for others to listen for.
Session
Contains information about a WebDriver session.
WebDriver
Creates a new WebDriver client, which provides control over a browser.
WebElement
Represents a DOM element.

Enumerations

Browser
Recognized browser names.
Button
Enumeration of the buttons used in the advanced interactions API.
Capability
Common webdriver capability keys.
CommandName
Enumeration of predefined names command names that all command processors will support.
Key
Representations of pressable keys that aren't text.
Show:

Properties

A collection of factory functions for creating webdriver.Locator - instances.

\ No newline at end of file + instances.
code »error : selenium-webdriver/error
code »logging : webdriver.logging
code »promise : webdriver.promise
code »stacktrace : webdriver.stacktrace
\ No newline at end of file diff --git a/docs/api/javascript/module_selenium-webdriver__base.html b/docs/api/javascript/module_selenium-webdriver__base.html index 6f10f6ffa0840..02cc0a118bc3b 100644 --- a/docs/api/javascript/module_selenium-webdriver__base.html +++ b/docs/api/javascript/module_selenium-webdriver__base.html @@ -1,4 +1,4 @@ -selenium-webdriver/_base

Module selenium-webdriver/_base

code »

The base module responsible for bootstrapping the Closure +selenium-webdriver/_base

Module selenium-webdriver/_base

code »

The base module responsible for bootstrapping the Closure library and providing a means of loading Closure-based modules.

Each script loaded by this module will be granted access to this module's diff --git a/docs/api/javascript/module_selenium-webdriver_builder.html b/docs/api/javascript/module_selenium-webdriver_builder.html index b87c6b446e438..6b208417b6d7b 100644 --- a/docs/api/javascript/module_selenium-webdriver_builder.html +++ b/docs/api/javascript/module_selenium-webdriver_builder.html @@ -1 +1 @@ -selenium-webdriver/builder

Module selenium-webdriver/builder

code »

Classes

Builder
Creates new WebDriver instances.
Show:
\ No newline at end of file +selenium-webdriver/builder

Module selenium-webdriver/builder

code »

Classes

Builder
Creates new WebDriver instances.
Show:
\ No newline at end of file diff --git a/docs/api/javascript/module_selenium-webdriver_chrome.html b/docs/api/javascript/module_selenium-webdriver_chrome.html index 38f1f55ab4936..f5d6a0152d948 100644 --- a/docs/api/javascript/module_selenium-webdriver_chrome.html +++ b/docs/api/javascript/module_selenium-webdriver_chrome.html @@ -1,4 +1,4 @@ -selenium-webdriver/chrome

Module selenium-webdriver/chrome

code »

Classes

Options
Class for managing ChromeDriver specific options.
ServiceBuilder
Creates remote.DriverService instances that manage a ChromeDriver +selenium-webdriver/chrome

Module selenium-webdriver/chrome

code »

Classes

Options
Class for managing ChromeDriver specific options.
ServiceBuilder
Creates remote.DriverService instances that manage a ChromeDriver server.
Show:

Functions

code »createDriver ( opt_options, opt_service )!webdriver.WebDriver

Creates a new ChromeDriver session.

Parameters
opt_options: (webdriver.Capabilities|Options)=
The session options.
opt_service: remote.DriverService=
The session to use; will use the default service by default.
Returns
A new WebDriver instance.
code »getDefaultService ( )!remote.DriverService

Returns the default ChromeDriver service. If such a service has not been configured, one will be constructed using the default configuration for diff --git a/docs/api/javascript/module_selenium-webdriver_error.html b/docs/api/javascript/module_selenium-webdriver_error.html index 0bf8d62215cb4..dc4ba906ccac8 100644 --- a/docs/api/javascript/module_selenium-webdriver_error.html +++ b/docs/api/javascript/module_selenium-webdriver_error.html @@ -1,4 +1,4 @@ -selenium-webdriver/error

Module selenium-webdriver/error

code »

Classes

Error
Error extension that includes error status codes from the WebDriver wire +selenium-webdriver/error

Module selenium-webdriver/error

code »

Classes

Error
Error extension that includes error status codes from the WebDriver wire protocol: http://code.google.com/p/selenium/wiki/JsonWireProtocol#Response_Status_Codes

Enumerations

ErrorCode
Error codes from the WebDriver wire protocol: http://code.google.com/p/selenium/wiki/JsonWireProtocol#Response_Status_Codes
Show:
\ No newline at end of file diff --git a/docs/api/javascript/module_selenium-webdriver_executors.html b/docs/api/javascript/module_selenium-webdriver_executors.html index 175631557d1e4..4cd5307a8a31f 100644 --- a/docs/api/javascript/module_selenium-webdriver_executors.html +++ b/docs/api/javascript/module_selenium-webdriver_executors.html @@ -1,3 +1,3 @@ -selenium-webdriver/executors

Module selenium-webdriver/executors

code »

Various utilities for working with +selenium-webdriver/executors

Module selenium-webdriver/executors

code »

Various utilities for working with webdriver.CommandExecutor implementations.

Show:

Functions

Creates a command executor that uses WebDriver's JSON wire protocol.

Parameters
url: (string|!webdriver.promise.Promise.<string>)
The server's URL, or a promise that will resolve to that URL.
\ No newline at end of file diff --git a/docs/api/javascript/module_selenium-webdriver_http.html b/docs/api/javascript/module_selenium-webdriver_http.html index 31f88b3953181..a5b2f988b5146 100644 --- a/docs/api/javascript/module_selenium-webdriver_http.html +++ b/docs/api/javascript/module_selenium-webdriver_http.html @@ -1,4 +1,4 @@ -selenium-webdriver/http

Module selenium-webdriver/http

code »

Defines a the webdriver.http.Client for use with +selenium-webdriver/http

Module selenium-webdriver/http

code »

Defines a the webdriver.http.Client for use with NodeJS.

Classes

Executor
A command executor that communicates with a server using the WebDriver command protocol.
HttpClient
A webdriver.http.Client implementation using Node's built-in http module.
Request
Describes a partial HTTP request.
Response
Represents a HTTP response.
Show:
\ No newline at end of file diff --git a/docs/api/javascript/module_selenium-webdriver_http_util.html b/docs/api/javascript/module_selenium-webdriver_http_util.html index 9221a35c2f3e8..e85d1000b81be 100644 --- a/docs/api/javascript/module_selenium-webdriver_http_util.html +++ b/docs/api/javascript/module_selenium-webdriver_http_util.html @@ -1,4 +1,4 @@ -selenium-webdriver/http/util

Module selenium-webdriver/http/util

code »

Various HTTP utilities.

Show:

Functions

Queries a WebDriver server for its current status.

Parameters
url: string
Base URL of the server to query.
Returns
A promise that resolves with +selenium-webdriver/http/util

Module selenium-webdriver/http/util

code »

Various HTTP utilities.

Show:

Functions

Queries a WebDriver server for its current status.

Parameters
url: string
Base URL of the server to query.
Returns
A promise that resolves with a hash of the server status.

Waits for a WebDriver server to be healthy and accepting requests.

Parameters
url: string
Base URL of the server to query.
timeout: number
How long to wait for the server.
Returns
A promise that will resolve when the server is ready.

Polls a URL with GET requests until it returns a 2xx response or the timeout expires.

Parameters
url: string
The URL to poll.
timeout: number
How long to wait, in milliseconds.
Returns
A promise that will resolve when the diff --git a/docs/api/javascript/module_selenium-webdriver_io.html b/docs/api/javascript/module_selenium-webdriver_io.html index 93fb2538b854e..aabdf7fd0e1a5 100644 --- a/docs/api/javascript/module_selenium-webdriver_io.html +++ b/docs/api/javascript/module_selenium-webdriver_io.html @@ -1,4 +1,4 @@ -selenium-webdriver/io

Module selenium-webdriver/io

code »
Show:

Functions

code »findInPath ( file, opt_checkCwd )?string

Searches the PATH environment variable for the given file.

Parameters
file: string
The file to locate on the PATH.
opt_checkCwd: boolean=
Whether to always start with the search with +selenium-webdriver/io

Module selenium-webdriver/io

code »
Show:

Functions

code »findInPath ( file, opt_checkCwd )?string

Searches the PATH environment variable for the given file.

Parameters
file: string
The file to locate on the PATH.
opt_checkCwd: boolean=
Whether to always start with the search with the current working directory, regardless of whether it is explicitly listed on the PATH.
Returns
Path to the located file, or null if it could not be found.
\ No newline at end of file diff --git a/docs/api/javascript/module_selenium-webdriver_net.html b/docs/api/javascript/module_selenium-webdriver_net.html index a8589eb7bf9f9..128d586e96d4e 100644 --- a/docs/api/javascript/module_selenium-webdriver_net.html +++ b/docs/api/javascript/module_selenium-webdriver_net.html @@ -1 +1 @@ -selenium-webdriver/net

Module selenium-webdriver/net

code »
Show:

Functions

code »getAddress ( opt_family )string

Retrieves the external IP address for this host.

Parameters
opt_family: string=
The IP family to retrieve. Defaults to "IPv4".
Returns
The IP address or undefined if not available.

Retrieves a loopback address for this machine.

Parameters
opt_family: string=
The IP family to retrieve. Defaults to "IPv4".
Returns
The IP address or undefined if not available.
\ No newline at end of file +selenium-webdriver/net

Module selenium-webdriver/net

code »
Show:

Functions

code »getAddress ( opt_family )string

Retrieves the external IP address for this host.

Parameters
opt_family: string=
The IP family to retrieve. Defaults to "IPv4".
Returns
The IP address or undefined if not available.

Retrieves a loopback address for this machine.

Parameters
opt_family: string=
The IP family to retrieve. Defaults to "IPv4".
Returns
The IP address or undefined if not available.
\ No newline at end of file diff --git a/docs/api/javascript/module_selenium-webdriver_net_portprober.html b/docs/api/javascript/module_selenium-webdriver_net_portprober.html index 61e419130bc56..0ae96a6780acb 100644 --- a/docs/api/javascript/module_selenium-webdriver_net_portprober.html +++ b/docs/api/javascript/module_selenium-webdriver_net_portprober.html @@ -1,4 +1,4 @@ -selenium-webdriver/net/portprober

Module selenium-webdriver/net/portprober

code »
Show:

Functions

Parameters
opt_host: string=
The bound host to test the port against. +selenium-webdriver/net/portprober

Module selenium-webdriver/net/portprober

code »
Show:

Functions

Parameters
opt_host: string=
The bound host to test the port against. Defaults to INADDR_ANY.
Returns
A promise that will resolve to a free port. If a port cannot be found, the promise will be rejected.

Tests if a port is free.

Parameters
port: number
The port to test.
opt_host: string=
The bound host to test the port against. diff --git a/docs/api/javascript/module_selenium-webdriver_phantomjs.html b/docs/api/javascript/module_selenium-webdriver_phantomjs.html index 46e823b89efd4..a4fd791508b45 100644 --- a/docs/api/javascript/module_selenium-webdriver_phantomjs.html +++ b/docs/api/javascript/module_selenium-webdriver_phantomjs.html @@ -1 +1 @@ -selenium-webdriver/phantomjs

Module selenium-webdriver/phantomjs

code »
Show:

Functions

code »createDriver ( opt_capabilities )!webdriver.WebDriver

Creates a new PhantomJS WebDriver client.

Parameters
opt_capabilities: webdriver.Capabilities=
The desired capabilities.
Returns
A new WebDriver instance.
\ No newline at end of file +selenium-webdriver/phantomjs

Module selenium-webdriver/phantomjs

code »
Show:

Functions

code »createDriver ( opt_capabilities )!webdriver.WebDriver

Creates a new PhantomJS WebDriver client.

Parameters
opt_capabilities: webdriver.Capabilities=
The desired capabilities.
Returns
A new WebDriver instance.
\ No newline at end of file diff --git a/docs/api/javascript/module_selenium-webdriver_proxy.html b/docs/api/javascript/module_selenium-webdriver_proxy.html index 06b37f2357f27..67b9e60b66fa2 100644 --- a/docs/api/javascript/module_selenium-webdriver_proxy.html +++ b/docs/api/javascript/module_selenium-webdriver_proxy.html @@ -1,4 +1,4 @@ -selenium-webdriver/proxy

Module selenium-webdriver/proxy

code »

Defines functions for configuring a webdriver proxy: +selenium-webdriver/proxy

Module selenium-webdriver/proxy

code »

Defines functions for configuring a webdriver proxy:


  var webdriver = require('selenium-webdriver'),
      proxy = require('selenium-webdriver/proxy');
diff --git a/docs/api/javascript/module_selenium-webdriver_remote.html b/docs/api/javascript/module_selenium-webdriver_remote.html
index 09b57019ba487..5b260c2f27463 100644
--- a/docs/api/javascript/module_selenium-webdriver_remote.html
+++ b/docs/api/javascript/module_selenium-webdriver_remote.html
@@ -1,4 +1,4 @@
-selenium-webdriver/remote

Module selenium-webdriver/remote

code »

Classes

DriverService
Manages the life and death of a native executable WebDriver server.
SeleniumServer
Manages the life and death of the Selenium standalone server.
Show:

Type Definitions

Configuration options for a DriverService instance. +selenium-webdriver/remote

Module selenium-webdriver/remote

code »

Classes

DriverService
Manages the life and death of a native executable WebDriver server.
SeleniumServer
Manages the life and death of the Selenium standalone server.
Show:

Type Definitions

Configuration options for a DriverService instance.
  • port - The port to start the server on (must be > 0). If the port is provided as a promise, the service will wait for the promise to diff --git a/docs/api/javascript/module_selenium-webdriver_remote_class_SeleniumServer.html b/docs/api/javascript/module_selenium-webdriver_remote_class_SeleniumServer.html index 89992eff1f255..3d496b83040f9 100644 --- a/docs/api/javascript/module_selenium-webdriver_remote_class_SeleniumServer.html +++ b/docs/api/javascript/module_selenium-webdriver_remote_class_SeleniumServer.html @@ -1,6 +1,6 @@ SeleniumServer

    Class SeleniumServer

    code »
    DriverService
       └ SeleniumServer

    Manages the life and death of the Selenium standalone server. The server - may be obtained from https://code.google.com/p/selenium/downloads/list.

    Constructor

    SeleniumServer ( jar, options )
    Parameters
    jar: string
    Path to the Selenium server jar.
    options: !SeleniumServer.Options
    Configuration options for the + may be obtained from http://selenium-release.storage.googleapis.com/index.html.

    Constructor

    SeleniumServer ( jar, options )
    Parameters
    jar: string
    Path to the Selenium server jar.
    options: !SeleniumServer.Options
    Configuration options for the server.
    Throws
    Error
    If an invalid port is specified.
    Show:

    Type Definitions

    Options for the Selenium server:
    • port - The port to start the server on (must be > 0). If the diff --git a/docs/api/javascript/module_selenium-webdriver_testing.html b/docs/api/javascript/module_selenium-webdriver_testing.html index f48db64f1db68..336a5bb301598 100644 --- a/docs/api/javascript/module_selenium-webdriver_testing.html +++ b/docs/api/javascript/module_selenium-webdriver_testing.html @@ -1,4 +1,4 @@ -selenium-webdriver/testing

      Module selenium-webdriver/testing

      code »

      Provides wrappers around the following global functions from +selenium-webdriver/testing

      Module selenium-webdriver/testing

      code »

      Provides wrappers around the following global functions from Mocha's BDD interface:

      • after @@ -60,13 +60,13 @@ }); function maybe() { return Math.random() < 0.5; } -
      Show:

      Functions

      Register a function to call after the current suite finishes.

      Parameters
      fn: function()
      .

      Register a function to call after each test in a suite.

      Parameters
      fn: function()
      .

      Register a function to call before the current suite starts.

      Parameters
      fn: function()
      .

      Register a function to call before each test in a suite.

      Parameters
      fn: function()
      .
      code »describe ( name, fn )

      Registers a new test suite.

      Parameters
      name: string
      The suite name.
      fn: function()=
      The suite function, or undefined to define - a pending test suite.
      code »ignore ( predicateFn )!Object

      Ignores the test chained to this function if the provided predicate returns +

      Show:

      Functions

      Register a function to call after the current suite finishes.

      Parameters
      fn: function()
      .

      Register a function to call after each test in a suite.

      Parameters
      fn: function()
      .

      Register a function to call before the current suite starts.

      Parameters
      fn: function()
      .

      Register a function to call before each test in a suite.

      Parameters
      fn: function()
      .
      code »describe ( name, fn )

      Registers a new test suite.

      Parameters
      name: string
      The suite name.
      fn: function()=
      The suite function, or undefined to define + a pending test suite.
      code »ignore ( predicateFn )!Object

      Ignores the test chained to this function if the provided predicate returns true.

      Parameters
      predicateFn: function(): boolean
      A predicate to call to determine if the test should be suppressed. This function MUST be synchronous.
      Returns
      An object with wrapped versions of #it() and - #describe() that ignore tests as indicated by the predicate.
      code »iit ( name, fn )

      An alias for #it() that flags the test as the only one that should + #describe() that ignore tests as indicated by the predicate.

code »iit ( name, fn )

An alias for #it() that flags the test as the only one that should be run within the current suite.

Parameters
name: string
The test name.
fn: function()=
The test function, or undefined to define - a pending test case.
code »it ( name, fn )

Add a test to the current suite.

Parameters
name: string
The test name.
fn: function()=
The test function, or undefined to define - a pending test case.
code »xdescribe ( name, fn )

Defines a suppressed test suite.

Parameters
name: string
The suite name.
fn: function()=
The suite function, or undefined to define - a pending test suite.
code »xit ( name, fn )

Adds a test to the current suite while suppressing it so it is not run.

Parameters
name: string
The test name.
fn: function()=
The test function, or undefined to define + a pending test case.
code »it ( name, fn )

Add a test to the current suite.

Parameters
name: string
The test name.
fn: function()=
The test function, or undefined to define + a pending test case.
code »xdescribe ( name, fn )

Defines a suppressed test suite.

Parameters
name: string
The suite name.
fn: function()=
The suite function, or undefined to define + a pending test suite.
code »xit ( name, fn )

Adds a test to the current suite while suppressing it so it is not run.

Parameters
name: string
The test name.
fn: function()=
The test function, or undefined to define a pending test case.
\ No newline at end of file diff --git a/docs/api/javascript/module_selenium-webdriver_testing_assert.html b/docs/api/javascript/module_selenium-webdriver_testing_assert.html index 2e91f7d7e2416..d214b1fcb0ff6 100644 --- a/docs/api/javascript/module_selenium-webdriver_testing_assert.html +++ b/docs/api/javascript/module_selenium-webdriver_testing_assert.html @@ -1,4 +1,4 @@ -selenium-webdriver/testing/assert

Module selenium-webdriver/testing/assert

code »

Defines a library that simplifies writing assertions against +selenium-webdriver/testing/assert

Module selenium-webdriver/testing/assert

code »

Defines a library that simplifies writing assertions against promised values.

diff --git a/docs/api/javascript/source/index.js.src.html b/docs/api/javascript/source/index.js.src.html index 712d8830ca16c..b4cc5c65788c2 100644 --- a/docs/api/javascript/source/index.js.src.html +++ b/docs/api/javascript/source/index.js.src.html @@ -1 +1 @@ -index.js

index.js

1// Copyright 2012 Selenium committers
2// Copyright 2012 Software Freedom Conservancy
3//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15
16/**
17 * @fileoverview The main user facing module. Exports WebDriver's primary
18 * public API and provides convenience assessors to certain sub-modules.
19 */
20
21var base = require('./_base');
22var builder = require('./builder');
23var error = require('./error');
24
25
26// NOTE: the remainder of this file is nasty and verbose, but the annotations
27// are necessary to guide the Closure Compiler's type analysis. Without them,
28// we would not be able to extract any meaningful API documentation.
29
30
31/** @type {function(new: webdriver.ActionSequence)} */
32exports.ActionSequence = base.require('webdriver.ActionSequence');
33
34
35/** @type {function(new: builder.Builder)} */
36exports.Builder = builder.Builder;
37
38
39/** @type {webdriver.By.} */
40exports.By = base.require('webdriver.By');
41
42
43/** @type {function(new: webdriver.Capabilities)} */
44exports.Capabilities = base.require('webdriver.Capabilities');
45
46
47/** @type {function(new: webdriver.Command)} */
48exports.Command = base.require('webdriver.Command');
49
50
51/** @type {function(new: webdriver.EventEmitter)} */
52exports.EventEmitter = base.require('webdriver.EventEmitter');
53
54
55/** @type {function(new: webdriver.Session)} */
56exports.Session = base.require('webdriver.Session');
57
58
59/** @type {function(new: webdriver.WebDriver)} */
60exports.WebDriver = base.require('webdriver.WebDriver');
61
62
63/** @type {function(new: webdriver.WebElement)} */
64exports.WebElement = base.require('webdriver.WebElement');
65
66
67// Export the remainder of our API through getters to keep things cleaner
68// when this module is used in a REPL environment.
69
70
71/** @type {webdriver.Browser.} */
72(exports.__defineGetter__('Browser', function() {
73 return base.require('webdriver.Browser');
74}));
75
76
77/** @type {webdriver.Button.} */
78(exports.__defineGetter__('Button', function() {
79 return base.require('webdriver.Button');
80}));
81
82
83/** @type {webdriver.Capability.} */
84(exports.__defineGetter__('Capability', function() {
85 return base.require('webdriver.Capability');
86}));
87
88
89/** @type {webdriver.CommandName.} */
90(exports.__defineGetter__('CommandName', function() {
91 return base.require('webdriver.CommandName');
92}));
93
94
95/** @type {webdriver.Key.} */
96(exports.__defineGetter__('Key', function() {
97 return base.require('webdriver.Key');
98}));
99
100
101/** @type {error.} */
102(exports.__defineGetter__('error', function() {
103 return error;
104}));
105
106
107/** @type {error.} */
108(exports.__defineGetter__('error', function() {
109 return error;
110}));
111
112
113/** @type {webdriver.promise.} */
114(exports.__defineGetter__('promise', function() {
115 return base.exportPublicApi('webdriver.promise');
116}));
117
118
119/** @type {webdriver.stacktrace.} */
120(exports.__defineGetter__('stacktrace', function() {
121 return base.exportPublicApi('webdriver.stacktrace');
122}));
\ No newline at end of file +index.js

index.js

1// Copyright 2012 Selenium committers
2// Copyright 2012 Software Freedom Conservancy
3//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15
16/**
17 * @fileoverview The main user facing module. Exports WebDriver's primary
18 * public API and provides convenience assessors to certain sub-modules.
19 */
20
21var base = require('./_base');
22var builder = require('./builder');
23var error = require('./error');
24
25
26// NOTE: the remainder of this file is nasty and verbose, but the annotations
27// are necessary to guide the Closure Compiler's type analysis. Without them,
28// we would not be able to extract any meaningful API documentation.
29
30
31/** @type {function(new: webdriver.ActionSequence)} */
32exports.ActionSequence = base.require('webdriver.ActionSequence');
33
34
35/** @type {function(new: builder.Builder)} */
36exports.Builder = builder.Builder;
37
38
39/** @type {webdriver.By.} */
40exports.By = base.require('webdriver.By');
41
42
43/** @type {function(new: webdriver.Capabilities)} */
44exports.Capabilities = base.require('webdriver.Capabilities');
45
46
47/** @type {function(new: webdriver.Command)} */
48exports.Command = base.require('webdriver.Command');
49
50
51/** @type {function(new: webdriver.EventEmitter)} */
52exports.EventEmitter = base.require('webdriver.EventEmitter');
53
54
55/** @type {function(new: webdriver.Session)} */
56exports.Session = base.require('webdriver.Session');
57
58
59/** @type {function(new: webdriver.WebDriver)} */
60exports.WebDriver = base.require('webdriver.WebDriver');
61
62
63/** @type {function(new: webdriver.WebElement)} */
64exports.WebElement = base.require('webdriver.WebElement');
65
66
67// Export the remainder of our API through getters to keep things cleaner
68// when this module is used in a REPL environment.
69
70
71/** @type {webdriver.Browser.} */
72(exports.__defineGetter__('Browser', function() {
73 return base.require('webdriver.Browser');
74}));
75
76
77/** @type {webdriver.Button.} */
78(exports.__defineGetter__('Button', function() {
79 return base.require('webdriver.Button');
80}));
81
82
83/** @type {webdriver.Capability.} */
84(exports.__defineGetter__('Capability', function() {
85 return base.require('webdriver.Capability');
86}));
87
88
89/** @type {webdriver.CommandName.} */
90(exports.__defineGetter__('CommandName', function() {
91 return base.require('webdriver.CommandName');
92}));
93
94
95/** @type {webdriver.Key.} */
96(exports.__defineGetter__('Key', function() {
97 return base.require('webdriver.Key');
98}));
99
100
101/** @type {error.} */
102(exports.__defineGetter__('error', function() {
103 return error;
104}));
105
106
107/** @type {error.} */
108(exports.__defineGetter__('error', function() {
109 return error;
110}));
111
112
113/** @type {webdriver.logging.} */
114(exports.__defineGetter__('logging', function() {
115 return base.exportPublicApi('webdriver.logging');
116}));
117
118
119/** @type {webdriver.promise.} */
120(exports.__defineGetter__('promise', function() {
121 return base.exportPublicApi('webdriver.promise');
122}));
123
124
125/** @type {webdriver.stacktrace.} */
126(exports.__defineGetter__('stacktrace', function() {
127 return base.exportPublicApi('webdriver.stacktrace');
128}));
\ No newline at end of file diff --git a/docs/api/javascript/source/lib/goog/deps.js.src.html b/docs/api/javascript/source/lib/goog/deps.js.src.html index fffd0457bfca0..c3c1eacf0a0a4 100644 --- a/docs/api/javascript/source/lib/goog/deps.js.src.html +++ b/docs/api/javascript/source/lib/goog/deps.js.src.html @@ -1 +1 @@ -deps.js

lib/goog/deps.js

1// This file has been auto-generated; do not edit by hand
2goog.addDependency("../atoms/error.js", ["bot.Error","bot.ErrorCode"], []);
3goog.addDependency("../atoms/response.js", ["bot.response","bot.response.ResponseObject"], ["bot.Error","bot.ErrorCode"]);
4goog.addDependency("../atoms/json.js", ["bot.json"], ["bot.userAgent","goog.json","goog.userAgent"]);
5goog.addDependency("../atoms/userAgent.js", ["bot.userAgent"], ["goog.string","goog.userAgent","goog.userAgent.product","goog.userAgent.product.isVersion"]);
6goog.addDependency("string/string.js", ["goog.string","goog.string.Unicode"], []);
7goog.addDependency("useragent/useragent.js", ["goog.userAgent"], ["goog.string"]);
8goog.addDependency("useragent/product.js", ["goog.userAgent.product"], ["goog.userAgent"]);
9goog.addDependency("useragent/product_isversion.js", ["goog.userAgent.product.isVersion"], ["goog.userAgent.product"]);
10goog.addDependency("json/json.js", ["goog.json","goog.json.Serializer"], []);
11goog.addDependency("../webdriver/abstractbuilder.js", ["webdriver.AbstractBuilder"], ["webdriver.Capabilities","webdriver.process"]);
12goog.addDependency("../webdriver/capabilities.js", ["webdriver.Browser","webdriver.Capabilities","webdriver.Capability"], []);
13goog.addDependency("../webdriver/process.js", ["webdriver.process"], ["goog.Uri","goog.array","goog.json"]);
14goog.addDependency("uri/uri.js", ["goog.Uri","goog.Uri.QueryData"], ["goog.array","goog.string","goog.structs","goog.structs.Map","goog.uri.utils","goog.uri.utils.ComponentIndex","goog.uri.utils.StandardQueryParam"]);
15goog.addDependency("array/array.js", ["goog.array","goog.array.ArrayLike"], ["goog.asserts"]);
16goog.addDependency("asserts/asserts.js", ["goog.asserts","goog.asserts.AssertionError"], ["goog.debug.Error","goog.string"]);
17goog.addDependency("debug/error.js", ["goog.debug.Error"], []);
18goog.addDependency("structs/structs.js", ["goog.structs"], ["goog.array","goog.object"]);
19goog.addDependency("object/object.js", ["goog.object"], []);
20goog.addDependency("structs/map.js", ["goog.structs.Map"], ["goog.iter.Iterator","goog.iter.StopIteration","goog.object"]);
21goog.addDependency("iter/iter.js", ["goog.iter","goog.iter.Iterator","goog.iter.StopIteration"], ["goog.array","goog.asserts"]);
22goog.addDependency("uri/utils.js", ["goog.uri.utils","goog.uri.utils.ComponentIndex","goog.uri.utils.QueryArray","goog.uri.utils.QueryValue","goog.uri.utils.StandardQueryParam"], ["goog.asserts","goog.string","goog.userAgent"]);
23goog.addDependency("../webdriver/actionsequence.js", ["webdriver.ActionSequence"], ["goog.array","webdriver.Button","webdriver.Command","webdriver.CommandName","webdriver.Key"]);
24goog.addDependency("../webdriver/button.js", ["webdriver.Button"], []);
25goog.addDependency("../webdriver/command.js", ["webdriver.Command","webdriver.CommandExecutor","webdriver.CommandName"], []);
26goog.addDependency("../webdriver/key.js", ["webdriver.Key"], []);
27goog.addDependency("../webdriver/builder.js", ["webdriver.Builder"], ["goog.userAgent","webdriver.AbstractBuilder","webdriver.FirefoxDomExecutor","webdriver.WebDriver","webdriver.http.CorsClient","webdriver.http.Executor","webdriver.http.XhrClient","webdriver.process"]);
28goog.addDependency("../webdriver/firefoxdomexecutor.js", ["webdriver.FirefoxDomExecutor"], ["bot.response","goog.json","goog.userAgent.product","webdriver.Command","webdriver.CommandName"]);
29goog.addDependency("../webdriver/webdriver.js", ["webdriver.Alert","webdriver.UnhandledAlertError","webdriver.WebDriver","webdriver.WebElement"], ["bot.Error","bot.ErrorCode","bot.response","goog.array","goog.object","webdriver.ActionSequence","webdriver.Command","webdriver.CommandName","webdriver.Key","webdriver.Locator","webdriver.Session","webdriver.logging","webdriver.promise"]);
30goog.addDependency("../webdriver/locators.js", ["webdriver.By","webdriver.Locator","webdriver.Locator.Strategy"], ["goog.array","goog.object","goog.string"]);
31goog.addDependency("../webdriver/session.js", ["webdriver.Session"], ["webdriver.Capabilities"]);
32goog.addDependency("../webdriver/logging.js", ["webdriver.logging","webdriver.logging.Preferences"], ["goog.object"]);
33goog.addDependency("../webdriver/promise.js", ["webdriver.promise","webdriver.promise.ControlFlow","webdriver.promise.ControlFlow.Timer","webdriver.promise.Deferred","webdriver.promise.Promise"], ["goog.array","goog.debug.Error","goog.object","webdriver.EventEmitter","webdriver.stacktrace.Snapshot"]);
34goog.addDependency("../webdriver/events.js", ["webdriver.EventEmitter"], []);
35goog.addDependency("../webdriver/stacktrace.js", ["webdriver.stacktrace","webdriver.stacktrace.Snapshot"], ["goog.array","goog.string","goog.userAgent"]);
36goog.addDependency("../webdriver/http/corsclient.js", ["webdriver.http.CorsClient"], ["goog.json","webdriver.http.Response"]);
37goog.addDependency("../webdriver/http/http.js", ["webdriver.http.Client","webdriver.http.Executor","webdriver.http.Request","webdriver.http.Response"], ["bot.ErrorCode","goog.array","goog.json","webdriver.CommandName","webdriver.promise.Deferred"]);
38goog.addDependency("../webdriver/http/xhrclient.js", ["webdriver.http.XhrClient"], ["goog.json","goog.net.XmlHttp","webdriver.http.Response"]);
39goog.addDependency("net/xmlhttp.js", ["goog.net.DefaultXmlHttpFactory","goog.net.XmlHttp","goog.net.XmlHttp.OptionType","goog.net.XmlHttp.ReadyState"], ["goog.net.WrapperXmlHttpFactory","goog.net.XmlHttpFactory"]);
40goog.addDependency("net/wrapperxmlhttpfactory.js", ["goog.net.WrapperXmlHttpFactory"], ["goog.net.XmlHttpFactory"]);
41goog.addDependency("net/xmlhttpfactory.js", ["goog.net.XmlHttpFactory"], []);
42goog.addDependency("../webdriver/testing/asserts.js", ["webdriver.testing.Assertion","webdriver.testing.ContainsMatcher","webdriver.testing.NegatedAssertion","webdriver.testing.assert","webdriver.testing.asserts"], ["goog.array","goog.labs.testing.CloseToMatcher","goog.labs.testing.EndsWithMatcher","goog.labs.testing.EqualToMatcher","goog.labs.testing.EqualsMatcher","goog.labs.testing.GreaterThanEqualToMatcher","goog.labs.testing.GreaterThanMatcher","goog.labs.testing.LessThanEqualToMatcher","goog.labs.testing.LessThanMatcher","goog.labs.testing.InstanceOfMatcher","goog.labs.testing.IsNotMatcher","goog.labs.testing.IsNullMatcher","goog.labs.testing.IsNullOrUndefinedMatcher","goog.labs.testing.IsUndefinedMatcher","goog.labs.testing.Matcher","goog.labs.testing.ObjectEqualsMatcher","goog.labs.testing.RegexMatcher","goog.labs.testing.StartsWithMatcher","goog.labs.testing.assertThat","goog.string","webdriver.promise"]);
43goog.addDependency("labs/testing/numbermatcher.js", ["goog.labs.testing.CloseToMatcher","goog.labs.testing.EqualToMatcher","goog.labs.testing.GreaterThanEqualToMatcher","goog.labs.testing.GreaterThanMatcher","goog.labs.testing.LessThanEqualToMatcher","goog.labs.testing.LessThanMatcher"], ["goog.asserts","goog.labs.testing.Matcher"]);
44goog.addDependency("labs/testing/matcher.js", ["goog.labs.testing.Matcher"], []);
45goog.addDependency("labs/testing/stringmatcher.js", ["goog.labs.testing.ContainsStringMatcher","goog.labs.testing.EndsWithMatcher","goog.labs.testing.EqualToIgnoringCaseMatcher","goog.labs.testing.EqualToIgnoringWhitespaceMatcher","goog.labs.testing.EqualsMatcher","goog.labs.testing.RegexMatcher","goog.labs.testing.StartsWithMatcher","goog.labs.testing.StringContainsInOrderMatcher"], ["goog.asserts","goog.labs.testing.Matcher","goog.string"]);
46goog.addDependency("labs/testing/objectmatcher.js", ["goog.labs.testing.HasPropertyMatcher","goog.labs.testing.InstanceOfMatcher","goog.labs.testing.IsNullMatcher","goog.labs.testing.IsNullOrUndefinedMatcher","goog.labs.testing.IsUndefinedMatcher","goog.labs.testing.ObjectEqualsMatcher"], ["goog.labs.testing.Matcher","goog.string"]);
47goog.addDependency("labs/testing/logicmatcher.js", ["goog.labs.testing.AllOfMatcher","goog.labs.testing.AnyOfMatcher","goog.labs.testing.IsNotMatcher"], ["goog.array","goog.labs.testing.Matcher"]);
48goog.addDependency("labs/testing/assertthat.js", ["goog.labs.testing.MatcherError","goog.labs.testing.assertThat"], ["goog.asserts","goog.debug.Error","goog.labs.testing.Matcher"]);
\ No newline at end of file +deps.js

lib/goog/deps.js

1// This file has been auto-generated; do not edit by hand
2goog.addDependency("../atoms/error.js", ["bot.Error","bot.ErrorCode"], []);
3goog.addDependency("../atoms/response.js", ["bot.response","bot.response.ResponseObject"], ["bot.Error","bot.ErrorCode"]);
4goog.addDependency("../atoms/json.js", ["bot.json"], ["bot.userAgent","goog.json","goog.userAgent"]);
5goog.addDependency("../atoms/userAgent.js", ["bot.userAgent"], ["goog.string","goog.userAgent","goog.userAgent.product","goog.userAgent.product.isVersion"]);
6goog.addDependency("string/string.js", ["goog.string","goog.string.Unicode"], []);
7goog.addDependency("useragent/useragent.js", ["goog.userAgent"], ["goog.string"]);
8goog.addDependency("useragent/product.js", ["goog.userAgent.product"], ["goog.userAgent"]);
9goog.addDependency("useragent/product_isversion.js", ["goog.userAgent.product.isVersion"], ["goog.userAgent.product"]);
10goog.addDependency("json/json.js", ["goog.json","goog.json.Serializer"], []);
11goog.addDependency("../webdriver/capabilities.js", ["webdriver.Browser","webdriver.Capabilities","webdriver.Capability"], []);
12goog.addDependency("../webdriver/logging.js", ["webdriver.logging","webdriver.logging.Preferences"], ["goog.object"]);
13goog.addDependency("object/object.js", ["goog.object"], []);
14goog.addDependency("../webdriver/actionsequence.js", ["webdriver.ActionSequence"], ["goog.array","webdriver.Button","webdriver.Command","webdriver.CommandName","webdriver.Key"]);
15goog.addDependency("array/array.js", ["goog.array","goog.array.ArrayLike"], ["goog.asserts"]);
16goog.addDependency("asserts/asserts.js", ["goog.asserts","goog.asserts.AssertionError"], ["goog.debug.Error","goog.string"]);
17goog.addDependency("debug/error.js", ["goog.debug.Error"], []);
18goog.addDependency("../webdriver/button.js", ["webdriver.Button"], []);
19goog.addDependency("../webdriver/command.js", ["webdriver.Command","webdriver.CommandExecutor","webdriver.CommandName"], []);
20goog.addDependency("../webdriver/key.js", ["webdriver.Key"], []);
21goog.addDependency("../webdriver/stacktrace.js", ["webdriver.stacktrace","webdriver.stacktrace.Snapshot"], ["goog.array","goog.string","goog.userAgent"]);
22goog.addDependency("../webdriver/locators.js", ["webdriver.By","webdriver.Locator","webdriver.Locator.Strategy"], ["goog.array","goog.object","goog.string"]);
23goog.addDependency("../webdriver/promise.js", ["webdriver.promise","webdriver.promise.ControlFlow","webdriver.promise.ControlFlow.Timer","webdriver.promise.Deferred","webdriver.promise.Promise"], ["goog.array","goog.debug.Error","goog.object","webdriver.EventEmitter","webdriver.stacktrace.Snapshot"]);
24goog.addDependency("../webdriver/events.js", ["webdriver.EventEmitter"], []);
25goog.addDependency("../webdriver/process.js", ["webdriver.process"], ["goog.Uri","goog.array","goog.json"]);
26goog.addDependency("uri/uri.js", ["goog.Uri","goog.Uri.QueryData"], ["goog.array","goog.string","goog.structs","goog.structs.Map","goog.uri.utils","goog.uri.utils.ComponentIndex","goog.uri.utils.StandardQueryParam"]);
27goog.addDependency("structs/structs.js", ["goog.structs"], ["goog.array","goog.object"]);
28goog.addDependency("structs/map.js", ["goog.structs.Map"], ["goog.iter.Iterator","goog.iter.StopIteration","goog.object"]);
29goog.addDependency("iter/iter.js", ["goog.iter","goog.iter.Iterator","goog.iter.StopIteration"], ["goog.array","goog.asserts"]);
30goog.addDependency("uri/utils.js", ["goog.uri.utils","goog.uri.utils.ComponentIndex","goog.uri.utils.QueryArray","goog.uri.utils.QueryValue","goog.uri.utils.StandardQueryParam"], ["goog.asserts","goog.string","goog.userAgent"]);
31goog.addDependency("../webdriver/webdriver.js", ["webdriver.Alert","webdriver.UnhandledAlertError","webdriver.WebDriver","webdriver.WebElement"], ["bot.Error","bot.ErrorCode","bot.response","goog.array","goog.object","webdriver.ActionSequence","webdriver.Command","webdriver.CommandName","webdriver.Key","webdriver.Locator","webdriver.Session","webdriver.logging","webdriver.promise"]);
32goog.addDependency("../webdriver/session.js", ["webdriver.Session"], ["webdriver.Capabilities"]);
33goog.addDependency("../webdriver/builder.js", ["webdriver.Builder"], ["goog.userAgent","webdriver.AbstractBuilder","webdriver.FirefoxDomExecutor","webdriver.WebDriver","webdriver.http.CorsClient","webdriver.http.Executor","webdriver.http.XhrClient","webdriver.process"]);
34goog.addDependency("../webdriver/abstractbuilder.js", ["webdriver.AbstractBuilder"], ["webdriver.Capabilities","webdriver.process"]);
35goog.addDependency("../webdriver/firefoxdomexecutor.js", ["webdriver.FirefoxDomExecutor"], ["bot.response","goog.json","goog.userAgent.product","webdriver.Command","webdriver.CommandName"]);
36goog.addDependency("../webdriver/http/corsclient.js", ["webdriver.http.CorsClient"], ["goog.json","webdriver.http.Response"]);
37goog.addDependency("../webdriver/http/http.js", ["webdriver.http.Client","webdriver.http.Executor","webdriver.http.Request","webdriver.http.Response"], ["bot.ErrorCode","goog.array","goog.json","webdriver.CommandName","webdriver.promise.Deferred"]);
38goog.addDependency("../webdriver/http/xhrclient.js", ["webdriver.http.XhrClient"], ["goog.json","goog.net.XmlHttp","webdriver.http.Response"]);
39goog.addDependency("net/xmlhttp.js", ["goog.net.DefaultXmlHttpFactory","goog.net.XmlHttp","goog.net.XmlHttp.OptionType","goog.net.XmlHttp.ReadyState"], ["goog.net.WrapperXmlHttpFactory","goog.net.XmlHttpFactory"]);
40goog.addDependency("net/wrapperxmlhttpfactory.js", ["goog.net.WrapperXmlHttpFactory"], ["goog.net.XmlHttpFactory"]);
41goog.addDependency("net/xmlhttpfactory.js", ["goog.net.XmlHttpFactory"], []);
42goog.addDependency("../webdriver/testing/asserts.js", ["webdriver.testing.Assertion","webdriver.testing.ContainsMatcher","webdriver.testing.NegatedAssertion","webdriver.testing.assert","webdriver.testing.asserts"], ["goog.array","goog.labs.testing.CloseToMatcher","goog.labs.testing.EndsWithMatcher","goog.labs.testing.EqualToMatcher","goog.labs.testing.EqualsMatcher","goog.labs.testing.GreaterThanEqualToMatcher","goog.labs.testing.GreaterThanMatcher","goog.labs.testing.LessThanEqualToMatcher","goog.labs.testing.LessThanMatcher","goog.labs.testing.InstanceOfMatcher","goog.labs.testing.IsNotMatcher","goog.labs.testing.IsNullMatcher","goog.labs.testing.IsNullOrUndefinedMatcher","goog.labs.testing.IsUndefinedMatcher","goog.labs.testing.Matcher","goog.labs.testing.ObjectEqualsMatcher","goog.labs.testing.RegexMatcher","goog.labs.testing.StartsWithMatcher","goog.labs.testing.assertThat","goog.string","webdriver.promise"]);
43goog.addDependency("labs/testing/numbermatcher.js", ["goog.labs.testing.CloseToMatcher","goog.labs.testing.EqualToMatcher","goog.labs.testing.GreaterThanEqualToMatcher","goog.labs.testing.GreaterThanMatcher","goog.labs.testing.LessThanEqualToMatcher","goog.labs.testing.LessThanMatcher"], ["goog.asserts","goog.labs.testing.Matcher"]);
44goog.addDependency("labs/testing/matcher.js", ["goog.labs.testing.Matcher"], []);
45goog.addDependency("labs/testing/stringmatcher.js", ["goog.labs.testing.ContainsStringMatcher","goog.labs.testing.EndsWithMatcher","goog.labs.testing.EqualToIgnoringCaseMatcher","goog.labs.testing.EqualToIgnoringWhitespaceMatcher","goog.labs.testing.EqualsMatcher","goog.labs.testing.RegexMatcher","goog.labs.testing.StartsWithMatcher","goog.labs.testing.StringContainsInOrderMatcher"], ["goog.asserts","goog.labs.testing.Matcher","goog.string"]);
46goog.addDependency("labs/testing/objectmatcher.js", ["goog.labs.testing.HasPropertyMatcher","goog.labs.testing.InstanceOfMatcher","goog.labs.testing.IsNullMatcher","goog.labs.testing.IsNullOrUndefinedMatcher","goog.labs.testing.IsUndefinedMatcher","goog.labs.testing.ObjectEqualsMatcher"], ["goog.labs.testing.Matcher","goog.string"]);
47goog.addDependency("labs/testing/logicmatcher.js", ["goog.labs.testing.AllOfMatcher","goog.labs.testing.AnyOfMatcher","goog.labs.testing.IsNotMatcher"], ["goog.array","goog.labs.testing.Matcher"]);
48goog.addDependency("labs/testing/assertthat.js", ["goog.labs.testing.MatcherError","goog.labs.testing.assertThat"], ["goog.asserts","goog.debug.Error","goog.labs.testing.Matcher"]);
\ No newline at end of file diff --git a/docs/api/javascript/source/remote/index.js.src.html b/docs/api/javascript/source/remote/index.js.src.html index 52e5d748462ed..a6a3b48e78b03 100644 --- a/docs/api/javascript/source/remote/index.js.src.html +++ b/docs/api/javascript/source/remote/index.js.src.html @@ -1 +1 @@ -index.js

remote/index.js

1// Copyright 2013 Software Freedom Conservancy
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15'use strict';
16
17var spawn = require('child_process').spawn,
18 os = require('os'),
19 path = require('path'),
20 url = require('url'),
21 util = require('util');
22
23var promise = require('../').promise,
24 httpUtil = require('../http/util'),
25 net = require('../net'),
26 portprober = require('../net/portprober');
27
28
29
30/**
31 * Configuration options for a DriverService instance.
32 * <ul>
33 * <li>{@code port} - The port to start the server on (must be > 0). If the
34 * port is provided as a promise, the service will wait for the promise to
35 * resolve before starting.
36 * <li>{@code args} - The arguments to pass to the service. If a promise is
37 * provided, the service will wait for it to resolve before starting.
38 * <li>{@code path} - The base path on the server for the WebDriver wire
39 * protocol (e.g. '/wd/hub'). Defaults to '/'.
40 * <li>{@code env} - The environment variables that should be visible to the
41 * server process. Defaults to inheriting the current process's
42 * environment.
43 * <li>{@code stdio} - IO configuration for the spawned server process. For
44 * more information, refer to the documentation of
45 * {@code child_process.spawn}.
46 * </ul>
47 *
48 * @typedef {{
49 * port: (number|!webdriver.promise.Promise.<number>),
50 * args: !(Array.<string>|webdriver.promise.Promise.<!Array.<string>>),
51 * path: (string|undefined),
52 * env: (!Object.<string, string>|undefined),
53 * stdio: (string|!Array.<string|number|!Stream|null|undefined>|undefined)
54 * }}
55 */
56var ServiceOptions;
57
58
59/**
60 * Manages the life and death of a native executable WebDriver server.
61 *
62 * <p>It is expected that the driver server implements the
63 * <a href="http://code.google.com/p/selenium/wiki/JsonWireProtocol">WebDriver
64 * Wire Protocol</a>. Furthermore, the managed server should support multiple
65 * concurrent sessions, so that this class may be reused for multiple clients.
66 *
67 * @param {string} executable Path to the executable to run.
68 * @param {!ServiceOptions} options Configuration options for the service.
69 * @constructor
70 */
71function DriverService(executable, options) {
72
73 /** @private {string} */
74 this.executable_ = executable;
75
76 /** @private {(number|!webdriver.promise.Promise.<number>)} */
77 this.port_ = options.port;
78
79 /**
80 * @private {!(Array.<string>|webdriver.promise.Promise.<!Array.<string>>)}
81 */
82 this.args_ = options.args;
83
84 /** @private {string} */
85 this.path_ = options.path || '/';
86
87 /** @private {!Object.<string, string>} */
88 this.env_ = options.env || process.env;
89
90 /** @private {(string|!Array.<string|number|!Stream|null|undefined>)} */
91 this.stdio_ = options.stdio || 'ignore';
92}
93
94
95/**
96 * The default amount of time, in milliseconds, to wait for the server to
97 * start.
98 * @type {number}
99 */
100DriverService.DEFAULT_START_TIMEOUT_MS = 30 * 1000;
101
102
103/** @private {child_process.ChildProcess} */
104DriverService.prototype.process_ = null;
105
106
107/**
108 * Promise that resolves to the server's address or null if the server has not
109 * been started.
110 * @private {webdriver.promise.Promise.<string>}
111 */
112DriverService.prototype.address_ = null;
113
114
115/**
116 * Promise that tracks the status of shutting down the server, or null if the
117 * server is not currently shutting down.
118 * @private {webdriver.promise.Promise}
119 */
120DriverService.prototype.shutdownHook_ = null;
121
122
123/**
124 * @return {!webdriver.promise.Promise.<string>} A promise that resolves to
125 * the server's address.
126 * @throws {Error} If the server has not been started.
127 */
128DriverService.prototype.address = function() {
129 if (this.address_) {
130 return this.address_;
131 }
132 throw Error('Server has not been started.');
133};
134
135
136/**
137 * @return {boolean} Whether the underlying service process is running.
138 */
139DriverService.prototype.isRunning = function() {
140 return !!this.address_;
141};
142
143
144/**
145 * Starts the server if it is not already running.
146 * @param {number=} opt_timeoutMs How long to wait, in milliseconds, for the
147 * server to start accepting requests. Defaults to 30 seconds.
148 * @return {!webdriver.promise.Promise.<string>} A promise that will resolve
149 * to the server's base URL when it has started accepting requests. If the
150 * timeout expires before the server has started, the promise will be
151 * rejected.
152 */
153DriverService.prototype.start = function(opt_timeoutMs) {
154 if (this.address_) {
155 return this.address_;
156 }
157
158 var timeout = opt_timeoutMs || DriverService.DEFAULT_START_TIMEOUT_MS;
159
160 var self = this;
161 this.address_ = promise.defer();
162 this.address_.fulfill(promise.when(this.port_, function(port) {
163 if (port <= 0) {
164 throw Error('Port must be > 0: ' + port);
165 }
166 return promise.when(self.args_, function(args) {
167 self.process_ = spawn(self.executable_, args, {
168 env: self.env_,
169 stdio: self.stdio_
170 }).once('exit', onServerExit);
171
172 // This process should not wait on the spawned child, however, we do
173 // want to ensure the child is killed when this process exits.
174 self.process_.unref();
175 process.once('exit', killServer);
176
177 var serverUrl = url.format({
178 protocol: 'http',
179 hostname: net.getAddress() || net.getLoopbackAddress(),
180 port: port,
181 pathname: self.path_
182 });
183
184 return httpUtil.waitForServer(serverUrl, timeout).then(function() {
185 return serverUrl;
186 });
187 });
188 }));
189
190 return this.address_;
191
192 function onServerExit(code, signal) {
193 self.address_.reject(code == null ?
194 Error('Server was killed with ' + signal) :
195 Error('Server exited with ' + code));
196
197 if (self.shutdownHook_) {
198 self.shutdownHook_.fulfill();
199 }
200
201 self.shutdownHook_ = null;
202 self.address_ = null;
203 self.process_ = null;
204 process.removeListener('exit', killServer);
205 }
206
207 function killServer() {
208 process.removeListener('exit', killServer);
209 self.process_ && self.process_.kill('SIGTERM');
210 }
211};
212
213
214/**
215 * Stops the service if it is not currently running. This function will kill
216 * the server immediately. To synchronize with the active control flow, use
217 * {@link #stop()}.
218 * @return {!webdriver.promise.Promise} A promise that will be resolved when
219 * the server has been stopped.
220 */
221DriverService.prototype.kill = function() {
222 if (!this.address_) {
223 return promise.fulfilled(); // Not currently running.
224 }
225
226 if (!this.shutdownHook_) {
227 // No process: still starting; wait on address.
228 // Otherwise, kill the process now. Exit handler will resolve the
229 // shutdown hook.
230 if (this.process_) {
231 this.shutdownHook_ = promise.defer();
232 this.process_.kill('SIGTERM');
233 } else {
234 var self = this;
235 this.shutdownHook_ = this.address_.thenFinally(function() {
236 self.process_ && self.process_.kill('SIGTERM');
237 });
238 }
239 }
240
241 return this.shutdownHook_;
242};
243
244
245/**
246 * Schedules a task in the current control flow to stop the server if it is
247 * currently running.
248 * @return {!webdriver.promise.Promise} A promise that will be resolved when
249 * the server has been stopped.
250 */
251DriverService.prototype.stop = function() {
252 return promise.controlFlow().execute(this.kill.bind(this));
253};
254
255
256
257/**
258 * Manages the life and death of the Selenium standalone server. The server
259 * may be obtained from https://code.google.com/p/selenium/downloads/list.
260 * @param {string} jar Path to the Selenium server jar.
261 * @param {!SeleniumServer.Options} options Configuration options for the
262 * server.
263 * @throws {Error} If an invalid port is specified.
264 * @constructor
265 * @extends {DriverService}
266 */
267function SeleniumServer(jar, options) {
268 if (options.port < 0)
269 throw Error('Port must be >= 0: ' + options.port);
270
271 var port = options.port || portprober.findFreePort();
272 var args = promise.when(options.jvmArgs || [], function(jvmArgs) {
273 return promise.when(options.args || [], function(args) {
274 return promise.when(port, function(port) {
275 return jvmArgs.concat(['-jar', jar, '-port', port]).concat(args);
276 });
277 });
278 });
279
280 DriverService.call(this, 'java', {
281 port: port,
282 args: args,
283 path: '/wd/hub',
284 env: options.env,
285 stdio: options.stdio
286 });
287}
288util.inherits(SeleniumServer, DriverService);
289
290
291/**
292 * Options for the Selenium server:
293 * <ul>
294 * <li>{@code port} - The port to start the server on (must be > 0). If the
295 * port is provided as a promise, the service will wait for the promise to
296 * resolve before starting.
297 * <li>{@code args} - The arguments to pass to the service. If a promise is
298 * provided, the service will wait for it to resolve before starting.
299 * <li>{@code jvmArgs} - The arguments to pass to the JVM. If a promise is
300 * provided, the service will wait for it to resolve before starting.
301 * <li>{@code env} - The environment variables that should be visible to the
302 * server process. Defaults to inheriting the current process's
303 * environment.
304 * <li>{@code stdio} - IO configuration for the spawned server process. For
305 * more information, refer to the documentation of
306 * {@code child_process.spawn}.
307 * </ul>
308 *
309 * @typedef {{
310 * port: (number|!webdriver.promise.Promise.<number>),
311 * args: !(Array.<string>|webdriver.promise.Promise.<!Array.<string>>),
312 * jvmArgs: (!Array.<string>|
313 * !webdriver.promise.Promise.<!Array.<string>>|
314 * undefined),
315 * env: (!Object.<string, string>|undefined),
316 * stdio: (string|!Array.<string|number|!Stream|null|undefined>|undefined)
317 * }}
318 */
319SeleniumServer.Options;
320
321
322// PUBLIC API
323
324exports.DriverService = DriverService;
325exports.SeleniumServer = SeleniumServer;
\ No newline at end of file +index.js

remote/index.js

1// Copyright 2013 Software Freedom Conservancy
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15'use strict';
16
17var spawn = require('child_process').spawn,
18 os = require('os'),
19 path = require('path'),
20 url = require('url'),
21 util = require('util');
22
23var promise = require('../').promise,
24 httpUtil = require('../http/util'),
25 net = require('../net'),
26 portprober = require('../net/portprober');
27
28
29
30/**
31 * Configuration options for a DriverService instance.
32 * <ul>
33 * <li>{@code port} - The port to start the server on (must be > 0). If the
34 * port is provided as a promise, the service will wait for the promise to
35 * resolve before starting.
36 * <li>{@code args} - The arguments to pass to the service. If a promise is
37 * provided, the service will wait for it to resolve before starting.
38 * <li>{@code path} - The base path on the server for the WebDriver wire
39 * protocol (e.g. '/wd/hub'). Defaults to '/'.
40 * <li>{@code env} - The environment variables that should be visible to the
41 * server process. Defaults to inheriting the current process's
42 * environment.
43 * <li>{@code stdio} - IO configuration for the spawned server process. For
44 * more information, refer to the documentation of
45 * {@code child_process.spawn}.
46 * </ul>
47 *
48 * @typedef {{
49 * port: (number|!webdriver.promise.Promise.<number>),
50 * args: !(Array.<string>|webdriver.promise.Promise.<!Array.<string>>),
51 * path: (string|undefined),
52 * env: (!Object.<string, string>|undefined),
53 * stdio: (string|!Array.<string|number|!Stream|null|undefined>|undefined)
54 * }}
55 */
56var ServiceOptions;
57
58
59/**
60 * Manages the life and death of a native executable WebDriver server.
61 *
62 * <p>It is expected that the driver server implements the
63 * <a href="http://code.google.com/p/selenium/wiki/JsonWireProtocol">WebDriver
64 * Wire Protocol</a>. Furthermore, the managed server should support multiple
65 * concurrent sessions, so that this class may be reused for multiple clients.
66 *
67 * @param {string} executable Path to the executable to run.
68 * @param {!ServiceOptions} options Configuration options for the service.
69 * @constructor
70 */
71function DriverService(executable, options) {
72
73 /** @private {string} */
74 this.executable_ = executable;
75
76 /** @private {(number|!webdriver.promise.Promise.<number>)} */
77 this.port_ = options.port;
78
79 /**
80 * @private {!(Array.<string>|webdriver.promise.Promise.<!Array.<string>>)}
81 */
82 this.args_ = options.args;
83
84 /** @private {string} */
85 this.path_ = options.path || '/';
86
87 /** @private {!Object.<string, string>} */
88 this.env_ = options.env || process.env;
89
90 /** @private {(string|!Array.<string|number|!Stream|null|undefined>)} */
91 this.stdio_ = options.stdio || 'ignore';
92}
93
94
95/**
96 * The default amount of time, in milliseconds, to wait for the server to
97 * start.
98 * @type {number}
99 */
100DriverService.DEFAULT_START_TIMEOUT_MS = 30 * 1000;
101
102
103/** @private {child_process.ChildProcess} */
104DriverService.prototype.process_ = null;
105
106
107/**
108 * Promise that resolves to the server's address or null if the server has not
109 * been started.
110 * @private {webdriver.promise.Promise.<string>}
111 */
112DriverService.prototype.address_ = null;
113
114
115/**
116 * Promise that tracks the status of shutting down the server, or null if the
117 * server is not currently shutting down.
118 * @private {webdriver.promise.Promise}
119 */
120DriverService.prototype.shutdownHook_ = null;
121
122
123/**
124 * @return {!webdriver.promise.Promise.<string>} A promise that resolves to
125 * the server's address.
126 * @throws {Error} If the server has not been started.
127 */
128DriverService.prototype.address = function() {
129 if (this.address_) {
130 return this.address_;
131 }
132 throw Error('Server has not been started.');
133};
134
135
136/**
137 * @return {boolean} Whether the underlying service process is running.
138 */
139DriverService.prototype.isRunning = function() {
140 return !!this.address_;
141};
142
143
144/**
145 * Starts the server if it is not already running.
146 * @param {number=} opt_timeoutMs How long to wait, in milliseconds, for the
147 * server to start accepting requests. Defaults to 30 seconds.
148 * @return {!webdriver.promise.Promise.<string>} A promise that will resolve
149 * to the server's base URL when it has started accepting requests. If the
150 * timeout expires before the server has started, the promise will be
151 * rejected.
152 */
153DriverService.prototype.start = function(opt_timeoutMs) {
154 if (this.address_) {
155 return this.address_;
156 }
157
158 var timeout = opt_timeoutMs || DriverService.DEFAULT_START_TIMEOUT_MS;
159
160 var self = this;
161 this.address_ = promise.defer();
162 this.address_.fulfill(promise.when(this.port_, function(port) {
163 if (port <= 0) {
164 throw Error('Port must be > 0: ' + port);
165 }
166 return promise.when(self.args_, function(args) {
167 self.process_ = spawn(self.executable_, args, {
168 env: self.env_,
169 stdio: self.stdio_
170 }).once('exit', onServerExit);
171
172 // This process should not wait on the spawned child, however, we do
173 // want to ensure the child is killed when this process exits.
174 self.process_.unref();
175 process.once('exit', killServer);
176
177 var serverUrl = url.format({
178 protocol: 'http',
179 hostname: net.getAddress() || net.getLoopbackAddress(),
180 port: port,
181 pathname: self.path_
182 });
183
184 return httpUtil.waitForServer(serverUrl, timeout).then(function() {
185 return serverUrl;
186 });
187 });
188 }));
189
190 return this.address_;
191
192 function onServerExit(code, signal) {
193 self.address_.reject(code == null ?
194 Error('Server was killed with ' + signal) :
195 Error('Server exited with ' + code));
196
197 if (self.shutdownHook_) {
198 self.shutdownHook_.fulfill();
199 }
200
201 self.shutdownHook_ = null;
202 self.address_ = null;
203 self.process_ = null;
204 process.removeListener('exit', killServer);
205 }
206
207 function killServer() {
208 process.removeListener('exit', killServer);
209 self.process_ && self.process_.kill('SIGTERM');
210 }
211};
212
213
214/**
215 * Stops the service if it is not currently running. This function will kill
216 * the server immediately. To synchronize with the active control flow, use
217 * {@link #stop()}.
218 * @return {!webdriver.promise.Promise} A promise that will be resolved when
219 * the server has been stopped.
220 */
221DriverService.prototype.kill = function() {
222 if (!this.address_) {
223 return promise.fulfilled(); // Not currently running.
224 }
225
226 if (!this.shutdownHook_) {
227 // No process: still starting; wait on address.
228 // Otherwise, kill the process now. Exit handler will resolve the
229 // shutdown hook.
230 if (this.process_) {
231 this.shutdownHook_ = promise.defer();
232 this.process_.kill('SIGTERM');
233 } else {
234 var self = this;
235 this.shutdownHook_ = this.address_.thenFinally(function() {
236 self.process_ && self.process_.kill('SIGTERM');
237 });
238 }
239 }
240
241 return this.shutdownHook_;
242};
243
244
245/**
246 * Schedules a task in the current control flow to stop the server if it is
247 * currently running.
248 * @return {!webdriver.promise.Promise} A promise that will be resolved when
249 * the server has been stopped.
250 */
251DriverService.prototype.stop = function() {
252 return promise.controlFlow().execute(this.kill.bind(this));
253};
254
255
256
257/**
258 * Manages the life and death of the Selenium standalone server. The server
259 * may be obtained from http://selenium-release.storage.googleapis.com/index.html.
260 * @param {string} jar Path to the Selenium server jar.
261 * @param {!SeleniumServer.Options} options Configuration options for the
262 * server.
263 * @throws {Error} If an invalid port is specified.
264 * @constructor
265 * @extends {DriverService}
266 */
267function SeleniumServer(jar, options) {
268 if (options.port < 0)
269 throw Error('Port must be >= 0: ' + options.port);
270
271 var port = options.port || portprober.findFreePort();
272 var args = promise.when(options.jvmArgs || [], function(jvmArgs) {
273 return promise.when(options.args || [], function(args) {
274 return promise.when(port, function(port) {
275 return jvmArgs.concat(['-jar', jar, '-port', port]).concat(args);
276 });
277 });
278 });
279
280 DriverService.call(this, 'java', {
281 port: port,
282 args: args,
283 path: '/wd/hub',
284 env: options.env,
285 stdio: options.stdio
286 });
287}
288util.inherits(SeleniumServer, DriverService);
289
290
291/**
292 * Options for the Selenium server:
293 * <ul>
294 * <li>{@code port} - The port to start the server on (must be > 0). If the
295 * port is provided as a promise, the service will wait for the promise to
296 * resolve before starting.
297 * <li>{@code args} - The arguments to pass to the service. If a promise is
298 * provided, the service will wait for it to resolve before starting.
299 * <li>{@code jvmArgs} - The arguments to pass to the JVM. If a promise is
300 * provided, the service will wait for it to resolve before starting.
301 * <li>{@code env} - The environment variables that should be visible to the
302 * server process. Defaults to inheriting the current process's
303 * environment.
304 * <li>{@code stdio} - IO configuration for the spawned server process. For
305 * more information, refer to the documentation of
306 * {@code child_process.spawn}.
307 * </ul>
308 *
309 * @typedef {{
310 * port: (number|!webdriver.promise.Promise.<number>),
311 * args: !(Array.<string>|webdriver.promise.Promise.<!Array.<string>>),
312 * jvmArgs: (!Array.<string>|
313 * !webdriver.promise.Promise.<!Array.<string>>|
314 * undefined),
315 * env: (!Object.<string, string>|undefined),
316 * stdio: (string|!Array.<string|number|!Stream|null|undefined>|undefined)
317 * }}
318 */
319SeleniumServer.Options;
320
321
322// PUBLIC API
323
324exports.DriverService = DriverService;
325exports.SeleniumServer = SeleniumServer;
\ No newline at end of file diff --git a/docs/api/javascript/source/testing/index.js.src.html b/docs/api/javascript/source/testing/index.js.src.html index 6457f7a8d2a40..50496090275b4 100644 --- a/docs/api/javascript/source/testing/index.js.src.html +++ b/docs/api/javascript/source/testing/index.js.src.html @@ -1 +1 @@ -index.js

testing/index.js

1// Copyright 2013 Selenium committers
2// Copyright 2013 Software Freedom Conservancy
3//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15
16/**
17 * @fileoverview Provides wrappers around the following global functions from
18 * <a href="http://visionmedia.github.io/mocha/">Mocha's BDD interface</a>:
19 * <ul>
20 * <li>after
21 * <li>afterEach
22 * <li>before
23 * <li>beforeEach
24 * <li>it
25 * <li>it.only
26 * <li>it.skip
27 * <li>xit
28 * </ul>
29 *
30 * <p>The provided wrappers leverage the webdriver.promise.ControlFlow to
31 * simplify writing asynchronous tests:
32 * <pre><code>
33 * var webdriver = require('selenium-webdriver'),
34 * remote = require('selenium-webdriver/remote'),
35 * test = require('selenium-webdriver/testing');
36 *
37 * test.describe('Google Search', function() {
38 * var driver, server;
39 *
40 * test.before(function() {
41 * server = new remote.SeleniumServer({
42 * jar: 'path/to/selenium-server-standalone.jar'
43 * });
44 * server.start();
45 *
46 * driver = new webdriver.Builder().
47 * withCapabilities({'browserName': 'firefox'}).
48 * usingServer(server.address()).
49 * build();
50 * });
51 *
52 * test.after(function() {
53 * driver.quit();
54 * server.stop();
55 * });
56 *
57 * test.it('should append query to title', function() {
58 * driver.get('http://www.google.com');
59 * driver.findElement(webdriver.By.name('q')).sendKeys('webdriver');
60 * driver.findElement(webdriver.By.name('btnG')).click();
61 * driver.wait(function() {
62 * return driver.getTitle().then(function(title) {
63 * return 'webdriver - Google Search' === title;
64 * });
65 * }, 1000, 'Waiting for title to update');
66 * });
67 * });
68 * </code></pre>
69 *
70 * <p>You may conditionally suppress a test function using the exported
71 * "ignore" function. If the provided predicate returns true, the attached
72 * test case will be skipped:
73 * <pre><code>
74 * test.ignore(maybe()).it('is flaky', function() {
75 * if (Math.random() < 0.5) throw Error();
76 * });
77 *
78 * function maybe() { return Math.random() < 0.5; }
79 * </code></pre>
80 */
81
82var flow = require('..').promise.controlFlow();
83
84
85/**
86 * Wraps a function so that all passed arguments are ignored.
87 * @param {!Function} fn The function to wrap.
88 * @return {!Function} The wrapped function.
89 */
90function seal(fn) {
91 return function() {
92 fn();
93 };
94}
95
96
97/**
98 * Wraps a function on Mocha's BDD interface so it runs inside a
99 * webdriver.promise.ControlFlow and waits for the flow to complete before
100 * continuing.
101 * @param {!Function} globalFn The function to wrap.
102 * @return {!Function} The new function.
103 */
104function wrapped(globalFn) {
105 return function() {
106 switch (arguments.length) {
107 case 1:
108 globalFn(asyncTestFn(arguments[0]));
109 break;
110
111 case 2:
112 globalFn(arguments[0], asyncTestFn(arguments[1]));
113 break;
114
115 default:
116 throw Error('Invalid # arguments: ' + arguments.length);
117 }
118 };
119
120 function asyncTestFn(fn) {
121 return function(done) {
122 this.timeout(0);
123 flow.execute(fn).then(seal(done), done);
124 };
125 }
126}
127
128
129/**
130 * Ignores the test chained to this function if the provided predicate returns
131 * true.
132 * @param {function(): boolean} predicateFn A predicate to call to determine
133 * if the test should be suppressed. This function MUST be synchronous.
134 * @return {!Object} An object with wrapped versions of {@link #it()} and
135 * {@link #describe()} that ignore tests as indicated by the predicate.
136 */
137function ignore(predicateFn) {
138 var describe = wrap(exports.xdescribe, exports.describe);
139 describe.only = wrap(exports.xdescribe, exports.describe.only);
140
141 var it = wrap(exports.xit, exports.it);
142 it.only = wrap(exports.xit, exports.it.only);
143
144 return {
145 describe: describe,
146 it: it
147 };
148
149 function wrap(onSkip, onRun) {
150 return function(title, fn) {
151 if (predicateFn()) {
152 onSkip(title, fn);
153 } else {
154 onRun(title, fn);
155 }
156 };
157 }
158}
159
160
161// PUBLIC API
162
163/**
164 * Registers a new test suite.
165 * @param {string} name The suite name.
166 * @param {function()=} fn The suite function, or {@code undefined} to define
167 * a pending test suite.
168 */
169exports.describe = global.describe;
170
171/**
172 * Defines a suppressed test suite.
173 * @param {string} name The suite name.
174 * @param {function()=} fn The suite function, or {@code undefined} to define
175 * a pending test suite.
176 */
177exports.xdescribe = global.xdescribe;
178exports.describe.skip = global.describe.skip;
179
180/**
181 * Register a function to call after the current suite finishes.
182 * @param {function()} fn .
183 */
184exports.after = wrapped(global.after);
185
186/**
187 * Register a function to call after each test in a suite.
188 * @param {function()} fn .
189 */
190exports.afterEach = wrapped(global.afterEach);
191
192/**
193 * Register a function to call before the current suite starts.
194 * @param {function()} fn .
195 */
196exports.before = wrapped(global.before);
197
198/**
199 * Register a function to call before each test in a suite.
200 * @param {function()} fn .
201 */
202exports.beforeEach = wrapped(global.beforeEach);
203
204/**
205 * Add a test to the current suite.
206 * @param {string} name The test name.
207 * @param {function()=} fn The test function, or {@code undefined} to define
208 * a pending test case.
209 */
210exports.it = wrapped(global.it);
211
212/**
213 * An alias for {@link #it()} that flags the test as the only one that should
214 * be run within the current suite.
215 * @param {string} name The test name.
216 * @param {function()=} fn The test function, or {@code undefined} to define
217 * a pending test case.
218 */
219exports.iit = exports.it.only = wrapped(global.it.only);
220
221/**
222 * Adds a test to the current suite while suppressing it so it is not run.
223 * @param {string} name The test name.
224 * @param {function()=} fn The test function, or {@code undefined} to define
225 * a pending test case.
226 */
227exports.xit = exports.it.skip = wrapped(global.xit);
228
229exports.ignore = ignore;
\ No newline at end of file +index.js

testing/index.js

1// Copyright 2013 Selenium committers
2// Copyright 2013 Software Freedom Conservancy
3//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15
16/**
17 * @fileoverview Provides wrappers around the following global functions from
18 * <a href="http://visionmedia.github.io/mocha/">Mocha's BDD interface</a>:
19 * <ul>
20 * <li>after
21 * <li>afterEach
22 * <li>before
23 * <li>beforeEach
24 * <li>it
25 * <li>it.only
26 * <li>it.skip
27 * <li>xit
28 * </ul>
29 *
30 * <p>The provided wrappers leverage the webdriver.promise.ControlFlow to
31 * simplify writing asynchronous tests:
32 * <pre><code>
33 * var webdriver = require('selenium-webdriver'),
34 * remote = require('selenium-webdriver/remote'),
35 * test = require('selenium-webdriver/testing');
36 *
37 * test.describe('Google Search', function() {
38 * var driver, server;
39 *
40 * test.before(function() {
41 * server = new remote.SeleniumServer({
42 * jar: 'path/to/selenium-server-standalone.jar'
43 * });
44 * server.start();
45 *
46 * driver = new webdriver.Builder().
47 * withCapabilities({'browserName': 'firefox'}).
48 * usingServer(server.address()).
49 * build();
50 * });
51 *
52 * test.after(function() {
53 * driver.quit();
54 * server.stop();
55 * });
56 *
57 * test.it('should append query to title', function() {
58 * driver.get('http://www.google.com');
59 * driver.findElement(webdriver.By.name('q')).sendKeys('webdriver');
60 * driver.findElement(webdriver.By.name('btnG')).click();
61 * driver.wait(function() {
62 * return driver.getTitle().then(function(title) {
63 * return 'webdriver - Google Search' === title;
64 * });
65 * }, 1000, 'Waiting for title to update');
66 * });
67 * });
68 * </code></pre>
69 *
70 * <p>You may conditionally suppress a test function using the exported
71 * "ignore" function. If the provided predicate returns true, the attached
72 * test case will be skipped:
73 * <pre><code>
74 * test.ignore(maybe()).it('is flaky', function() {
75 * if (Math.random() < 0.5) throw Error();
76 * });
77 *
78 * function maybe() { return Math.random() < 0.5; }
79 * </code></pre>
80 */
81
82var flow = require('..').promise.controlFlow();
83
84
85/**
86 * Wraps a function so that all passed arguments are ignored.
87 * @param {!Function} fn The function to wrap.
88 * @return {!Function} The wrapped function.
89 */
90function seal(fn) {
91 return function() {
92 fn();
93 };
94}
95
96
97/**
98 * Wraps a function on Mocha's BDD interface so it runs inside a
99 * webdriver.promise.ControlFlow and waits for the flow to complete before
100 * continuing.
101 * @param {!Function} globalFn The function to wrap.
102 * @return {!Function} The new function.
103 */
104function wrapped(globalFn) {
105 return function() {
106 switch (arguments.length) {
107 case 1:
108 globalFn(asyncTestFn(arguments[0]));
109 break;
110
111 case 2:
112 globalFn(arguments[0], asyncTestFn(arguments[1]));
113 break;
114
115 default:
116 throw Error('Invalid # arguments: ' + arguments.length);
117 }
118 };
119
120 function asyncTestFn(fn) {
121 return function(done) {
122 this.timeout(0);
123 var timeout = this.timeout;
124 this.timeout = undefined; // Do not let tests change the timeout.
125 try {
126 flow.execute(fn.bind(this)).then(seal(done), done);
127 } finally {
128 this.timeout = timeout;
129 }
130 };
131 }
132}
133
134
135/**
136 * Ignores the test chained to this function if the provided predicate returns
137 * true.
138 * @param {function(): boolean} predicateFn A predicate to call to determine
139 * if the test should be suppressed. This function MUST be synchronous.
140 * @return {!Object} An object with wrapped versions of {@link #it()} and
141 * {@link #describe()} that ignore tests as indicated by the predicate.
142 */
143function ignore(predicateFn) {
144 var describe = wrap(exports.xdescribe, exports.describe);
145 describe.only = wrap(exports.xdescribe, exports.describe.only);
146
147 var it = wrap(exports.xit, exports.it);
148 it.only = wrap(exports.xit, exports.it.only);
149
150 return {
151 describe: describe,
152 it: it
153 };
154
155 function wrap(onSkip, onRun) {
156 return function(title, fn) {
157 if (predicateFn()) {
158 onSkip(title, fn);
159 } else {
160 onRun(title, fn);
161 }
162 };
163 }
164}
165
166
167// PUBLIC API
168
169/**
170 * Registers a new test suite.
171 * @param {string} name The suite name.
172 * @param {function()=} fn The suite function, or {@code undefined} to define
173 * a pending test suite.
174 */
175exports.describe = global.describe;
176
177/**
178 * Defines a suppressed test suite.
179 * @param {string} name The suite name.
180 * @param {function()=} fn The suite function, or {@code undefined} to define
181 * a pending test suite.
182 */
183exports.xdescribe = global.xdescribe;
184exports.describe.skip = global.describe.skip;
185
186/**
187 * Register a function to call after the current suite finishes.
188 * @param {function()} fn .
189 */
190exports.after = wrapped(global.after);
191
192/**
193 * Register a function to call after each test in a suite.
194 * @param {function()} fn .
195 */
196exports.afterEach = wrapped(global.afterEach);
197
198/**
199 * Register a function to call before the current suite starts.
200 * @param {function()} fn .
201 */
202exports.before = wrapped(global.before);
203
204/**
205 * Register a function to call before each test in a suite.
206 * @param {function()} fn .
207 */
208exports.beforeEach = wrapped(global.beforeEach);
209
210/**
211 * Add a test to the current suite.
212 * @param {string} name The test name.
213 * @param {function()=} fn The test function, or {@code undefined} to define
214 * a pending test case.
215 */
216exports.it = wrapped(global.it);
217
218/**
219 * An alias for {@link #it()} that flags the test as the only one that should
220 * be run within the current suite.
221 * @param {string} name The test name.
222 * @param {function()=} fn The test function, or {@code undefined} to define
223 * a pending test case.
224 */
225exports.iit = exports.it.only = wrapped(global.it.only);
226
227/**
228 * Adds a test to the current suite while suppressing it so it is not run.
229 * @param {string} name The test name.
230 * @param {function()=} fn The test function, or {@code undefined} to define
231 * a pending test case.
232 */
233exports.xit = exports.it.skip = wrapped(global.xit);
234
235exports.ignore = ignore;
\ No newline at end of file diff --git a/docs/api/javascript/types.js b/docs/api/javascript/types.js index 79c7db468a854..88ff729aabe45 100644 --- a/docs/api/javascript/types.js +++ b/docs/api/javascript/types.js @@ -1 +1 @@ -var TYPES = {"files":[{"name":"_base.js","href":"source/_base.js.src.html"},{"name":"builder.js","href":"source/builder.js.src.html"},{"name":"chrome.js","href":"source/chrome.js.src.html"},{"name":"error.js","href":"source/error.js.src.html"},{"name":"executors.js","href":"source/executors.js.src.html"},{"name":"http/index.js","href":"source/http/index.js.src.html"},{"name":"http/util.js","href":"source/http/util.js.src.html"},{"name":"index.js","href":"source/index.js.src.html"},{"name":"io/index.js","href":"source/io/index.js.src.html"},{"name":"lib/atoms/error.js","href":"source/lib/atoms/error.js.src.html"},{"name":"lib/atoms/json.js","href":"source/lib/atoms/json.js.src.html"},{"name":"lib/atoms/response.js","href":"source/lib/atoms/response.js.src.html"},{"name":"lib/atoms/userAgent.js","href":"source/lib/atoms/userAgent.js.src.html"},{"name":"lib/goog/array/array.js","href":"source/lib/goog/array/array.js.src.html"},{"name":"lib/goog/asserts/asserts.js","href":"source/lib/goog/asserts/asserts.js.src.html"},{"name":"lib/goog/base.js","href":"source/lib/goog/base.js.src.html"},{"name":"lib/goog/debug/error.js","href":"source/lib/goog/debug/error.js.src.html"},{"name":"lib/goog/deps.js","href":"source/lib/goog/deps.js.src.html"},{"name":"lib/goog/iter/iter.js","href":"source/lib/goog/iter/iter.js.src.html"},{"name":"lib/goog/json/json.js","href":"source/lib/goog/json/json.js.src.html"},{"name":"lib/goog/labs/testing/assertthat.js","href":"source/lib/goog/labs/testing/assertthat.js.src.html"},{"name":"lib/goog/labs/testing/logicmatcher.js","href":"source/lib/goog/labs/testing/logicmatcher.js.src.html"},{"name":"lib/goog/labs/testing/matcher.js","href":"source/lib/goog/labs/testing/matcher.js.src.html"},{"name":"lib/goog/labs/testing/numbermatcher.js","href":"source/lib/goog/labs/testing/numbermatcher.js.src.html"},{"name":"lib/goog/labs/testing/objectmatcher.js","href":"source/lib/goog/labs/testing/objectmatcher.js.src.html"},{"name":"lib/goog/labs/testing/stringmatcher.js","href":"source/lib/goog/labs/testing/stringmatcher.js.src.html"},{"name":"lib/goog/net/wrapperxmlhttpfactory.js","href":"source/lib/goog/net/wrapperxmlhttpfactory.js.src.html"},{"name":"lib/goog/net/xmlhttp.js","href":"source/lib/goog/net/xmlhttp.js.src.html"},{"name":"lib/goog/net/xmlhttpfactory.js","href":"source/lib/goog/net/xmlhttpfactory.js.src.html"},{"name":"lib/goog/object/object.js","href":"source/lib/goog/object/object.js.src.html"},{"name":"lib/goog/string/string.js","href":"source/lib/goog/string/string.js.src.html"},{"name":"lib/goog/structs/map.js","href":"source/lib/goog/structs/map.js.src.html"},{"name":"lib/goog/structs/structs.js","href":"source/lib/goog/structs/structs.js.src.html"},{"name":"lib/goog/uri/uri.js","href":"source/lib/goog/uri/uri.js.src.html"},{"name":"lib/goog/uri/utils.js","href":"source/lib/goog/uri/utils.js.src.html"},{"name":"lib/goog/useragent/product.js","href":"source/lib/goog/useragent/product.js.src.html"},{"name":"lib/goog/useragent/product_isversion.js","href":"source/lib/goog/useragent/product_isversion.js.src.html"},{"name":"lib/goog/useragent/useragent.js","href":"source/lib/goog/useragent/useragent.js.src.html"},{"name":"lib/webdriver/abstractbuilder.js","href":"source/lib/webdriver/abstractbuilder.js.src.html"},{"name":"lib/webdriver/actionsequence.js","href":"source/lib/webdriver/actionsequence.js.src.html"},{"name":"lib/webdriver/builder.js","href":"source/lib/webdriver/builder.js.src.html"},{"name":"lib/webdriver/button.js","href":"source/lib/webdriver/button.js.src.html"},{"name":"lib/webdriver/capabilities.js","href":"source/lib/webdriver/capabilities.js.src.html"},{"name":"lib/webdriver/command.js","href":"source/lib/webdriver/command.js.src.html"},{"name":"lib/webdriver/events.js","href":"source/lib/webdriver/events.js.src.html"},{"name":"lib/webdriver/firefoxdomexecutor.js","href":"source/lib/webdriver/firefoxdomexecutor.js.src.html"},{"name":"lib/webdriver/http/corsclient.js","href":"source/lib/webdriver/http/corsclient.js.src.html"},{"name":"lib/webdriver/http/http.js","href":"source/lib/webdriver/http/http.js.src.html"},{"name":"lib/webdriver/http/xhrclient.js","href":"source/lib/webdriver/http/xhrclient.js.src.html"},{"name":"lib/webdriver/key.js","href":"source/lib/webdriver/key.js.src.html"},{"name":"lib/webdriver/locators.js","href":"source/lib/webdriver/locators.js.src.html"},{"name":"lib/webdriver/logging.js","href":"source/lib/webdriver/logging.js.src.html"},{"name":"lib/webdriver/process.js","href":"source/lib/webdriver/process.js.src.html"},{"name":"lib/webdriver/promise.js","href":"source/lib/webdriver/promise.js.src.html"},{"name":"lib/webdriver/session.js","href":"source/lib/webdriver/session.js.src.html"},{"name":"lib/webdriver/stacktrace.js","href":"source/lib/webdriver/stacktrace.js.src.html"},{"name":"lib/webdriver/testing/asserts.js","href":"source/lib/webdriver/testing/asserts.js.src.html"},{"name":"lib/webdriver/webdriver.js","href":"source/lib/webdriver/webdriver.js.src.html"},{"name":"net/index.js","href":"source/net/index.js.src.html"},{"name":"net/portprober.js","href":"source/net/portprober.js.src.html"},{"name":"phantomjs.js","href":"source/phantomjs.js.src.html"},{"name":"proxy.js","href":"source/proxy.js.src.html"},{"name":"remote/index.js","href":"source/remote/index.js.src.html"},{"name":"testing/assert.js","href":"source/testing/assert.js.src.html"},{"name":"testing/index.js","href":"source/testing/index.js.src.html"}],"types":[{"isInterface":false,"name":"bot","isTypedef":false,"href":"namespace_bot.html"},{"isInterface":false,"name":"bot.Error","isTypedef":false,"href":"class_bot_Error.html"},{"isInterface":false,"name":"bot.Error.State","isTypedef":false,"href":"enum_bot_Error_State.html"},{"isInterface":false,"name":"bot.ErrorCode","isTypedef":false,"href":"enum_bot_ErrorCode.html"},{"isInterface":false,"name":"bot.json","isTypedef":false,"href":"namespace_bot_json.html"},{"isInterface":false,"name":"bot.response","isTypedef":false,"href":"namespace_bot_response.html"},{"name":"bot.response.ResponseObject","isTypedef":true,"href":"namespace_bot_response.html#bot.response.ResponseObject"},{"isInterface":false,"name":"bot.userAgent","isTypedef":false,"href":"namespace_bot_userAgent.html"},{"isInterface":false,"name":"goog","isTypedef":false,"href":"namespace_goog.html"},{"isInterface":false,"name":"goog.Uri","isTypedef":false,"href":"class_goog_Uri.html"},{"isInterface":false,"name":"goog.Uri.QueryData","isTypedef":false,"href":"class_goog_Uri_QueryData.html"},{"isInterface":false,"name":"goog.array","isTypedef":false,"href":"namespace_goog_array.html"},{"name":"goog.array.ArrayLike","isTypedef":true,"href":"namespace_goog_array.html#goog.array.ArrayLike"},{"isInterface":false,"name":"goog.asserts","isTypedef":false,"href":"namespace_goog_asserts.html"},{"isInterface":false,"name":"goog.asserts.AssertionError","isTypedef":false,"href":"class_goog_asserts_AssertionError.html"},{"isInterface":false,"name":"goog.debug","isTypedef":false,"href":"namespace_goog_debug.html"},{"isInterface":false,"name":"goog.debug.Error","isTypedef":false,"href":"class_goog_debug_Error.html"},{"isInterface":false,"name":"goog.iter","isTypedef":false,"href":"namespace_goog_iter.html"},{"name":"goog.iter.Iterable","isTypedef":true,"href":"namespace_goog_iter.html#goog.iter.Iterable"},{"isInterface":false,"name":"goog.iter.Iterator","isTypedef":false,"href":"class_goog_iter_Iterator.html"},{"isInterface":false,"name":"goog.json","isTypedef":false,"href":"namespace_goog_json.html"},{"name":"goog.json.Replacer","isTypedef":true,"href":"namespace_goog_json.html#goog.json.Replacer"},{"name":"goog.json.Reviver","isTypedef":true,"href":"namespace_goog_json.html#goog.json.Reviver"},{"isInterface":false,"name":"goog.json.Serializer","isTypedef":false,"href":"class_goog_json_Serializer.html"},{"isInterface":false,"name":"goog.labs","isTypedef":false,"href":"namespace_goog_labs.html"},{"isInterface":false,"name":"goog.labs.testing","isTypedef":false,"href":"namespace_goog_labs_testing.html"},{"isInterface":false,"name":"goog.labs.testing.AllOfMatcher","isTypedef":false,"href":"class_goog_labs_testing_AllOfMatcher.html"},{"isInterface":false,"name":"goog.labs.testing.AnyOfMatcher","isTypedef":false,"href":"class_goog_labs_testing_AnyOfMatcher.html"},{"isInterface":false,"name":"goog.labs.testing.CloseToMatcher","isTypedef":false,"href":"class_goog_labs_testing_CloseToMatcher.html"},{"isInterface":false,"name":"goog.labs.testing.ContainsStringMatcher","isTypedef":false,"href":"class_goog_labs_testing_ContainsStringMatcher.html"},{"isInterface":false,"name":"goog.labs.testing.EndsWithMatcher","isTypedef":false,"href":"class_goog_labs_testing_EndsWithMatcher.html"},{"isInterface":false,"name":"goog.labs.testing.EqualToIgnoringWhitespaceMatcher","isTypedef":false,"href":"class_goog_labs_testing_EqualToIgnoringWhitespaceMatcher.html"},{"isInterface":false,"name":"goog.labs.testing.EqualToMatcher","isTypedef":false,"href":"class_goog_labs_testing_EqualToMatcher.html"},{"isInterface":false,"name":"goog.labs.testing.EqualsMatcher","isTypedef":false,"href":"class_goog_labs_testing_EqualsMatcher.html"},{"isInterface":false,"name":"goog.labs.testing.GreaterThanEqualToMatcher","isTypedef":false,"href":"class_goog_labs_testing_GreaterThanEqualToMatcher.html"},{"isInterface":false,"name":"goog.labs.testing.GreaterThanMatcher","isTypedef":false,"href":"class_goog_labs_testing_GreaterThanMatcher.html"},{"isInterface":false,"name":"goog.labs.testing.HasPropertyMatcher","isTypedef":false,"href":"class_goog_labs_testing_HasPropertyMatcher.html"},{"isInterface":false,"name":"goog.labs.testing.InstanceOfMatcher","isTypedef":false,"href":"class_goog_labs_testing_InstanceOfMatcher.html"},{"isInterface":false,"name":"goog.labs.testing.IsNotMatcher","isTypedef":false,"href":"class_goog_labs_testing_IsNotMatcher.html"},{"isInterface":false,"name":"goog.labs.testing.IsNullMatcher","isTypedef":false,"href":"class_goog_labs_testing_IsNullMatcher.html"},{"isInterface":false,"name":"goog.labs.testing.IsNullOrUndefinedMatcher","isTypedef":false,"href":"class_goog_labs_testing_IsNullOrUndefinedMatcher.html"},{"isInterface":false,"name":"goog.labs.testing.IsUndefinedMatcher","isTypedef":false,"href":"class_goog_labs_testing_IsUndefinedMatcher.html"},{"isInterface":false,"name":"goog.labs.testing.LessThanEqualToMatcher","isTypedef":false,"href":"class_goog_labs_testing_LessThanEqualToMatcher.html"},{"isInterface":false,"name":"goog.labs.testing.LessThanMatcher","isTypedef":false,"href":"class_goog_labs_testing_LessThanMatcher.html"},{"isInterface":true,"name":"goog.labs.testing.Matcher","isTypedef":false,"href":"interface_goog_labs_testing_Matcher.html"},{"isInterface":false,"name":"goog.labs.testing.MatcherError","isTypedef":false,"href":"class_goog_labs_testing_MatcherError.html"},{"isInterface":false,"name":"goog.labs.testing.ObjectEqualsMatcher","isTypedef":false,"href":"class_goog_labs_testing_ObjectEqualsMatcher.html"},{"isInterface":false,"name":"goog.labs.testing.RegexMatcher","isTypedef":false,"href":"class_goog_labs_testing_RegexMatcher.html"},{"isInterface":false,"name":"goog.labs.testing.StartsWithMatcher","isTypedef":false,"href":"class_goog_labs_testing_StartsWithMatcher.html"},{"isInterface":false,"name":"goog.labs.testing.StringContainsInOrderMatcher","isTypedef":false,"href":"class_goog_labs_testing_StringContainsInOrderMatcher.html"},{"isInterface":false,"name":"goog.net","isTypedef":false,"href":"namespace_goog_net.html"},{"isInterface":false,"name":"goog.net.DefaultXmlHttpFactory","isTypedef":false,"href":"class_goog_net_DefaultXmlHttpFactory.html"},{"isInterface":false,"name":"goog.net.WrapperXmlHttpFactory","isTypedef":false,"href":"class_goog_net_WrapperXmlHttpFactory.html"},{"isInterface":false,"name":"goog.net.XmlHttp","isTypedef":false,"href":"namespace_goog_net_XmlHttp.html"},{"isInterface":false,"name":"goog.net.XmlHttp.OptionType","isTypedef":false,"href":"enum_goog_net_XmlHttp_OptionType.html"},{"isInterface":false,"name":"goog.net.XmlHttp.ReadyState","isTypedef":false,"href":"enum_goog_net_XmlHttp_ReadyState.html"},{"isInterface":false,"name":"goog.net.XmlHttpFactory","isTypedef":false,"href":"class_goog_net_XmlHttpFactory.html"},{"isInterface":false,"name":"goog.object","isTypedef":false,"href":"namespace_goog_object.html"},{"isInterface":false,"name":"goog.string","isTypedef":false,"href":"namespace_goog_string.html"},{"isInterface":false,"name":"goog.string.Unicode","isTypedef":false,"href":"enum_goog_string_Unicode.html"},{"isInterface":false,"name":"goog.structs","isTypedef":false,"href":"namespace_goog_structs.html"},{"isInterface":false,"name":"goog.structs.Map","isTypedef":false,"href":"class_goog_structs_Map.html"},{"isInterface":false,"name":"goog.uri","isTypedef":false,"href":"namespace_goog_uri.html"},{"isInterface":false,"name":"goog.uri.utils","isTypedef":false,"href":"namespace_goog_uri_utils.html"},{"name":"goog.uri.utils.QueryArray","isTypedef":true,"href":"namespace_goog_uri_utils.html#goog.uri.utils.QueryArray"},{"name":"goog.uri.utils.QueryValue","isTypedef":true,"href":"namespace_goog_uri_utils.html#goog.uri.utils.QueryValue"},{"isInterface":false,"name":"goog.uri.utils.CharCode_","isTypedef":false,"href":"enum_goog_uri_utils_CharCode_.html"},{"isInterface":false,"name":"goog.uri.utils.ComponentIndex","isTypedef":false,"href":"enum_goog_uri_utils_ComponentIndex.html"},{"isInterface":false,"name":"goog.uri.utils.StandardQueryParam","isTypedef":false,"href":"enum_goog_uri_utils_StandardQueryParam.html"},{"isInterface":false,"name":"goog.userAgent","isTypedef":false,"href":"namespace_goog_userAgent.html"},{"isInterface":false,"name":"goog.userAgent.product","isTypedef":false,"href":"namespace_goog_userAgent_product.html"},{"isInterface":false,"name":"webdriver","isTypedef":false,"href":"namespace_webdriver.html"},{"isInterface":false,"name":"webdriver.AbstractBuilder","isTypedef":false,"href":"class_webdriver_AbstractBuilder.html"},{"isInterface":false,"name":"webdriver.ActionSequence","isTypedef":false,"href":"class_webdriver_ActionSequence.html"},{"isInterface":false,"name":"webdriver.Alert","isTypedef":false,"href":"class_webdriver_Alert.html"},{"isInterface":false,"name":"webdriver.Browser","isTypedef":false,"href":"enum_webdriver_Browser.html"},{"isInterface":false,"name":"webdriver.Builder","isTypedef":false,"href":"class_webdriver_Builder.html"},{"isInterface":false,"name":"webdriver.Button","isTypedef":false,"href":"enum_webdriver_Button.html"},{"isInterface":false,"name":"webdriver.By","isTypedef":false,"href":"namespace_webdriver_By.html"},{"name":"webdriver.By.Hash","isTypedef":true,"href":"namespace_webdriver_By.html#webdriver.By.Hash"},{"isInterface":false,"name":"webdriver.Capabilities","isTypedef":false,"href":"class_webdriver_Capabilities.html"},{"isInterface":false,"name":"webdriver.Capability","isTypedef":false,"href":"enum_webdriver_Capability.html"},{"isInterface":false,"name":"webdriver.Command","isTypedef":false,"href":"class_webdriver_Command.html"},{"isInterface":true,"name":"webdriver.CommandExecutor","isTypedef":false,"href":"interface_webdriver_CommandExecutor.html"},{"isInterface":false,"name":"webdriver.CommandName","isTypedef":false,"href":"enum_webdriver_CommandName.html"},{"isInterface":false,"name":"webdriver.EventEmitter","isTypedef":false,"href":"class_webdriver_EventEmitter.html"},{"isInterface":false,"name":"webdriver.FirefoxDomExecutor","isTypedef":false,"href":"class_webdriver_FirefoxDomExecutor.html"},{"isInterface":false,"name":"webdriver.FirefoxDomExecutor.Attribute_","isTypedef":false,"href":"enum_webdriver_FirefoxDomExecutor_Attribute_.html"},{"isInterface":false,"name":"webdriver.FirefoxDomExecutor.EventType_","isTypedef":false,"href":"enum_webdriver_FirefoxDomExecutor_EventType_.html"},{"isInterface":false,"name":"webdriver.Key","isTypedef":false,"href":"enum_webdriver_Key.html"},{"isInterface":false,"name":"webdriver.Locator","isTypedef":false,"href":"class_webdriver_Locator.html"},{"isInterface":false,"name":"webdriver.Session","isTypedef":false,"href":"class_webdriver_Session.html"},{"isInterface":false,"name":"webdriver.UnhandledAlertError","isTypedef":false,"href":"class_webdriver_UnhandledAlertError.html"},{"isInterface":false,"name":"webdriver.WebDriver","isTypedef":false,"href":"class_webdriver_WebDriver.html"},{"isInterface":false,"name":"webdriver.WebDriver.Logs","isTypedef":false,"href":"class_webdriver_WebDriver_Logs.html"},{"isInterface":false,"name":"webdriver.WebDriver.Navigation","isTypedef":false,"href":"class_webdriver_WebDriver_Navigation.html"},{"isInterface":false,"name":"webdriver.WebDriver.Options","isTypedef":false,"href":"class_webdriver_WebDriver_Options.html"},{"isInterface":false,"name":"webdriver.WebDriver.TargetLocator","isTypedef":false,"href":"class_webdriver_WebDriver_TargetLocator.html"},{"isInterface":false,"name":"webdriver.WebDriver.Timeouts","isTypedef":false,"href":"class_webdriver_WebDriver_Timeouts.html"},{"isInterface":false,"name":"webdriver.WebDriver.Window","isTypedef":false,"href":"class_webdriver_WebDriver_Window.html"},{"isInterface":false,"name":"webdriver.WebElement","isTypedef":false,"href":"class_webdriver_WebElement.html"},{"isInterface":false,"name":"webdriver.http","isTypedef":false,"href":"namespace_webdriver_http.html"},{"isInterface":true,"name":"webdriver.http.Client","isTypedef":false,"href":"interface_webdriver_http_Client.html"},{"isInterface":false,"name":"webdriver.http.CorsClient","isTypedef":false,"href":"class_webdriver_http_CorsClient.html"},{"isInterface":false,"name":"webdriver.http.Executor","isTypedef":false,"href":"class_webdriver_http_Executor.html"},{"isInterface":false,"name":"webdriver.http.Request","isTypedef":false,"href":"class_webdriver_http_Request.html"},{"isInterface":false,"name":"webdriver.http.Response","isTypedef":false,"href":"class_webdriver_http_Response.html"},{"isInterface":false,"name":"webdriver.http.XhrClient","isTypedef":false,"href":"class_webdriver_http_XhrClient.html"},{"isInterface":false,"name":"webdriver.logging","isTypedef":false,"href":"namespace_webdriver_logging.html"},{"name":"webdriver.logging.Preferences","isTypedef":true,"href":"namespace_webdriver_logging.html#webdriver.logging.Preferences"},{"isInterface":false,"name":"webdriver.logging.Entry","isTypedef":false,"href":"class_webdriver_logging_Entry.html"},{"isInterface":false,"name":"webdriver.logging.Level","isTypedef":false,"href":"enum_webdriver_logging_Level.html"},{"isInterface":false,"name":"webdriver.logging.LevelName","isTypedef":false,"href":"enum_webdriver_logging_LevelName.html"},{"isInterface":false,"name":"webdriver.logging.Type","isTypedef":false,"href":"enum_webdriver_logging_Type.html"},{"isInterface":false,"name":"webdriver.process","isTypedef":false,"href":"namespace_webdriver_process.html"},{"isInterface":false,"name":"webdriver.promise","isTypedef":false,"href":"namespace_webdriver_promise.html"},{"isInterface":false,"name":"webdriver.promise.CanceledTaskError_","isTypedef":false,"href":"class_webdriver_promise_CanceledTaskError_.html"},{"isInterface":false,"name":"webdriver.promise.ControlFlow","isTypedef":false,"href":"class_webdriver_promise_ControlFlow.html"},{"name":"webdriver.promise.ControlFlow.Timer","isTypedef":true,"href":"class_webdriver_promise_ControlFlow.html#webdriver.promise.ControlFlow.Timer"},{"isInterface":false,"name":"webdriver.promise.ControlFlow.EventType","isTypedef":false,"href":"enum_webdriver_promise_ControlFlow_EventType.html"},{"isInterface":false,"name":"webdriver.promise.Deferred","isTypedef":false,"href":"class_webdriver_promise_Deferred.html"},{"name":"webdriver.promise.Deferred.Listener_","isTypedef":true,"href":"class_webdriver_promise_Deferred.html#webdriver.promise.Deferred.Listener_"},{"isInterface":false,"name":"webdriver.promise.Deferred.State_","isTypedef":false,"href":"enum_webdriver_promise_Deferred_State_.html"},{"isInterface":false,"name":"webdriver.promise.Frame_","isTypedef":false,"href":"class_webdriver_promise_Frame_.html"},{"isInterface":false,"name":"webdriver.promise.Node_","isTypedef":false,"href":"class_webdriver_promise_Node_.html"},{"isInterface":false,"name":"webdriver.promise.Promise","isTypedef":false,"href":"class_webdriver_promise_Promise.html"},{"isInterface":false,"name":"webdriver.promise.Task_","isTypedef":false,"href":"class_webdriver_promise_Task_.html"},{"isInterface":false,"name":"webdriver.stacktrace","isTypedef":false,"href":"namespace_webdriver_stacktrace.html"},{"isInterface":false,"name":"webdriver.stacktrace.Frame","isTypedef":false,"href":"class_webdriver_stacktrace_Frame.html"},{"isInterface":false,"name":"webdriver.stacktrace.Snapshot","isTypedef":false,"href":"class_webdriver_stacktrace_Snapshot.html"},{"isInterface":false,"name":"webdriver.testing","isTypedef":false,"href":"namespace_webdriver_testing.html"},{"isInterface":false,"name":"webdriver.testing.Assertion","isTypedef":false,"href":"class_webdriver_testing_Assertion.html"},{"isInterface":false,"name":"webdriver.testing.Assertion.DelegatingMatcher_","isTypedef":false,"href":"class_webdriver_testing_Assertion_DelegatingMatcher_.html"},{"isInterface":false,"name":"webdriver.testing.ContainsMatcher","isTypedef":false,"href":"class_webdriver_testing_ContainsMatcher.html"},{"isInterface":false,"name":"webdriver.testing.NegatedAssertion","isTypedef":false,"href":"class_webdriver_testing_NegatedAssertion.html"},{"isInterface":false,"name":"webdriver.testing.assert","isTypedef":false,"href":"module_selenium-webdriver_testing_assert_namespace_dossier$$module__$Users$jleyba$Development$selenium2$build$javascript$node$selenium_webdriver$testing$assert_exports.html"},{"isInterface":false,"name":"webdriver.testing.asserts","isTypedef":false,"href":"namespace_webdriver_testing_asserts.html"}],"modules":[{"name":"selenium-webdriver","types":[{"isInterface":false,"name":"Command","isTypedef":false,"href":"class_webdriver_Command.html"},{"isInterface":false,"name":"Key","isTypedef":false,"href":"enum_webdriver_Key.html"},{"isInterface":false,"name":"EventEmitter","isTypedef":false,"href":"class_webdriver_EventEmitter.html"},{"isInterface":false,"name":"Browser","isTypedef":false,"href":"enum_webdriver_Browser.html"},{"isInterface":false,"name":"ActionSequence","isTypedef":false,"href":"class_webdriver_ActionSequence.html"},{"isInterface":false,"name":"Button","isTypedef":false,"href":"enum_webdriver_Button.html"},{"isInterface":false,"name":"WebElement","isTypedef":false,"href":"class_webdriver_WebElement.html"},{"isInterface":false,"name":"CommandName","isTypedef":false,"href":"enum_webdriver_CommandName.html"},{"isInterface":false,"name":"Capability","isTypedef":false,"href":"enum_webdriver_Capability.html"},{"isInterface":false,"name":"Session","isTypedef":false,"href":"class_webdriver_Session.html"},{"isInterface":false,"name":"Builder","isTypedef":false,"href":"module_selenium-webdriver_class_Builder.html"},{"isInterface":false,"name":"Capabilities","isTypedef":false,"href":"class_webdriver_Capabilities.html"},{"isInterface":false,"name":"WebDriver","isTypedef":false,"href":"class_webdriver_WebDriver.html"}],"href":"module_selenium-webdriver.html"},{"name":"selenium-webdriver/_base","types":[],"href":"module_selenium-webdriver__base.html"},{"name":"selenium-webdriver/builder","types":[{"isInterface":false,"name":"Builder","isTypedef":false,"href":"module_selenium-webdriver_builder_class_Builder.html"}],"href":"module_selenium-webdriver_builder.html"},{"name":"selenium-webdriver/chrome","types":[{"isInterface":false,"name":"ServiceBuilder","isTypedef":false,"href":"module_selenium-webdriver_chrome_class_ServiceBuilder.html"},{"isInterface":false,"name":"Options","isTypedef":false,"href":"module_selenium-webdriver_chrome_class_Options.html"}],"href":"module_selenium-webdriver_chrome.html"},{"name":"selenium-webdriver/error","types":[{"isInterface":false,"name":"ErrorCode","isTypedef":false,"href":"enum_bot_ErrorCode.html"},{"isInterface":false,"name":"Error","isTypedef":false,"href":"class_bot_Error.html"}],"href":"module_selenium-webdriver_error.html"},{"name":"selenium-webdriver/executors","types":[],"href":"module_selenium-webdriver_executors.html"},{"name":"selenium-webdriver/http","types":[{"isInterface":false,"name":"HttpClient","isTypedef":false,"href":"module_selenium-webdriver_http_class_HttpClient.html"},{"isInterface":false,"name":"Response","isTypedef":false,"href":"class_webdriver_http_Response.html"},{"isInterface":false,"name":"Request","isTypedef":false,"href":"class_webdriver_http_Request.html"},{"isInterface":false,"name":"Executor","isTypedef":false,"href":"class_webdriver_http_Executor.html"}],"href":"module_selenium-webdriver_http.html"},{"name":"selenium-webdriver/http/util","types":[],"href":"module_selenium-webdriver_http_util.html"},{"name":"selenium-webdriver/io","types":[],"href":"module_selenium-webdriver_io.html"},{"name":"selenium-webdriver/net","types":[],"href":"module_selenium-webdriver_net.html"},{"name":"selenium-webdriver/net/portprober","types":[],"href":"module_selenium-webdriver_net_portprober.html"},{"name":"selenium-webdriver/phantomjs","types":[],"href":"module_selenium-webdriver_phantomjs.html"},{"name":"selenium-webdriver/proxy","types":[{"isInterface":false,"name":"ProxyConfig","isTypedef":true,"href":"module_selenium-webdriver_proxy_namespace_ProxyConfig.html"}],"href":"module_selenium-webdriver_proxy.html"},{"name":"selenium-webdriver/remote","types":[{"isInterface":false,"name":"DriverService","isTypedef":false,"href":"module_selenium-webdriver_remote_class_DriverService.html"},{"isInterface":false,"name":"SeleniumServer","isTypedef":false,"href":"module_selenium-webdriver_remote_class_SeleniumServer.html"},{"name":"SeleniumServer.Options","isTypedef":true,"href":""},{"isInterface":false,"name":"ServiceOptions","isTypedef":true,"href":"module_selenium-webdriver_remote_namespace_ServiceOptions.html"}],"href":"module_selenium-webdriver_remote.html"},{"name":"selenium-webdriver/testing","types":[],"href":"module_selenium-webdriver_testing.html"},{"name":"selenium-webdriver/testing/assert","types":[],"href":"module_selenium-webdriver_testing_assert.html"}]}; \ No newline at end of file +var TYPES = {"files":[{"name":"_base.js","href":"source/_base.js.src.html"},{"name":"builder.js","href":"source/builder.js.src.html"},{"name":"chrome.js","href":"source/chrome.js.src.html"},{"name":"error.js","href":"source/error.js.src.html"},{"name":"executors.js","href":"source/executors.js.src.html"},{"name":"http/index.js","href":"source/http/index.js.src.html"},{"name":"http/util.js","href":"source/http/util.js.src.html"},{"name":"index.js","href":"source/index.js.src.html"},{"name":"io/index.js","href":"source/io/index.js.src.html"},{"name":"lib/atoms/error.js","href":"source/lib/atoms/error.js.src.html"},{"name":"lib/atoms/json.js","href":"source/lib/atoms/json.js.src.html"},{"name":"lib/atoms/response.js","href":"source/lib/atoms/response.js.src.html"},{"name":"lib/atoms/userAgent.js","href":"source/lib/atoms/userAgent.js.src.html"},{"name":"lib/goog/array/array.js","href":"source/lib/goog/array/array.js.src.html"},{"name":"lib/goog/asserts/asserts.js","href":"source/lib/goog/asserts/asserts.js.src.html"},{"name":"lib/goog/base.js","href":"source/lib/goog/base.js.src.html"},{"name":"lib/goog/debug/error.js","href":"source/lib/goog/debug/error.js.src.html"},{"name":"lib/goog/deps.js","href":"source/lib/goog/deps.js.src.html"},{"name":"lib/goog/iter/iter.js","href":"source/lib/goog/iter/iter.js.src.html"},{"name":"lib/goog/json/json.js","href":"source/lib/goog/json/json.js.src.html"},{"name":"lib/goog/labs/testing/assertthat.js","href":"source/lib/goog/labs/testing/assertthat.js.src.html"},{"name":"lib/goog/labs/testing/logicmatcher.js","href":"source/lib/goog/labs/testing/logicmatcher.js.src.html"},{"name":"lib/goog/labs/testing/matcher.js","href":"source/lib/goog/labs/testing/matcher.js.src.html"},{"name":"lib/goog/labs/testing/numbermatcher.js","href":"source/lib/goog/labs/testing/numbermatcher.js.src.html"},{"name":"lib/goog/labs/testing/objectmatcher.js","href":"source/lib/goog/labs/testing/objectmatcher.js.src.html"},{"name":"lib/goog/labs/testing/stringmatcher.js","href":"source/lib/goog/labs/testing/stringmatcher.js.src.html"},{"name":"lib/goog/net/wrapperxmlhttpfactory.js","href":"source/lib/goog/net/wrapperxmlhttpfactory.js.src.html"},{"name":"lib/goog/net/xmlhttp.js","href":"source/lib/goog/net/xmlhttp.js.src.html"},{"name":"lib/goog/net/xmlhttpfactory.js","href":"source/lib/goog/net/xmlhttpfactory.js.src.html"},{"name":"lib/goog/object/object.js","href":"source/lib/goog/object/object.js.src.html"},{"name":"lib/goog/string/string.js","href":"source/lib/goog/string/string.js.src.html"},{"name":"lib/goog/structs/map.js","href":"source/lib/goog/structs/map.js.src.html"},{"name":"lib/goog/structs/structs.js","href":"source/lib/goog/structs/structs.js.src.html"},{"name":"lib/goog/uri/uri.js","href":"source/lib/goog/uri/uri.js.src.html"},{"name":"lib/goog/uri/utils.js","href":"source/lib/goog/uri/utils.js.src.html"},{"name":"lib/goog/useragent/product.js","href":"source/lib/goog/useragent/product.js.src.html"},{"name":"lib/goog/useragent/product_isversion.js","href":"source/lib/goog/useragent/product_isversion.js.src.html"},{"name":"lib/goog/useragent/useragent.js","href":"source/lib/goog/useragent/useragent.js.src.html"},{"name":"lib/webdriver/abstractbuilder.js","href":"source/lib/webdriver/abstractbuilder.js.src.html"},{"name":"lib/webdriver/actionsequence.js","href":"source/lib/webdriver/actionsequence.js.src.html"},{"name":"lib/webdriver/builder.js","href":"source/lib/webdriver/builder.js.src.html"},{"name":"lib/webdriver/button.js","href":"source/lib/webdriver/button.js.src.html"},{"name":"lib/webdriver/capabilities.js","href":"source/lib/webdriver/capabilities.js.src.html"},{"name":"lib/webdriver/command.js","href":"source/lib/webdriver/command.js.src.html"},{"name":"lib/webdriver/events.js","href":"source/lib/webdriver/events.js.src.html"},{"name":"lib/webdriver/firefoxdomexecutor.js","href":"source/lib/webdriver/firefoxdomexecutor.js.src.html"},{"name":"lib/webdriver/http/corsclient.js","href":"source/lib/webdriver/http/corsclient.js.src.html"},{"name":"lib/webdriver/http/http.js","href":"source/lib/webdriver/http/http.js.src.html"},{"name":"lib/webdriver/http/xhrclient.js","href":"source/lib/webdriver/http/xhrclient.js.src.html"},{"name":"lib/webdriver/key.js","href":"source/lib/webdriver/key.js.src.html"},{"name":"lib/webdriver/locators.js","href":"source/lib/webdriver/locators.js.src.html"},{"name":"lib/webdriver/logging.js","href":"source/lib/webdriver/logging.js.src.html"},{"name":"lib/webdriver/process.js","href":"source/lib/webdriver/process.js.src.html"},{"name":"lib/webdriver/promise.js","href":"source/lib/webdriver/promise.js.src.html"},{"name":"lib/webdriver/session.js","href":"source/lib/webdriver/session.js.src.html"},{"name":"lib/webdriver/stacktrace.js","href":"source/lib/webdriver/stacktrace.js.src.html"},{"name":"lib/webdriver/testing/asserts.js","href":"source/lib/webdriver/testing/asserts.js.src.html"},{"name":"lib/webdriver/webdriver.js","href":"source/lib/webdriver/webdriver.js.src.html"},{"name":"net/index.js","href":"source/net/index.js.src.html"},{"name":"net/portprober.js","href":"source/net/portprober.js.src.html"},{"name":"phantomjs.js","href":"source/phantomjs.js.src.html"},{"name":"proxy.js","href":"source/proxy.js.src.html"},{"name":"remote/index.js","href":"source/remote/index.js.src.html"},{"name":"testing/assert.js","href":"source/testing/assert.js.src.html"},{"name":"testing/index.js","href":"source/testing/index.js.src.html"}],"types":[{"isInterface":false,"name":"bot","isTypedef":false,"href":"namespace_bot.html"},{"isInterface":false,"name":"bot.Error","isTypedef":false,"href":"class_bot_Error.html"},{"isInterface":false,"name":"bot.Error.State","isTypedef":false,"href":"enum_bot_Error_State.html"},{"isInterface":false,"name":"bot.ErrorCode","isTypedef":false,"href":"enum_bot_ErrorCode.html"},{"isInterface":false,"name":"bot.json","isTypedef":false,"href":"namespace_bot_json.html"},{"isInterface":false,"name":"bot.response","isTypedef":false,"href":"namespace_bot_response.html"},{"name":"bot.response.ResponseObject","isTypedef":true,"href":"namespace_bot_response.html#bot.response.ResponseObject"},{"isInterface":false,"name":"bot.userAgent","isTypedef":false,"href":"namespace_bot_userAgent.html"},{"isInterface":false,"name":"goog","isTypedef":false,"href":"namespace_goog.html"},{"isInterface":false,"name":"goog.Uri","isTypedef":false,"href":"class_goog_Uri.html"},{"isInterface":false,"name":"goog.Uri.QueryData","isTypedef":false,"href":"class_goog_Uri_QueryData.html"},{"isInterface":false,"name":"goog.array","isTypedef":false,"href":"namespace_goog_array.html"},{"name":"goog.array.ArrayLike","isTypedef":true,"href":"namespace_goog_array.html#goog.array.ArrayLike"},{"isInterface":false,"name":"goog.asserts","isTypedef":false,"href":"namespace_goog_asserts.html"},{"isInterface":false,"name":"goog.asserts.AssertionError","isTypedef":false,"href":"class_goog_asserts_AssertionError.html"},{"isInterface":false,"name":"goog.debug","isTypedef":false,"href":"namespace_goog_debug.html"},{"isInterface":false,"name":"goog.debug.Error","isTypedef":false,"href":"class_goog_debug_Error.html"},{"isInterface":false,"name":"goog.iter","isTypedef":false,"href":"namespace_goog_iter.html"},{"name":"goog.iter.Iterable","isTypedef":true,"href":"namespace_goog_iter.html#goog.iter.Iterable"},{"isInterface":false,"name":"goog.iter.Iterator","isTypedef":false,"href":"class_goog_iter_Iterator.html"},{"isInterface":false,"name":"goog.json","isTypedef":false,"href":"namespace_goog_json.html"},{"name":"goog.json.Replacer","isTypedef":true,"href":"namespace_goog_json.html#goog.json.Replacer"},{"name":"goog.json.Reviver","isTypedef":true,"href":"namespace_goog_json.html#goog.json.Reviver"},{"isInterface":false,"name":"goog.json.Serializer","isTypedef":false,"href":"class_goog_json_Serializer.html"},{"isInterface":false,"name":"goog.labs","isTypedef":false,"href":"namespace_goog_labs.html"},{"isInterface":false,"name":"goog.labs.testing","isTypedef":false,"href":"namespace_goog_labs_testing.html"},{"isInterface":false,"name":"goog.labs.testing.AllOfMatcher","isTypedef":false,"href":"class_goog_labs_testing_AllOfMatcher.html"},{"isInterface":false,"name":"goog.labs.testing.AnyOfMatcher","isTypedef":false,"href":"class_goog_labs_testing_AnyOfMatcher.html"},{"isInterface":false,"name":"goog.labs.testing.CloseToMatcher","isTypedef":false,"href":"class_goog_labs_testing_CloseToMatcher.html"},{"isInterface":false,"name":"goog.labs.testing.ContainsStringMatcher","isTypedef":false,"href":"class_goog_labs_testing_ContainsStringMatcher.html"},{"isInterface":false,"name":"goog.labs.testing.EndsWithMatcher","isTypedef":false,"href":"class_goog_labs_testing_EndsWithMatcher.html"},{"isInterface":false,"name":"goog.labs.testing.EqualToIgnoringWhitespaceMatcher","isTypedef":false,"href":"class_goog_labs_testing_EqualToIgnoringWhitespaceMatcher.html"},{"isInterface":false,"name":"goog.labs.testing.EqualToMatcher","isTypedef":false,"href":"class_goog_labs_testing_EqualToMatcher.html"},{"isInterface":false,"name":"goog.labs.testing.EqualsMatcher","isTypedef":false,"href":"class_goog_labs_testing_EqualsMatcher.html"},{"isInterface":false,"name":"goog.labs.testing.GreaterThanEqualToMatcher","isTypedef":false,"href":"class_goog_labs_testing_GreaterThanEqualToMatcher.html"},{"isInterface":false,"name":"goog.labs.testing.GreaterThanMatcher","isTypedef":false,"href":"class_goog_labs_testing_GreaterThanMatcher.html"},{"isInterface":false,"name":"goog.labs.testing.HasPropertyMatcher","isTypedef":false,"href":"class_goog_labs_testing_HasPropertyMatcher.html"},{"isInterface":false,"name":"goog.labs.testing.InstanceOfMatcher","isTypedef":false,"href":"class_goog_labs_testing_InstanceOfMatcher.html"},{"isInterface":false,"name":"goog.labs.testing.IsNotMatcher","isTypedef":false,"href":"class_goog_labs_testing_IsNotMatcher.html"},{"isInterface":false,"name":"goog.labs.testing.IsNullMatcher","isTypedef":false,"href":"class_goog_labs_testing_IsNullMatcher.html"},{"isInterface":false,"name":"goog.labs.testing.IsNullOrUndefinedMatcher","isTypedef":false,"href":"class_goog_labs_testing_IsNullOrUndefinedMatcher.html"},{"isInterface":false,"name":"goog.labs.testing.IsUndefinedMatcher","isTypedef":false,"href":"class_goog_labs_testing_IsUndefinedMatcher.html"},{"isInterface":false,"name":"goog.labs.testing.LessThanEqualToMatcher","isTypedef":false,"href":"class_goog_labs_testing_LessThanEqualToMatcher.html"},{"isInterface":false,"name":"goog.labs.testing.LessThanMatcher","isTypedef":false,"href":"class_goog_labs_testing_LessThanMatcher.html"},{"isInterface":true,"name":"goog.labs.testing.Matcher","isTypedef":false,"href":"interface_goog_labs_testing_Matcher.html"},{"isInterface":false,"name":"goog.labs.testing.MatcherError","isTypedef":false,"href":"class_goog_labs_testing_MatcherError.html"},{"isInterface":false,"name":"goog.labs.testing.ObjectEqualsMatcher","isTypedef":false,"href":"class_goog_labs_testing_ObjectEqualsMatcher.html"},{"isInterface":false,"name":"goog.labs.testing.RegexMatcher","isTypedef":false,"href":"class_goog_labs_testing_RegexMatcher.html"},{"isInterface":false,"name":"goog.labs.testing.StartsWithMatcher","isTypedef":false,"href":"class_goog_labs_testing_StartsWithMatcher.html"},{"isInterface":false,"name":"goog.labs.testing.StringContainsInOrderMatcher","isTypedef":false,"href":"class_goog_labs_testing_StringContainsInOrderMatcher.html"},{"isInterface":false,"name":"goog.net","isTypedef":false,"href":"namespace_goog_net.html"},{"isInterface":false,"name":"goog.net.DefaultXmlHttpFactory","isTypedef":false,"href":"class_goog_net_DefaultXmlHttpFactory.html"},{"isInterface":false,"name":"goog.net.WrapperXmlHttpFactory","isTypedef":false,"href":"class_goog_net_WrapperXmlHttpFactory.html"},{"isInterface":false,"name":"goog.net.XmlHttp","isTypedef":false,"href":"namespace_goog_net_XmlHttp.html"},{"isInterface":false,"name":"goog.net.XmlHttp.OptionType","isTypedef":false,"href":"enum_goog_net_XmlHttp_OptionType.html"},{"isInterface":false,"name":"goog.net.XmlHttp.ReadyState","isTypedef":false,"href":"enum_goog_net_XmlHttp_ReadyState.html"},{"isInterface":false,"name":"goog.net.XmlHttpFactory","isTypedef":false,"href":"class_goog_net_XmlHttpFactory.html"},{"isInterface":false,"name":"goog.object","isTypedef":false,"href":"namespace_goog_object.html"},{"isInterface":false,"name":"goog.string","isTypedef":false,"href":"namespace_goog_string.html"},{"isInterface":false,"name":"goog.string.Unicode","isTypedef":false,"href":"enum_goog_string_Unicode.html"},{"isInterface":false,"name":"goog.structs","isTypedef":false,"href":"namespace_goog_structs.html"},{"isInterface":false,"name":"goog.structs.Map","isTypedef":false,"href":"class_goog_structs_Map.html"},{"isInterface":false,"name":"goog.uri","isTypedef":false,"href":"namespace_goog_uri.html"},{"isInterface":false,"name":"goog.uri.utils","isTypedef":false,"href":"namespace_goog_uri_utils.html"},{"name":"goog.uri.utils.QueryArray","isTypedef":true,"href":"namespace_goog_uri_utils.html#goog.uri.utils.QueryArray"},{"name":"goog.uri.utils.QueryValue","isTypedef":true,"href":"namespace_goog_uri_utils.html#goog.uri.utils.QueryValue"},{"isInterface":false,"name":"goog.uri.utils.CharCode_","isTypedef":false,"href":"enum_goog_uri_utils_CharCode_.html"},{"isInterface":false,"name":"goog.uri.utils.ComponentIndex","isTypedef":false,"href":"enum_goog_uri_utils_ComponentIndex.html"},{"isInterface":false,"name":"goog.uri.utils.StandardQueryParam","isTypedef":false,"href":"enum_goog_uri_utils_StandardQueryParam.html"},{"isInterface":false,"name":"goog.userAgent","isTypedef":false,"href":"namespace_goog_userAgent.html"},{"isInterface":false,"name":"goog.userAgent.product","isTypedef":false,"href":"namespace_goog_userAgent_product.html"},{"isInterface":false,"name":"webdriver","isTypedef":false,"href":"namespace_webdriver.html"},{"isInterface":false,"name":"webdriver.AbstractBuilder","isTypedef":false,"href":"class_webdriver_AbstractBuilder.html"},{"isInterface":false,"name":"webdriver.ActionSequence","isTypedef":false,"href":"class_webdriver_ActionSequence.html"},{"isInterface":false,"name":"webdriver.Alert","isTypedef":false,"href":"class_webdriver_Alert.html"},{"isInterface":false,"name":"webdriver.Browser","isTypedef":false,"href":"enum_webdriver_Browser.html"},{"isInterface":false,"name":"webdriver.Builder","isTypedef":false,"href":"class_webdriver_Builder.html"},{"isInterface":false,"name":"webdriver.Button","isTypedef":false,"href":"enum_webdriver_Button.html"},{"isInterface":false,"name":"webdriver.By","isTypedef":false,"href":"namespace_webdriver_By.html"},{"name":"webdriver.By.Hash","isTypedef":true,"href":"namespace_webdriver_By.html#webdriver.By.Hash"},{"isInterface":false,"name":"webdriver.Capabilities","isTypedef":false,"href":"class_webdriver_Capabilities.html"},{"isInterface":false,"name":"webdriver.Capability","isTypedef":false,"href":"enum_webdriver_Capability.html"},{"isInterface":false,"name":"webdriver.Command","isTypedef":false,"href":"class_webdriver_Command.html"},{"isInterface":true,"name":"webdriver.CommandExecutor","isTypedef":false,"href":"interface_webdriver_CommandExecutor.html"},{"isInterface":false,"name":"webdriver.CommandName","isTypedef":false,"href":"enum_webdriver_CommandName.html"},{"isInterface":false,"name":"webdriver.EventEmitter","isTypedef":false,"href":"class_webdriver_EventEmitter.html"},{"isInterface":false,"name":"webdriver.FirefoxDomExecutor","isTypedef":false,"href":"class_webdriver_FirefoxDomExecutor.html"},{"isInterface":false,"name":"webdriver.FirefoxDomExecutor.Attribute_","isTypedef":false,"href":"enum_webdriver_FirefoxDomExecutor_Attribute_.html"},{"isInterface":false,"name":"webdriver.FirefoxDomExecutor.EventType_","isTypedef":false,"href":"enum_webdriver_FirefoxDomExecutor_EventType_.html"},{"isInterface":false,"name":"webdriver.Key","isTypedef":false,"href":"enum_webdriver_Key.html"},{"isInterface":false,"name":"webdriver.Locator","isTypedef":false,"href":"class_webdriver_Locator.html"},{"isInterface":false,"name":"webdriver.Session","isTypedef":false,"href":"class_webdriver_Session.html"},{"isInterface":false,"name":"webdriver.UnhandledAlertError","isTypedef":false,"href":"class_webdriver_UnhandledAlertError.html"},{"isInterface":false,"name":"webdriver.WebDriver","isTypedef":false,"href":"class_webdriver_WebDriver.html"},{"isInterface":false,"name":"webdriver.WebDriver.Logs","isTypedef":false,"href":"class_webdriver_WebDriver_Logs.html"},{"isInterface":false,"name":"webdriver.WebDriver.Navigation","isTypedef":false,"href":"class_webdriver_WebDriver_Navigation.html"},{"isInterface":false,"name":"webdriver.WebDriver.Options","isTypedef":false,"href":"class_webdriver_WebDriver_Options.html"},{"isInterface":false,"name":"webdriver.WebDriver.TargetLocator","isTypedef":false,"href":"class_webdriver_WebDriver_TargetLocator.html"},{"isInterface":false,"name":"webdriver.WebDriver.Timeouts","isTypedef":false,"href":"class_webdriver_WebDriver_Timeouts.html"},{"isInterface":false,"name":"webdriver.WebDriver.Window","isTypedef":false,"href":"class_webdriver_WebDriver_Window.html"},{"isInterface":false,"name":"webdriver.WebElement","isTypedef":false,"href":"class_webdriver_WebElement.html"},{"isInterface":false,"name":"webdriver.http","isTypedef":false,"href":"namespace_webdriver_http.html"},{"isInterface":true,"name":"webdriver.http.Client","isTypedef":false,"href":"interface_webdriver_http_Client.html"},{"isInterface":false,"name":"webdriver.http.CorsClient","isTypedef":false,"href":"class_webdriver_http_CorsClient.html"},{"isInterface":false,"name":"webdriver.http.Executor","isTypedef":false,"href":"class_webdriver_http_Executor.html"},{"isInterface":false,"name":"webdriver.http.Request","isTypedef":false,"href":"class_webdriver_http_Request.html"},{"isInterface":false,"name":"webdriver.http.Response","isTypedef":false,"href":"class_webdriver_http_Response.html"},{"isInterface":false,"name":"webdriver.http.XhrClient","isTypedef":false,"href":"class_webdriver_http_XhrClient.html"},{"isInterface":false,"name":"webdriver.logging","isTypedef":false,"href":"namespace_webdriver_logging.html"},{"name":"webdriver.logging.Preferences","isTypedef":true,"href":"namespace_webdriver_logging.html#webdriver.logging.Preferences"},{"isInterface":false,"name":"webdriver.logging.Entry","isTypedef":false,"href":"class_webdriver_logging_Entry.html"},{"isInterface":false,"name":"webdriver.logging.Level","isTypedef":false,"href":"enum_webdriver_logging_Level.html"},{"isInterface":false,"name":"webdriver.logging.LevelName","isTypedef":false,"href":"enum_webdriver_logging_LevelName.html"},{"isInterface":false,"name":"webdriver.logging.Type","isTypedef":false,"href":"enum_webdriver_logging_Type.html"},{"isInterface":false,"name":"webdriver.process","isTypedef":false,"href":"namespace_webdriver_process.html"},{"isInterface":false,"name":"webdriver.promise","isTypedef":false,"href":"namespace_webdriver_promise.html"},{"isInterface":false,"name":"webdriver.promise.CanceledTaskError_","isTypedef":false,"href":"class_webdriver_promise_CanceledTaskError_.html"},{"isInterface":false,"name":"webdriver.promise.ControlFlow","isTypedef":false,"href":"class_webdriver_promise_ControlFlow.html"},{"name":"webdriver.promise.ControlFlow.Timer","isTypedef":true,"href":"class_webdriver_promise_ControlFlow.html#webdriver.promise.ControlFlow.Timer"},{"isInterface":false,"name":"webdriver.promise.ControlFlow.EventType","isTypedef":false,"href":"enum_webdriver_promise_ControlFlow_EventType.html"},{"isInterface":false,"name":"webdriver.promise.Deferred","isTypedef":false,"href":"class_webdriver_promise_Deferred.html"},{"name":"webdriver.promise.Deferred.Listener_","isTypedef":true,"href":"class_webdriver_promise_Deferred.html#webdriver.promise.Deferred.Listener_"},{"isInterface":false,"name":"webdriver.promise.Deferred.State_","isTypedef":false,"href":"enum_webdriver_promise_Deferred_State_.html"},{"isInterface":false,"name":"webdriver.promise.Frame_","isTypedef":false,"href":"class_webdriver_promise_Frame_.html"},{"isInterface":false,"name":"webdriver.promise.Node_","isTypedef":false,"href":"class_webdriver_promise_Node_.html"},{"isInterface":false,"name":"webdriver.promise.Promise","isTypedef":false,"href":"class_webdriver_promise_Promise.html"},{"isInterface":false,"name":"webdriver.promise.Task_","isTypedef":false,"href":"class_webdriver_promise_Task_.html"},{"isInterface":false,"name":"webdriver.stacktrace","isTypedef":false,"href":"namespace_webdriver_stacktrace.html"},{"isInterface":false,"name":"webdriver.stacktrace.Frame","isTypedef":false,"href":"class_webdriver_stacktrace_Frame.html"},{"isInterface":false,"name":"webdriver.stacktrace.Snapshot","isTypedef":false,"href":"class_webdriver_stacktrace_Snapshot.html"},{"isInterface":false,"name":"webdriver.testing","isTypedef":false,"href":"namespace_webdriver_testing.html"},{"isInterface":false,"name":"webdriver.testing.Assertion","isTypedef":false,"href":"class_webdriver_testing_Assertion.html"},{"isInterface":false,"name":"webdriver.testing.Assertion.DelegatingMatcher_","isTypedef":false,"href":"class_webdriver_testing_Assertion_DelegatingMatcher_.html"},{"isInterface":false,"name":"webdriver.testing.ContainsMatcher","isTypedef":false,"href":"class_webdriver_testing_ContainsMatcher.html"},{"isInterface":false,"name":"webdriver.testing.NegatedAssertion","isTypedef":false,"href":"class_webdriver_testing_NegatedAssertion.html"},{"isInterface":false,"name":"webdriver.testing.assert","isTypedef":false,"href":"module_selenium-webdriver_testing_assert_namespace_dossier$$module__$usr$local$google$home$jleyba$dev$selenium$build$javascript$node$selenium_webdriver$testing$assert_exports.html"},{"isInterface":false,"name":"webdriver.testing.asserts","isTypedef":false,"href":"namespace_webdriver_testing_asserts.html"}],"modules":[{"name":"selenium-webdriver","types":[{"isInterface":false,"name":"Command","isTypedef":false,"href":"class_webdriver_Command.html"},{"isInterface":false,"name":"Key","isTypedef":false,"href":"enum_webdriver_Key.html"},{"isInterface":false,"name":"EventEmitter","isTypedef":false,"href":"class_webdriver_EventEmitter.html"},{"isInterface":false,"name":"Browser","isTypedef":false,"href":"enum_webdriver_Browser.html"},{"isInterface":false,"name":"ActionSequence","isTypedef":false,"href":"class_webdriver_ActionSequence.html"},{"isInterface":false,"name":"Button","isTypedef":false,"href":"enum_webdriver_Button.html"},{"isInterface":false,"name":"CommandName","isTypedef":false,"href":"enum_webdriver_CommandName.html"},{"isInterface":false,"name":"WebElement","isTypedef":false,"href":"class_webdriver_WebElement.html"},{"isInterface":false,"name":"Capability","isTypedef":false,"href":"enum_webdriver_Capability.html"},{"isInterface":false,"name":"Session","isTypedef":false,"href":"class_webdriver_Session.html"},{"isInterface":false,"name":"Builder","isTypedef":false,"href":"module_selenium-webdriver_class_Builder.html"},{"isInterface":false,"name":"Capabilities","isTypedef":false,"href":"class_webdriver_Capabilities.html"},{"isInterface":false,"name":"WebDriver","isTypedef":false,"href":"class_webdriver_WebDriver.html"}],"href":"module_selenium-webdriver.html"},{"name":"selenium-webdriver/_base","types":[],"href":"module_selenium-webdriver__base.html"},{"name":"selenium-webdriver/builder","types":[{"isInterface":false,"name":"Builder","isTypedef":false,"href":"module_selenium-webdriver_builder_class_Builder.html"}],"href":"module_selenium-webdriver_builder.html"},{"name":"selenium-webdriver/chrome","types":[{"isInterface":false,"name":"ServiceBuilder","isTypedef":false,"href":"module_selenium-webdriver_chrome_class_ServiceBuilder.html"},{"isInterface":false,"name":"Options","isTypedef":false,"href":"module_selenium-webdriver_chrome_class_Options.html"}],"href":"module_selenium-webdriver_chrome.html"},{"name":"selenium-webdriver/error","types":[{"isInterface":false,"name":"ErrorCode","isTypedef":false,"href":"enum_bot_ErrorCode.html"},{"isInterface":false,"name":"Error","isTypedef":false,"href":"class_bot_Error.html"}],"href":"module_selenium-webdriver_error.html"},{"name":"selenium-webdriver/executors","types":[],"href":"module_selenium-webdriver_executors.html"},{"name":"selenium-webdriver/http","types":[{"isInterface":false,"name":"HttpClient","isTypedef":false,"href":"module_selenium-webdriver_http_class_HttpClient.html"},{"isInterface":false,"name":"Response","isTypedef":false,"href":"class_webdriver_http_Response.html"},{"isInterface":false,"name":"Request","isTypedef":false,"href":"class_webdriver_http_Request.html"},{"isInterface":false,"name":"Executor","isTypedef":false,"href":"class_webdriver_http_Executor.html"}],"href":"module_selenium-webdriver_http.html"},{"name":"selenium-webdriver/http/util","types":[],"href":"module_selenium-webdriver_http_util.html"},{"name":"selenium-webdriver/io","types":[],"href":"module_selenium-webdriver_io.html"},{"name":"selenium-webdriver/net","types":[],"href":"module_selenium-webdriver_net.html"},{"name":"selenium-webdriver/net/portprober","types":[],"href":"module_selenium-webdriver_net_portprober.html"},{"name":"selenium-webdriver/phantomjs","types":[],"href":"module_selenium-webdriver_phantomjs.html"},{"name":"selenium-webdriver/proxy","types":[{"isInterface":false,"name":"ProxyConfig","isTypedef":true,"href":"module_selenium-webdriver_proxy_namespace_ProxyConfig.html"}],"href":"module_selenium-webdriver_proxy.html"},{"name":"selenium-webdriver/remote","types":[{"isInterface":false,"name":"DriverService","isTypedef":false,"href":"module_selenium-webdriver_remote_class_DriverService.html"},{"isInterface":false,"name":"SeleniumServer","isTypedef":false,"href":"module_selenium-webdriver_remote_class_SeleniumServer.html"},{"name":"SeleniumServer.Options","isTypedef":true,"href":""},{"isInterface":false,"name":"ServiceOptions","isTypedef":true,"href":"module_selenium-webdriver_remote_namespace_ServiceOptions.html"}],"href":"module_selenium-webdriver_remote.html"},{"name":"selenium-webdriver/testing","types":[],"href":"module_selenium-webdriver_testing.html"},{"name":"selenium-webdriver/testing/assert","types":[],"href":"module_selenium-webdriver_testing_assert.html"}]}; \ No newline at end of file diff --git a/javascript/node/selenium-webdriver/CHANGES.md b/javascript/node/selenium-webdriver/CHANGES.md index 2af1e6145cb17..874f0e58c5af5 100644 --- a/javascript/node/selenium-webdriver/CHANGES.md +++ b/javascript/node/selenium-webdriver/CHANGES.md @@ -1,4 +1,4 @@ -## v2.41.0-dev +## v2.41.0 * FIXED: 7138: export logging API from webdriver module. * FIXED: 7105: beforeEach/it/afterEach properly bind `this` for Mocha tests. diff --git a/javascript/node/selenium-webdriver/package.json b/javascript/node/selenium-webdriver/package.json index be415020fb3b2..b25363e0c7521 100644 --- a/javascript/node/selenium-webdriver/package.json +++ b/javascript/node/selenium-webdriver/package.json @@ -1,6 +1,6 @@ { "name": "selenium-webdriver", - "version": "2.40.0", + "version": "2.41.0", "description": "The official WebDriver JavaScript bindings from the Selenium project", "keywords": [ "automation",