@types/selenium-webdriver
Version:
TypeScript definitions for selenium-webdriver
1,522 lines (1,333 loc) • 109 kB
TypeScript
import { WebSocket } from "ws";
import LogInspector = require("./bidi/logInspector");
import * as chrome from "./chrome";
import { HttpResponse } from "./devtools/networkinterceptor";
import * as edge from "./edge";
import * as firefox from "./firefox";
import * as http from "./http";
import * as ie from "./ie";
import { By, ByHash, RelativeBy } from "./lib/by";
import { Browser, Capabilities, ITimeouts } from "./lib/capabilities";
import * as command from "./lib/command";
import { Actions, Key } from "./lib/input";
import * as logging from "./lib/logging";
import { promise } from "./lib/promise";
import * as until from "./lib/until";
import { ShadowRootPromise } from "./lib/webdriver";
import * as safari from "./safari";
export * from "./lib/by";
export { Browser, Capabilities, Capability, ITimeouts } from "./lib/capabilities";
export { Actions, Button, Key, Origin } from "./lib/input";
export { promise } from "./lib/promise";
export { LogInspector };
export { until };
export { logging };
/**
* Typings for lib/error
*/
export namespace error {
class IError extends Error {
constructor(message?: string);
message: string;
}
/**
* The base WebDriver error type. This error type is only used directly when a
* more appropriate category is not defined for the offending error.
*/
class WebDriverError extends IError {
constructor(message?: string);
remoteStacktrace?: string | undefined;
}
/**
* Indicates a {@linkplain ./webdriver.WebElement#click click command} could
* not completed because the click target is obscured by other elements on the
* page.
*/
class ElementClickInterceptedError extends WebDriverError {
constructor(message?: string);
}
/**
* An attempt was made to select an element that cannot be selected.
*/
class ElementNotSelectableError extends WebDriverError {
constructor(message?: string);
}
/**
* Indicates a command could not be completed because the target element is
* not pointer or keyboard interactable. This will often occur if an element
* is present in the DOM, but not rendered (i.e. its CSS style has
* "display: none").
*/
class ElementNotInteractableError extends WebDriverError {
constructor(message?: string);
}
/**
* Indicates a navigation event caused the browser to generate a certificate
* warning. This is usually caused by an expired or invalid TLS certificate.
*/
class InsecureCertificateError extends WebDriverError {
constructor(message?: string);
}
/**
* The arguments passed to a command are either invalid or malformed.
*/
class InvalidArgumentError extends WebDriverError {
constructor(message?: string);
}
/**
* An illegal attempt was made to set a cookie under a different domain than
* the current page.
*/
class InvalidCookieDomainError extends WebDriverError {
constructor(message?: string);
}
/**
* The coordinates provided to an interactions operation are invalid.
*/
class InvalidCoordinatesError extends WebDriverError {
constructor(message?: string);
}
/**
* An element command could not be completed because the element is in an
* invalid state, e.g. attempting to click an element that is no longer
* attached to the document.
*/
class InvalidElementStateError extends WebDriverError {
constructor(message?: string);
}
/**
* Argument was an invalid selector.
*/
class InvalidSelectorError extends WebDriverError {
constructor(message?: string);
}
/**
* Occurs when a command is directed to a session that does not exist.
*/
class NoSuchSessionError extends WebDriverError {
constructor(message?: string);
}
/**
* An error occurred while executing JavaScript supplied by the user.
*/
class JavascriptError extends WebDriverError {
constructor(message?: string);
}
/**
* The target for mouse interaction is not in the browser’s viewport and
* cannot be brought into that viewport.
*/
class MoveTargetOutOfBoundsError extends WebDriverError {
constructor(message?: string);
}
/**
* An attempt was made to operate on a modal dialog when one was not open.
*/
class NoSuchAlertError extends WebDriverError {
constructor(message?: string);
}
/**
* Indicates a named cookie could not be found in the cookie jar for the
* currently selected document.
*/
class NoSuchCookieError extends WebDriverError {
constructor(message?: string);
}
/**
* An element could not be located on the page using the given search
* parameters.
*/
class NoSuchElementError extends WebDriverError {
constructor(message?: string);
}
/**
* A request to switch to a frame could not be satisfied because the frame
* could not be found.
*/
class NoSuchFrameError extends WebDriverError {
constructor(message?: string);
}
/**
* A request to switch to a window could not be satisfied because the window
* could not be found.
*/
class NoSuchWindowError extends WebDriverError {
constructor(message?: string);
}
/**
* A script did not complete before its timeout expired.
*/
class ScriptTimeoutError extends WebDriverError {
constructor(message?: string);
}
/**
* A new session could not be created.
*/
class SessionNotCreatedError extends WebDriverError {
constructor(message?: string);
}
/**
* An element command failed because the referenced element is no longer
* attached to the DOM.
*/
class StaleElementReferenceError extends WebDriverError {
constructor(message?: string);
}
/**
* An operation did not completErrorCodee before its timeout expired.
*/
class TimeoutError extends WebDriverError {
constructor(message?: string);
}
/**
* A request to set a cookie’s value could not be satisfied.
*/
class UnableToSetCookieError extends WebDriverError {
constructor(message?: string);
}
/**
* A screen capture operation was not possible.
*/
class UnableToCaptureScreenError extends WebDriverError {
constructor(message?: string);
}
/**
* A modal dialog was open, blocking this operation.
*/
class UnexpectedAlertOpenError extends WebDriverError {
constructor(message?: string, openAlertText?: string);
/**
* @return {(string|undefined)} The text displayed with the unhandled alert,
* if available.
*/
getAlertText(): string;
}
/**
* A command could not be executed because the remote end is not aware of it.
*/
class UnknownCommandError extends WebDriverError {
constructor(message?: string);
}
/**
* The requested command matched a known URL but did not match an method for
* that URL.
*/
class UnknownMethodError extends WebDriverError {
constructor(message?: string);
}
/**
* Reports an unsupport operation.
*/
class UnsupportedOperationError extends WebDriverError {
constructor(message?: string);
}
interface Response {
error: string | number;
message: string;
}
/**
* Checks a response object from a server that adheres to the W3C WebDriver
* protocol.
*/
function checkResponse(data: Response): Response;
interface MaybeLegacyResponse {
status?: number | undefined;
value?: { message: string } | undefined;
message?: string | undefined;
getAlertText?(): string;
}
/**
* Checks a legacy response from the Selenium 2.0 wire protocol for an error.
*/
function checkLegacyResponse(response: MaybeLegacyResponse): MaybeLegacyResponse;
interface ErrorData {
error: string | number;
message: string;
[key: string]: string | number;
}
/**
* Throws an error coded from the W3C protocol. A generic error will be thrown
* if the provided `data` is not a valid encoded error.
*/
function throwDecodedError(data: ErrorData | string): never;
interface ErrorCodeType {
[key: string]: number;
}
const ErrorCode: ErrorCodeType;
/**
* Lookup the err in table of errors.
*/
function encodeError(err: any): { error: string; message: string };
}
type ConditionFn<T> = (webdriver: WebDriver) => T | null | Promise<T | null>;
/**
* Defines a condition for use with WebDriver's WebDriver#wait wait command.
*/
export class Condition<T> {
/**
* @param {string} message A descriptive error message. Should complete the
* sentence 'Waiting [...]'
* @param {function(!WebDriver): OUT} fn The condition function to
* evaluate on each iteration of the wait loop.
*/
constructor(message: string, fn: ConditionFn<T>);
/** @return {string} A description of this condition. */
description(): string;
fn(webdriver: WebDriver): ConditionFn<T>;
}
/**
* Defines a condition that will result in a {@link WebElement}.
*/
export class WebElementCondition extends Condition<WebElement> {
// add an unused private member so the compiler treats this
// class distinct from other Conditions
private _nominal: undefined;
}
/**
* x,y
*/
export interface ILocation {
x: number;
y: number;
}
/**
* width, height
*/
export interface ISize {
width: number;
height: number;
}
/**
* x,y,w,h
*/
export interface IRectangle {
x: number;
y: number;
width: number;
height: number;
}
/**
* Class for defining sequences of user touch interactions. Each sequence
* will not be executed until {@link #perform} is called.
*
* Example:
*
* new TouchSequence(driver).
* tapAndHold({x: 0, y: 0}).
* move({x: 3, y: 4}).
* release({x: 10, y: 10}).
* perform();
*/
export class TouchSequence {
/*
* @param {!WebDriver} driver The driver instance to use.
* @constructor
*/
constructor(driver: WebDriver);
/**
* Executes this action sequence.
* @return {!Promise} A promise that will be resolved once
* this sequence has completed.
*/
perform(): Promise<void>;
/**
* Taps an element.
*
* @param {!WebElement} elem The element to tap.
* @return {!TouchSequence} A self reference.
*/
tap(elem: WebElement): TouchSequence;
/**
* Double taps an element.
*
* @param {!WebElement} elem The element to double tap.
* @return {!TouchSequence} A self reference.
*/
doubleTap(elem: WebElement): TouchSequence;
/**
* Long press on an element.
*
* @param {!WebElement} elem The element to long press.
* @return {!TouchSequence} A self reference.
*/
longPress(elem: WebElement): TouchSequence;
/**
* Touch down at the given location.
*
* @param {{ x: number, y: number }} location The location to touch down at.
* @return {!TouchSequence} A self reference.
*/
tapAndHold(location: ILocation): TouchSequence;
/**
* Move a held {@linkplain #tapAndHold touch} to the specified location.
*
* @param {{x: number, y: number}} location The location to move to.
* @return {!TouchSequence} A self reference.
*/
move(location: ILocation): TouchSequence;
/**
* Release a held {@linkplain #tapAndHold touch} at the specified location.
*
* @param {{x: number, y: number}} location The location to release at.
* @return {!TouchSequence} A self reference.
*/
release(location: ILocation): TouchSequence;
/**
* Scrolls the touch screen by the given offset.
*
* @param {{x: number, y: number}} offset The offset to scroll to.
* @return {!TouchSequence} A self reference.
*/
scroll(offset: IOffset): TouchSequence;
/**
* Scrolls the touch screen, starting on `elem` and moving by the specified
* offset.
*
* @param {!WebElement} elem The element where scroll starts.
* @param {{x: number, y: number}} offset The offset to scroll to.
* @return {!TouchSequence} A self reference.
*/
scrollFromElement(elem: WebElement, offset: IOffset): TouchSequence;
/**
* Flick, starting anywhere on the screen, at speed xspeed and yspeed.
*
* @param {{xspeed: number, yspeed: number}} speed The speed to flick in each
* direction, in pixels per second.
* @return {!TouchSequence} A self reference.
*/
flick(speed: ISpeed): TouchSequence;
/**
* Flick starting at elem and moving by x and y at specified speed.
*
* @param {!WebElement} elem The element where flick starts.
* @param {{x: number, y: number}} offset The offset to flick to.
* @param {number} speed The speed to flick at in pixels per second.
* @return {!TouchSequence} A self reference.
*/
flickElement(elem: WebElement, offset: IOffset, speed: number): TouchSequence;
}
/**
* x.y again
*/
export interface IOffset {
x: number;
y: number;
}
/**
* delta x,y
*/
export interface ISpeed {
xspeed: number;
yspeed: number;
}
/**
* Represents a modal dialog such as {@code alert}, {@code confirm}, or
* {@code prompt}. Provides functions to retrieve the message displayed with
* the alert, accept or dismiss the alert, and set the response text (in the
* case of {@code prompt}).
*/
export class Alert {
/**
* @param {!WebDriver} driver The driver controlling the browser this alert
* is attached to.
* @param {string} text The message text displayed with this alert.
*/
constructor(driver: WebDriver, text: string);
// region Methods
/**
* Retrieves the message text displayed with this alert. For instance, if the
* alert were opened with alert('hello'), then this would return 'hello'.
* @return {!Promise} A promise that will be resolved to the
* text displayed with this alert.
*/
getText(): Promise<string>;
/**
* Sets the username and password in an alert prompting for credentials (such
* as a Basic HTTP Auth prompt). This method will implicitly
* {@linkplain #accept() submit} the dialog.
*
* @param {string} username The username to send.
* @param {string} password The password to send.
* @return {!Promise<void>} A promise that will be resolved when this
* command has completed.
*/
authenticateAs(username: string, password: string): Promise<void>;
/**
* Accepts this alert.
* @return {!Promise} A promise that will be resolved when
* this command has completed.
*/
accept(): Promise<void>;
/**
* Dismisses this alert.
* @return {!Promise} A promise that will be resolved when
* this command has completed.
*/
dismiss(): Promise<void>;
/**
* Sets the response text on this alert. This command will return an error if
* the underlying alert does not support response text (e.g. window.alert and
* window.confirm).
* @param {string} text The text to set.
* @return {!Promise} A promise that will be resolved when
* this command has completed.
*/
sendKeys(text: string): Promise<void>;
// endregion
}
/**
* AlertPromise is a promise that will be fulfilled with an Alert. This promise
* serves as a forward proxy on an Alert, allowing calls to be scheduled
* directly on this instance before the underlying Alert has been fulfilled. In
* other words, the following two statements are equivalent:
*
* driver.switchTo().alert().dismiss();
* driver.switchTo().alert().then(function(alert) {
* return alert.dismiss();
* });
*
* @final
*/
export interface AlertPromise extends Promise<Alert> {}
/**
* Implement AlertPromise
*/
export class AlertPromise extends Alert {
/**
* @param {!WebDriver} driver The driver controlling the browser this
* alert is attached to.
* @param {!promise.Thenable<!Alert>} alert A thenable
* that will be fulfilled with the promised alert.
*/
constructor(driver: WebDriver, alert: Promise<Alert>);
}
/**
* ProxyConfig
*/
export interface ProxyConfig {
proxyType: string;
proxyAutoconfigUrl?: string | undefined;
ftpProxy?: string | undefined;
httpProxy?: string | undefined;
sslProxy?: string | undefined;
noProxy?: string | undefined;
socksProxy?: string | undefined;
socksUsername?: string | undefined;
socksPassword?: string | undefined;
}
/**
* Creates new {@link WebDriver WebDriver} instances. The environment
* variables listed below may be used to override a builder's configuration,
* allowing quick runtime changes.
*
* - {@code SELENIUM_BROWSER}: defines the target browser in the form
* {@code browser[:version][:platform]}.
*
* - {@code SELENIUM_REMOTE_URL}: defines the remote URL for all builder
* instances. This environment variable should be set to a fully qualified
* URL for a WebDriver server (e.g. http://localhost:4444/wd/hub). This
* option always takes precedence over {@code SELENIUM_SERVER_JAR}.
*
* - {@code SELENIUM_SERVER_JAR}: defines the path to the
* <a href='http://selenium-release.storage.googleapis.com/index.html'>
* standalone Selenium server</a> jar to use. The server will be started the
* first time a WebDriver instance and be killed when the process exits.
*
* Suppose you had mytest.js that created WebDriver with
*
* var driver = new Builder()
* .forBrowser('chrome')
* .build();
*
* This test could be made to use Firefox on the local machine by running with
* `SELENIUM_BROWSER=firefox node mytest.js`. Rather than change the code to
* target Google Chrome on a remote machine, you can simply set the
* `SELENIUM_BROWSER` and `SELENIUM_REMOTE_URL` environment variables:
*
* SELENIUM_BROWSER=chrome:36:LINUX \
* SELENIUM_REMOTE_URL=http://www.example.com:4444/wd/hub \
* node mytest.js
*
* You could also use a local copy of the standalone Selenium server:
*
* SELENIUM_BROWSER=chrome:36:LINUX \
* SELENIUM_SERVER_JAR=/path/to/selenium-server-standalone.jar \
* node mytest.js
*/
export class Builder {
// region Constructors
/** */
constructor();
// endregion
// region Methods
/**
* Configures this builder to ignore any environment variable overrides and to
* only use the configuration specified through this instance's API.
*
* @return {!Builder} A self reference.
*/
disableEnvironmentOverrides(): Builder;
/**
* Creates a new WebDriver client based on this builder's current
* configuration.
*
* This method will return a {@linkplain ThenableWebDriver} instance, allowing
* users to issue commands directly without calling `then()`. The returned
* thenable wraps a promise that will resolve to a concrete
* {@linkplain webdriver.WebDriver WebDriver} instance. The promise will be
* rejected if the remote end fails to create a new session.
*
* @return {!ThenableWebDriver} A new WebDriver instance.
* @throws {Error} If the current configuration is invalid.
*/
build(): ThenableWebDriver;
/**
* Configures the target browser for clients created by this instance.
* Any calls to {@link #withCapabilities} after this function will
* overwrite these settings.
*
* <p>You may also define the target browser using the {@code
* SELENIUM_BROWSER} environment variable. If set, this environment variable
* should be of the form {@code browser[:[version][:platform]]}.
*
* @param {(string|Browser)} name The name of the target browser;
* common defaults are available on the {@link Browser} enum.
* @param {string=} opt_version A desired version; may be omitted if any
* version should be used.
* @param {string=} opt_platform The desired platform; may be omitted if any
* version may be used.
* @return {!Builder} A self reference.
*/
forBrowser(name: string, opt_version?: string, opt_platform?: string): Builder;
/**
* Returns the base set of capabilities this instance is currently configured
* to use.
* @return {!Capabilities} The current capabilities for this builder.
*/
getCapabilities(): Capabilities;
/**
* @return {string} The URL of the WebDriver server this instance is
* configured to use.
*/
getServerUrl(): string;
/**
* @return {?string} The URL of the proxy server to use for the WebDriver's
* HTTP connections, or `null` if not set.
*/
getWebDriverProxy(): string | null;
/**
* Sets the default action to take with an unexpected alert before returning
* an error.
* @param {string} beahvior The desired behavior; should be 'accept',
* 'dismiss', or 'ignore'. Defaults to 'dismiss'.
* @return {!Builder} A self reference.
*/
setAlertBehavior(behavior?: string): Builder;
/**
* Sets Chrome-specific options for drivers created by this builder. Any
* logging or proxy settings defined on the given options will take precedence
* over those set through {@link #setLoggingPrefs} and {@link #setProxy},
* respectively.
*
* @param {!chrome.Options} options The ChromeDriver options to use.
* @return {!Builder} A self reference.
*/
setChromeOptions(options: chrome.Options): Builder;
/**
* @return {chrome.Options} the Chrome specific options currently configured
* for this builder.
*/
getChromeOptions(): chrome.Options;
/**
* Sets the service builder to use for managing the chromedriver child process
* when creating new Chrome sessions.
*
* @param {chrome.ServiceBuilder} service the service to use.
* @return {!Builder} A self reference.
*/
setChromeService(service: chrome.ServiceBuilder): Builder;
/**
* Set {@linkplain edge.Options options} specific to Microsoft's Edge browser
* for drivers created by this builder. Any proxy settings defined on the
* given options will take precedence over those set through
* {@link #setProxy}.
*
* @param {!edge.Options} options The MicrosoftEdgeDriver options to use.
* @return {!Builder} A self reference.
*/
setEdgeOptions(options: edge.Options): Builder;
/**
* Sets the {@link edge.ServiceBuilder} to use to manage the
* MicrosoftEdgeDriver child process when creating sessions locally.
*
* @param {edge.ServiceBuilder} service the service to use.
* @return {!Builder} a self reference.
*/
setEdgeService(service: edge.ServiceBuilder): Builder;
/**
* Sets Firefox-specific options for drivers created by this builder. Any
* logging or proxy settings defined on the given options will take precedence
* over those set through {@link #setLoggingPrefs} and {@link #setProxy},
* respectively.
*
* @param {!firefox.Options} options The FirefoxDriver options to use.
* @return {!Builder} A self reference.
*/
setFirefoxOptions(options: firefox.Options): Builder;
/**
* @return {firefox.Options} the Firefox specific options currently configured
* for this instance.
*/
getFirefoxOptions(): firefox.Options;
/**
* Sets the {@link firefox.ServiceBuilder} to use to manage the geckodriver
* child process when creating Firefox sessions locally.
*
* @param {firefox.ServiceBuilder} service the service to use.
* @return {!Builder} a self reference.
*/
setFirefoxService(service: firefox.ServiceBuilder): Builder;
/**
* Set Internet Explorer specific {@linkplain ie.Options options} for drivers
* created by this builder. Any proxy settings defined on the given options
* will take precedence over those set through {@link #setProxy}.
*
* @param {!ie.Options} options The IEDriver options to use.
* @return {!Builder} A self reference.
*/
setIeOptions(options: ie.Options): Builder;
/**
* Sets the {@link ie.ServiceBuilder} to use to manage the geckodriver
* child process when creating IE sessions locally.
*
* @param {ie.ServiceBuilder} service the service to use.
* @return {!Builder} a self reference.
*/
setIeService(service: ie.ServiceBuilder): Builder;
/**
* Sets the logging preferences for the created session. Preferences may be
* changed by repeated calls, or by calling {@link #withCapabilities}.
* @param {!(logging.Preferences|Object.<string, string>)} prefs The
* desired logging preferences.
* @return {!Builder} A self reference.
*/
setLoggingPrefs(prefs: logging.Preferences | {}): Builder;
/**
* Sets the proxy configuration to use for WebDriver clients created by this
* builder. Any calls to {@link #withCapabilities} after this function will
* overwrite these settings.
* @param {!capabilities.ProxyConfig} config The configuration to use.
* @return {!Builder} A self reference.
*/
setProxy(config: ProxyConfig): Builder;
/**
* Sets Safari specific {@linkplain safari.Options options} for drivers
* created by this builder. Any logging settings defined on the given options
* will take precedence over those set through {@link #setLoggingPrefs}.
*
* @param {!safari.Options} options The Safari options to use.
* @return {!Builder} A self reference.
*/
setSafariOptions(options: safari.Options): Builder;
/**
* @return {safari.Options} the Safari specific options currently configured
* for this instance.
*/
getSafariOptions(): safari.Options;
/**
* Sets the http agent to use for each request.
* If this method is not called, the Builder will use http.globalAgent by
* default.
*
* @param {http.Agent} agent The agent to use for each request.
* @return {!Builder} A self reference.
*/
usingHttpAgent(agent: any): Builder;
/**
* @return {http.Agent} The http agent used for each request
*/
getHttpAgent(): any | null;
/**
* Sets the URL of a remote WebDriver server to use. Once a remote URL has
* been specified, the builder direct all new clients to that server. If this
* method is never called, the Builder will attempt to create all clients
* locally.
*
* <p>As an alternative to this method, you may also set the
* {@code SELENIUM_REMOTE_URL} environment variable.
*
* @param {string} url The URL of a remote server to use.
* @return {!Builder} A self reference.
*/
usingServer(url: string): Builder;
/**
* Sets the URL of the proxy to use for the WebDriver's HTTP connections.
* If this method is never called, the Builder will create a connection
* without a proxy.
*
* @param {string} proxy The URL of a proxy to use.
* @return {!Builder} A self reference.
*/
usingWebDriverProxy(proxy: string): Builder;
/**
* Sets the desired capabilities when requesting a new session. This will
* overwrite any previously set capabilities.
* @param {!(Object|Capabilities)} capabilities The desired
* capabilities for a new session.
* @return {!Builder} A self reference.
*/
withCapabilities(capabilities: {} | Capabilities): Builder;
// endregion
}
export type Locator = By | Function | ByHash | RelativeBy;
/**
* Describes an event listener registered on an {@linkplain EventEmitter}.
*/
export class Listener {
/**
* @param {!Function} fn The acutal listener function.
* @param {(Object|undefined)} scope The object in whose scope to invoke the
* listener.
* @param {boolean} oneshot Whether this listener should only be used once.
*/
constructor(fn: Function, scope: {}, oneshot: boolean);
}
/**
* Object that can emit events for others to listen for. This is used instead
* of Closure's event system because it is much more light weight. The API is
* based on Node's EventEmitters.
*/
export class EventEmitter {
// region Constructors
/** */
constructor();
// endregion
// region Methods
/**
* Fires an event and calls all listeners.
* @param {string} type The type of event to emit.
* @param {...*} var_args Any arguments to pass to each listener.
*/
emit(type: string, ...var_args: any[]): void;
/**
* Returns a mutable list of listeners for a specific type of event.
* @param {string} type The type of event to retrieve the listeners for.
* @return {!Set<!Listener>} The registered listeners for the given event
* type.
*/
listeners(type: string): any;
/**
* Registers a listener.
* @param {string} type The type of event to listen for.
* @param {!Function} fn The function to invoke when the event is fired.
* @param {Object=} opt_self The object in whose scope to invoke the listener.
* @param {boolean=} opt_oneshot Whether the listener should b (e removed
* after
* the first event is fired.
* @return {!EventEmitter} A self reference.
*/
addListener(type: string, fn: Function, opt_scope?: any, opt_oneshot?: boolean): EventEmitter;
/**
* Registers a one-time listener which will be called only the first time an
* event is emitted, after which it will be removed.
* @param {string} type The type of event to listen for.
* @param {!Function} fn The function to invoke when the event is fired.
* @param {Object=} opt_scope The object in whose scope to invoke the
* listener.
* @return {!EventEmitter} A self reference.
*/
once(type: string, fn: any, opt_scope?: any): EventEmitter;
/**
* An alias for {@code #addListener()}.
* @param {string} type The type of event to listen for.
* @param {!Function} fn The function to invoke when the event is fired.
* @param {Object=} opt_scope The object in whose scope to invoke the
* listener.
* @return {!EventEmitter} A self reference.
*/
on(type: string, fn: Function, opt_scope?: any): EventEmitter;
/**
* Removes a previously registered event listener.
* @param {string} type The type of event to unregister.
* @param {!Function} listenerFn The handler function to remove.
* @return {!EventEmitter} A self reference.
*/
removeListener(type: string, listenerFn: Function): EventEmitter;
/**
* Removes all listeners for a specific type of event. If no event is
* specified, all listeners across all types will be removed.
* @param {string=} opt_type The type of event to remove listeners from.
* @return {!EventEmitter} A self reference.
*/
removeAllListeners(opt_type?: string): EventEmitter;
// endregion
}
/**
* Interface for navigating back and forth in the browser history.
*/
export class Navigation {
// region Constructors
/**
* Interface for navigating back and forth in the browser history.
*
* This class should never be instantiated directly. Insead, obtain an
* instance with
*
* navigate()
*
* @see WebDriver#navigate()
*/
constructor(driver: WebDriver);
// endregion
// region Methods
/**
* Schedules a command to navigate to a new URL.
* @param {string} url The URL to navigate to.
* @return {!Promise.<void>} A promise that will be resolved
* when the URL has been loaded.
*/
to(url: string): Promise<void>;
/**
* Schedules a command to move backwards in the browser history.
* @return {!Promise.<void>} A promise that will be resolved
* when the navigation event has completed.
*/
back(): Promise<void>;
/**
* Schedules a command to move forwards in the browser history.
* @return {!Promise.<void>} A promise that will be resolved
* when the navigation event has completed.
*/
forward(): Promise<void>;
/**
* Schedules a command to refresh the current page.
* @return {!Promise.<void>} A promise that will be resolved
* when the navigation event has completed.
*/
refresh(): Promise<void>;
// endregion
}
export interface IWebDriverOptionsCookie {
/**
* The name of the cookie.
*/
name: string;
/**
* The cookie value.
*/
value: string;
/**
* The cookie path. Defaults to "/" when adding a cookie.
*/
path?: string | undefined;
/**
* The domain the cookie is visible to. Defaults to the current browsing
* context's document's URL when adding a cookie.
*/
domain?: string | undefined;
/**
* Whether the cookie is a secure cookie. Defaults to false when adding a new
* cookie.
*/
secure?: boolean | undefined;
/**
* Whether the cookie is an HTTP only cookie. Defaults to false when adding a
* new cookie.
*/
httpOnly?: boolean | undefined;
/**
* When the cookie expires.
*
* When {@linkplain Options#addCookie() adding a cookie}, this may be
* specified in _seconds_ since Unix epoch (January 1, 1970). The expiry will
* default to 20 years in the future if omitted.
*
* The expiry is always returned in seconds since epoch when
* {@linkplain Options#getCookies() retrieving cookies} from the browser.
*/
expiry?: number | Date | undefined;
}
export interface IWebDriverCookie extends IWebDriverOptionsCookie {
/**
* When the cookie expires.
*
* The expiry is always returned in seconds since epoch when
* {@linkplain Options#getCookies() retrieving cookies} from the browser.
*/
expiry?: number | undefined;
}
/**
* Provides methods for managing browser and driver state.
*/
export class Options {
// region Constructors
/**
* @param {!WebDriver} driver The parent driver.
*/
constructor(driver: WebDriver);
// endregion
// region Methods
/**
* Schedules a command to add a cookie.
* @param {IWebDriverOptionsCookie} spec Defines the cookie to add.
* @return {!Promise<void>} A promise that will be resolved
* when the cookie has been added to the page.
* @throws {error.InvalidArgumentError} if any of the cookie parameters are
* invalid.
* @throws {TypeError} if `spec` is not a cookie object.
*/
addCookie(spec: IWebDriverOptionsCookie): Promise<void>;
/**
* Schedules a command to delete all cookies visible to the current page.
* @return {!Promise} A promise that will be resolved when all
* cookies have been deleted.
*/
deleteAllCookies(): Promise<void>;
/**
* Schedules a command to delete the cookie with the given name. This command
* is a no-op if there is no cookie with the given name visible to the current
* page.
* @param {string} name The name of the cookie to delete.
* @return {!Promise} A promise that will be resolved when the
* cookie has been deleted.
*/
deleteCookie(name: string): Promise<void>;
/**
* Schedules a command to retrieve all cookies visible to the current page.
* Each cookie will be returned as a JSON object as described by the WebDriver
* wire protocol.
* @return {!Promise} A promise that will be resolved with the
* cookies visible to the current page.
* @see http://code.google.com/p/selenium/wiki/JsonWireProtocol#Cookie_JSON_Object
*/
getCookies(): Promise<IWebDriverCookie[]>;
/**
* Schedules a command to retrieve the cookie with the given name. Returns
* null if there is no such cookie. The cookie will be returned as a JSON
* object as described by the WebDriver wire protocol.
* @param {string} name The name of the cookie to retrieve.
* @return {!Promise} A promise that will be resolved with the
* named cookie, or {@code null} if there is no such cookie.
* @see http://code.google.com/p/selenium/wiki/JsonWireProtocol#Cookie_JSON_Object
*/
getCookie(name: string): Promise<IWebDriverCookie>;
/**
* @return {!Logs} The interface for managing driver
* logs.
*/
logs(): Logs;
/**
* The current timeouts
*/
getTimeouts(): Promise<ITimeouts>;
/**
* Set current timeouts
*/
setTimeouts(timeouts: ITimeouts): Promise<void>;
/**
* @return {!Window} The interface for managing the
* current window.
*/
window(): Window;
// endregion
}
/**
* An interface for managing the current window.
*/
export class Window {
// region Constructors
/**
* @param {!WebDriver} driver The parent driver.
*/
constructor(driver: WebDriver);
// endregion
// region Methods
/**
* Retrieves the window's current position, relative to the top left corner of
* the screen.
* @return {!Promise} A promise that will be resolved with the
* window's position in the form of a {x:number, y:number} object literal.
*/
getPosition(): Promise<ILocation>;
/**
* Repositions the current window.
* @param {number} x The desired horizontal position, relative to the left
* side of the screen.
* @param {number} y The desired vertical position, relative to the top of the
* of the screen.
* @return {!Promise} A promise that will be resolved when the
* command has completed.
*/
setPosition(x: number, y: number): Promise<void>;
/**
* Retrieves the window's current size.
* @return {!Promise} A promise that will be resolved with the
* window's size in the form of a {width:number, height:number} object
* literal.
*/
getSize(): Promise<ISize>;
/**
* Resizes the current window.
* @param {number} width The desired window width.
* @param {number} height The desired window height.
* @return {!Promise} A promise that will be resolved when the
* command has completed.
*/
setSize(width: number, height: number): Promise<void>;
/**
* Returns the current top-level window's size and position.
*/
getRect(): Promise<IRectangle>;
/**
* Sets the current top-level window's size and position. You may update
* just the size by omitting `x` & `y`, or just the position by omitting
* `width` & `height` options.
*/
setRect({ x, y, width, height }: Partial<IRectangle>): Promise<IRectangle>;
/**
* Maximizes the current window. The exact behavior of this command is
* specific to individual window managers, but typically involves increasing
* the window to the maximum available size without going full-screen.
* @return {!Promise} A promise that will be resolved when the
* command has completed.
*/
maximize(): Promise<void>;
/**
* Minimizes the current window. The exact behavior of this command is
* specific to individual window managers, but typically involves hiding
* the window in the system tray.
* @return {!Promise} A promise that will be resolved when the
* command has completed.
*/
minimize(): Promise<void>;
/**
* Invokes the "full screen" operation on the current window. The exact
* behavior of this command is specific to individual window managers, but
* this will typically increase the window size to the size of the physical
* display and hide the browser chrome.
*
* @return {!Promise<void>} A promise that will be resolved when the command
* has completed.
* @see <https://fullscreen.spec.whatwg.org/#fullscreen-an-element>
*/
fullscreen(): Promise<void>;
// endregion
}
/**
* Interface for managing WebDriver log records.
*/
export class Logs {
// region Constructors
/**
* @param {!WebDriver} driver The parent driver.
*/
constructor(driver: WebDriver);
// endregion
// region
/**
* Fetches available log entries for the given type.
*
* <p/>Note that log buffers are reset after each call, meaning that
* available log entries correspond to those entries not yet returned for a
* given log type. In practice, this means that this call will return the
* available log entries since the last call, or from the start of the
* session.
*
* @param {!logging.Type} type The desired log type.
* @return {!Promise.<!Array.<!logging.Entry>>} A
* promise that will resolve to a list of log entries for the specified
* type.
*/
get(type: string): Promise<logging.Entry[]>;
/**
* Retrieves the log types available to this driver.
* @return {!Promise.<!Array.<!logging.Type>>} A
* promise that will resolve to a list of available log types.
*/
getAvailableLogTypes(): Promise<string[]>;
// endregion
}
/**
* An interface for changing the focus of the driver to another frame or window.
*/
export class TargetLocator {
// region Constructors
/**
* @param {!WebDriver} driver The parent driver.
*/
constructor(driver: WebDriver);
// endregion
// region Methods
/**
* Schedules a command retrieve the {@code document.activeElement} element on
* the current document, or {@code document.body} if activeElement is not
* available.
* @return {!WebElement} The active element.
*/
activeElement(): WebElementPromise;
/**
* Schedules a command to switch focus of all future commands to the first
* frame on the page.
* @return {!Promise} A promise that will be resolved when the
* driver has changed focus to the default content.
*/
defaultContent(): Promise<void>;
/**
* Changes the focus of all future commands to another frame on the page. The
* target frame may be specified as one of the following:
*
* - A number that specifies a (zero-based) index into [window.frames](
* https://developer.mozilla.org/en-US/docs/Web/API/Window.frames).
* - A {@link WebElement} reference, which correspond to a `frame` or `iframe`
* DOM element.
* - The `null` value, to select the topmost frame on the page. Passing `null`
* is the same as calling {@link #defaultContent defaultContent()}.
*
* If the specified frame can not be found, the returned promise will be
* rejected with a {@linkplain error.NoSuchFrameError}.
*
* @param {(number|WebElement|null)} id The frame locator.
* @return {!Promise<void>} A promise that will be resolved
* when the driver has changed focus to the specified frame.
*/
frame(id: number | WebElement | null): Promise<void>;
/**
* Changes the focus of all future commands to the parent frame of the
* currently selected frame. This command has no effect if the driver is
* already focused on the top-level browsing context.
*
* @return {!Promise<void>} A promise that will be resolved when the command
* has completed.
*/
parentFrame(): Promise<void>;
/**
* Schedules a command to switch the focus of all future commands to another
* window. Windows may be specified by their {@code window.name} attribute or
* by its handle (as returned by {@link WebDriver#getWindowHandles}).
*
* If the specified window cannot be found, the returned promise will be
* rejected with a {@linkplain error.NoSuchWindowError}.
*
* @param {string} nameOrHandle The name or window handle of the window to
* switch focus to.
* @return {!Promise<void>} A promise that will be resolved
* when the driver has changed focus to the specified window.
*/
window(nameOrHandle: string): Promise<void>;
/**
* Creates a new browser window and switches the focus for future
* commands of this driver to the new window.
*
* @param {string} typeHint 'window' or 'tab'. The created window is not
* guaranteed to be of the requested type; if the driver does not support
* the requested type, a new browser window will be created of whatever type
* the driver does support.
* @return {!Promise<void>} A promise that will be resolved
* when the driver has changed focus to the new window.
*/
newWindow(typeHint: string): Promise<void>;
/**
* Schedules a command to change focus to the active modal dialog, such as
* those opened by `window.alert()`, `window.confirm()`, and
* `window.prompt()`. The returned promise will be rejected with a
* {@linkplain error.NoSuchAlertError} if there are no open alerts.
*
* @return {!AlertPromise} The open alert.
*/
alert(): AlertPromise;
// endregion
}
/**
* Used with {@link WebElement#sendKeys WebElement#sendKeys} on file
* input elements ({@code <input type='file'>}) to detect when the entered key
* sequence defines the path to a file.
*
* By default, {@linkplain WebElement WebElement's} will enter all
* key sequences exactly as entered. You may set a
* {@linkplain WebDriver#setFileDetector file detector} on the parent
* WebDriver instance to define custom behavior for handling file elements. Of
* particular note is the {@link selenium-webdriver/remote.FileDetector}, which
* should be used when running against a remote
* [Selenium Server](http://docs.seleniumhq.org/download/).
*/
export class FileDetector {
constructor();
/**
* Handles the file specified by the given path, preparing it for use with
* the current browser. If the path does not refer to a valid file, it will
* be returned unchanged, otherwisee a path suitable for use with the current
* browser will be returned.
*
* This default implementation is a no-op. Subtypes may override this
* function for custom tailored file handling.
*
* @param {!WebDriver} driver The driver for the current browser.
* @param {string} path The path to process.
* @return {!Promise<string>} A promise for the processed
* file path.
* @package
*/
handleFile(driver: WebDriver, path: string): Promise<string>;
}
export type CreateSessionCapabilities = Capabilities | {
desired?: Capabilities | undefined;
required?: Capabilities | undefined;
};
/**
* Creates a new WebDriver client, which provides control over a browser.
*
* Every WebDriver command returns a {@code Promise} that
* represents the result of that command. Callbacks may be registered on this
* object to manipulate the command result or catch an expected error. Any
* commands scheduled with a callback are considered sub-commands and will
* execute before the next command in the current frame. For example:
*
* var message = [];
* driver.call(message.push, message, 'a').then(function() {
* driver.call(message.push, message, 'b');
* });
* driver.call(message.push, message, 'c');
* driver.call(function() {
* alert('message is abc? ' + (message.join('') == 'abc'));
* });
*/
export class WebDriver {
// region Constructors
/**
* @param {!(Session|Promise<!Session>)} session Either a
* known session or a promise that will be resolved to a session.
* @param {!command.Executor} executor The executor to use when sending
* commands to the browser.
*/
constructor(session: Session | Promise<Session>, executor: http.Executor);
// endregion
// region StaticMethods
/**
* Creates a new WebDriver session.
*
* By default, the requested session `capabilities` are merely "desired" and
* the remote end will still create a new session even if it cannot satisfy
* all of the requested capabilities. You can query which capabilities a
* session actually has using the
* {@linkplain #getCapabilities() getCapabilities()} method on the returned
* WebDriver instance.
*
* To define _required capabilities_, provide the `capabilities` as an object
* literal with `required` and `desired` keys. The `desired` key may be
* omitted if all capabilities are required, and vice versa. If the server
* cannot create a session with all of the required capabilities, it will
* return an {@linkplain error.SessionNotCreatedError}.
*
* let required = new Capabilities().set('browserName', 'firefox');
* let desired = new Capabilities().set('version', '45');
* let driver = WebDriver.createSession(executor, {required, desired});
*
* This function will always return a WebDriver instance. If there is an error
* creating the session, such as the aforementioned SessionNotCreatedError,
* the driver will have a rejected {@linkplain #getSession session} promise.
* It is recommended that this promise is left _unhandled_ so it will
* propagate through the {@linkplain promise.ControlFlow control flow} and
* cause subsequent commands to fail.
*
* let required = Capabilities.firefox();
* let driver = WebDriver.createSession(execut