mirror of
https://github.com/gosticks/DefinitelyTyped.git
synced 2025-10-16 12:05:41 +00:00
3360 lines
111 KiB
TypeScript
3360 lines
111 KiB
TypeScript
// Type definitions for Selenium WebDriverJS 4.0
|
||
// Project: https://github.com/SeleniumHQ/selenium
|
||
// Definitions by: Bill Armstrong <https://github.com/BillArmstrong>,
|
||
// Yuki Kokubun <https://github.com/Kuniwak>,
|
||
// Craig Nishina <https://github.com/cnishina>,
|
||
// Simon Gellis <https://github.com/SupernaviX>,
|
||
// Ben Dixon <https://github.com/bendxn>,
|
||
// Ziyu <https://github.com/oddui>
|
||
// Johann Wolf <https://github.com/beta-vulgaris>
|
||
// Aleksey Chemakin <https://github.com/Dzenly>
|
||
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
|
||
// TypeScript Version: 2.4
|
||
|
||
import * as chrome from './chrome';
|
||
import * as edge from './edge';
|
||
import * as firefox from './firefox';
|
||
import * as ie from './ie';
|
||
import { By, ByHash } from './lib/by';
|
||
import * as command from './lib/command';
|
||
import * as http from './http';
|
||
import { Actions, Button, Key, Origin } from './lib/input';
|
||
import { promise } from './lib/promise';
|
||
import * as until from './lib/until';
|
||
import * as safari from './safari';
|
||
|
||
export { By, ByHash } from './lib/by';
|
||
export { Actions, Button, Key, Origin } from './lib/input';
|
||
export { promise } from './lib/promise';
|
||
export { until as until };
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
/**
|
||
* 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;
|
||
value?: {message: string};
|
||
message?: string;
|
||
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};
|
||
}
|
||
|
||
export namespace logging {
|
||
/**
|
||
* A hash describing log preferences.
|
||
* @typedef {Object.<logging.Type, logging.LevelName>}
|
||
*/
|
||
class Preferences {
|
||
setLevel(type: string, level: Level | string | number): void;
|
||
toJSON(): { [key: string]: string };
|
||
}
|
||
|
||
interface IType {
|
||
/** Logs originating from the browser. */
|
||
BROWSER: string;
|
||
/** Logs from a WebDriver client. */
|
||
CLIENT: string;
|
||
/** Logs from a WebDriver implementation. */
|
||
DRIVER: string;
|
||
/** Logs related to performance. */
|
||
PERFORMANCE: string;
|
||
/** Logs from the remote server. */
|
||
SERVER: string;
|
||
}
|
||
|
||
/**
|
||
* Common log types.
|
||
* @enum {string}
|
||
*/
|
||
const Type: IType;
|
||
|
||
/**
|
||
* Defines a message level that may be used to control logging output.
|
||
*
|
||
* @final
|
||
*/
|
||
class Level {
|
||
name_: string;
|
||
value_: number;
|
||
/**
|
||
* @param {string} name the level's name.
|
||
* @param {number} level the level's numeric value.
|
||
*/
|
||
constructor(name: string, level: number);
|
||
|
||
/** @override */
|
||
toString(): string;
|
||
|
||
/** This logger's name. */
|
||
name: string;
|
||
|
||
/** The numeric log level. */
|
||
value: number;
|
||
|
||
/**
|
||
* Indicates no log messages should be recorded.
|
||
* @const
|
||
*/
|
||
static OFF: Level;
|
||
/**
|
||
* Log messages with a level of `1000` or higher.
|
||
* @const
|
||
*/
|
||
static SEVERE: Level;
|
||
/**
|
||
* Log messages with a level of `900` or higher.
|
||
* @const
|
||
*/
|
||
static WARNING: Level;
|
||
/**
|
||
* Log messages with a level of `800` or higher.
|
||
* @const
|
||
*/
|
||
static INFO: Level;
|
||
/**
|
||
* Log messages with a level of `700` or higher.
|
||
* @const
|
||
*/
|
||
static DEBUG: Level;
|
||
/**
|
||
* Log messages with a level of `500` or higher.
|
||
* @const
|
||
*/
|
||
static FINE: Level;
|
||
/**
|
||
* Log messages with a level of `400` or higher.
|
||
* @const
|
||
*/
|
||
static FINER: Level;
|
||
/**
|
||
* Log messages with a level of `300` or higher.
|
||
* @const
|
||
*/
|
||
static FINEST: Level;
|
||
/**
|
||
* Indicates all log messages should be recorded.
|
||
* @const
|
||
*/
|
||
static ALL: Level;
|
||
}
|
||
|
||
/**
|
||
* Converts a level name or value to a {@link logging.Level} value.
|
||
* If the name/value is not recognized, {@link logging.Level.ALL}
|
||
* will be returned.
|
||
* @param {(number|string)} nameOrValue The log level name, or value, to
|
||
* convert .
|
||
* @return {!logging.Level} The converted level.
|
||
*/
|
||
function getLevel(nameOrValue: string | number): Level;
|
||
|
||
interface IEntryJSON {
|
||
level: string;
|
||
message: string;
|
||
timestamp: number;
|
||
type: string;
|
||
}
|
||
|
||
/**
|
||
* A single log entry.
|
||
*/
|
||
class Entry {
|
||
/**
|
||
* @param {(!logging.Level|string)} level The entry level.
|
||
* @param {string} message The log message.
|
||
* @param {number=} opt_timestamp The time this entry was generated, in
|
||
* milliseconds since 0:00:00, January 1, 1970 UTC. If omitted, the
|
||
* current time will be used.
|
||
* @param {string=} opt_type The log type, if known.
|
||
* @constructor
|
||
*/
|
||
constructor(level: Level | string | number, message: string, opt_timestamp?: number, opt_type?: string | IType);
|
||
|
||
/** @type {!logging.Level} */
|
||
level: Level;
|
||
|
||
/** @type {string} */
|
||
message: string;
|
||
|
||
/** @type {number} */
|
||
timestamp: number;
|
||
|
||
/** @type {string} */
|
||
type: string;
|
||
|
||
/**
|
||
* @return {{level: string, message: string, timestamp: number,
|
||
* type: string}} The JSON representation of this entry.
|
||
*/
|
||
toJSON(): IEntryJSON;
|
||
}
|
||
|
||
/**
|
||
* An object used to log debugging messages. Loggers use a hierarchical,
|
||
* dot-separated naming scheme. For instance, 'foo' is considered the parent of
|
||
* the 'foo.bar' and an ancestor of 'foo.bar.baz'.
|
||
*
|
||
* Each logger may be assigned a {@linkplain #setLevel log level}, which
|
||
* controls which level of messages will be reported to the
|
||
* {@linkplain #addHandler handlers} attached to this instance. If a log level
|
||
* is not explicitly set on a logger, it will inherit its parent.
|
||
*
|
||
* This class should never be directly instantiated. Instead, users should
|
||
* obtain logger references using the {@linkplain ./logging.getLogger()
|
||
* getLogger()} function.
|
||
*
|
||
* @final
|
||
*/
|
||
class Logger {
|
||
/**
|
||
* @param {string} name the name of this logger.
|
||
* @param {Level=} opt_level the initial level for this logger.
|
||
*/
|
||
constructor(name: string, opt_level?: Level);
|
||
|
||
/** @private {string} */
|
||
name_: string;
|
||
/** @private {Level} */
|
||
level_: Level;
|
||
/** @private {Logger} */
|
||
parent_: Logger;
|
||
/** @private {Set<function(!Entry)>} */
|
||
handlers_: any;
|
||
|
||
/** @return {string} the name of this logger. */
|
||
getName(): string;
|
||
|
||
/**
|
||
* @param {Level} level the new level for this logger, or `null` if the logger
|
||
* should inherit its level from its parent logger.
|
||
*/
|
||
setLevel(level: Level): void;
|
||
|
||
/** @return {Level} the log level for this logger. */
|
||
getLevel(): Level;
|
||
|
||
/**
|
||
* @return {!Level} the effective level for this logger.
|
||
*/
|
||
getEffectiveLevel(): Level;
|
||
|
||
/**
|
||
* @param {!Level} level the level to check.
|
||
* @return {boolean} whether messages recorded at the given level are loggable
|
||
* by this instance.
|
||
*/
|
||
isLoggable(level: Level): boolean;
|
||
|
||
/**
|
||
* Adds a handler to this logger. The handler will be invoked for each message
|
||
* logged with this instance, or any of its descendants.
|
||
*
|
||
* @param {function(!Entry)} handler the handler to add.
|
||
*/
|
||
addHandler(handler: any): void;
|
||
|
||
/**
|
||
* Removes a handler from this logger.
|
||
*
|
||
* @param {function(!Entry)} handler the handler to remove.
|
||
* @return {boolean} whether a handler was successfully removed.
|
||
*/
|
||
removeHandler(handler: any): void;
|
||
|
||
/**
|
||
* Logs a message at the given level. The message may be defined as a string
|
||
* or as a function that will return the message. If a function is provided,
|
||
* it will only be invoked if this logger's
|
||
* {@linkplain #getEffectiveLevel() effective log level} includes the given
|
||
* `level`.
|
||
*
|
||
* @param {!Level} level the level at which to log the message.
|
||
* @param {(string|function(): string)} loggable the message to log, or a
|
||
* function that will return the message.
|
||
*/
|
||
log(level: Level, loggable: string | Function): void;
|
||
|
||
/**
|
||
* Logs a message at the {@link Level.SEVERE} log level.
|
||
* @param {(string|function(): string)} loggable the message to log, or a
|
||
* function that will return the message.
|
||
*/
|
||
severe(loggable: string | Function): void;
|
||
|
||
/**
|
||
* Logs a message at the {@link Level.WARNING} log level.
|
||
* @param {(string|function(): string)} loggable the message to log, or a
|
||
* function that will return the message.
|
||
*/
|
||
warning(loggable: string | Function): void;
|
||
|
||
/**
|
||
* Logs a message at the {@link Level.INFO} log level.
|
||
* @param {(string|function(): string)} loggable the message to log, or a
|
||
* function that will return the message.
|
||
*/
|
||
info(loggable: string | Function): void;
|
||
|
||
/**
|
||
* Logs a message at the {@link Level.DEBUG} log level.
|
||
* @param {(string|function(): string)} loggable the message to log, or a
|
||
* function that will return the message.
|
||
*/
|
||
debug(loggable: string | Function): void;
|
||
|
||
/**
|
||
* Logs a message at the {@link Level.FINE} log level.
|
||
* @param {(string|function(): string)} loggable the message to log, or a
|
||
* function that will return the message.
|
||
*/
|
||
fine(loggable: string | Function): void;
|
||
|
||
/**
|
||
* Logs a message at the {@link Level.FINER} log level.
|
||
* @param {(string|function(): string)} loggable the message to log, or a
|
||
* function that will return the message.
|
||
*/
|
||
finer(loggable: string | Function): void;
|
||
|
||
/**
|
||
* Logs a message at the {@link Level.FINEST} log level.
|
||
* @param {(string|function(): string)} loggable the message to log, or a
|
||
* function that will return the message.
|
||
*/
|
||
finest(loggable: string | Function): void;
|
||
}
|
||
|
||
/**
|
||
* Maintains a collection of loggers.
|
||
*
|
||
* @final
|
||
*/
|
||
class LogManager {
|
||
/**
|
||
* Retrieves a named logger, creating it in the process. This function will
|
||
* implicitly create the requested logger, and any of its parents, if they
|
||
* do not yet exist.
|
||
*
|
||
* @param {string} name the logger's name.
|
||
* @return {!Logger} the requested logger.
|
||
*/
|
||
getLogger(name?: string): Logger;
|
||
|
||
/**
|
||
* Creates a new logger.
|
||
*
|
||
* @param {string} name the logger's name.
|
||
* @param {!Logger} parent the logger's parent.
|
||
* @return {!Logger} the new logger.
|
||
* @private
|
||
*/
|
||
createLogger_(name: string, parent: Logger): Logger;
|
||
}
|
||
|
||
/**
|
||
* Retrieves a named logger, creating it in the process. This function will
|
||
* implicitly create the requested logger, and any of its parents, if they
|
||
* do not yet exist.
|
||
*
|
||
* @param {string} name the logger's name.
|
||
* @return {!Logger} the requested logger.
|
||
*/
|
||
function getLogger(name?: string): Logger;
|
||
|
||
/**
|
||
* Adds the console handler to the given logger. The console handler will log
|
||
* all messages using the JavaScript Console API.
|
||
*
|
||
* @param {Logger=} opt_logger The logger to add the handler to; defaults
|
||
* to the root logger.
|
||
*/
|
||
function addConsoleHandler(opt_logger?: Logger): void;
|
||
|
||
/**
|
||
* Removes the console log handler from the given logger.
|
||
*
|
||
* @param {Logger=} opt_logger The logger to remove the handler from; defaults
|
||
* to the root logger.
|
||
* @see exports.addConsoleHandler
|
||
*/
|
||
function removeConsoleHandler(opt_logger?: Logger): void;
|
||
}
|
||
|
||
/**
|
||
* 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
|
||
*/
|
||
constructor(message: string, fn: (webdriver: WebDriver) => T);
|
||
|
||
/** @return {string} A description of this condition. */
|
||
description(): string;
|
||
|
||
/** @type {function(!WebDriver): OUT} */
|
||
fn(webdriver: WebDriver): T;
|
||
}
|
||
|
||
/**
|
||
* Defines a condition that will result in a {@link WebElement}.
|
||
*
|
||
* @extends {Condition<!(WebElement|IThenable<!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();
|
||
* });
|
||
*
|
||
* @implements {promise.Thenable.<!Alert>}
|
||
* @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>);
|
||
}
|
||
|
||
/**
|
||
* Recognized browser names.
|
||
* @enum {string}
|
||
*/
|
||
export interface IBrowser {
|
||
ANDROID: string;
|
||
CHROME: string;
|
||
EDGE: string;
|
||
FIREFOX: string;
|
||
IE: string;
|
||
INTERNET_EXPLORER: string;
|
||
IPAD: string;
|
||
IPHONE: string;
|
||
OPERA: string;
|
||
PHANTOM_JS: string;
|
||
SAFARI: string;
|
||
HTMLUNIT: string;
|
||
}
|
||
|
||
/**
|
||
* Instace of
|
||
*/
|
||
export const Browser: IBrowser;
|
||
|
||
/**
|
||
* ProxyConfig
|
||
*/
|
||
export interface ProxyConfig {
|
||
proxyType: string;
|
||
proxyAutoconfigUrl?: string;
|
||
ftpProxy?: string;
|
||
httpProxy?: string;
|
||
sslProxy?: string;
|
||
noProxy?: string;
|
||
socksProxy?: string;
|
||
socksUsername?: string;
|
||
socksPassword?: string;
|
||
}
|
||
|
||
/**
|
||
* 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
|
||
*/
|
||
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;
|
||
|
||
/**
|
||
* Common webdriver capability keys.
|
||
* @enum {string}
|
||
*/
|
||
export interface ICapability {
|
||
/**
|
||
* Indicates whether a driver should accept all SSL certs by default. This
|
||
* capability only applies when requesting a new session. To query whether
|
||
* a driver can handle insecure SSL certs, see
|
||
* {@link Capability.SECURE_SSL}.
|
||
*/
|
||
ACCEPT_SSL_CERTS: string;
|
||
|
||
/**
|
||
* The browser name. Common browser names are defined in the
|
||
* {@link Browser} enum.
|
||
*/
|
||
BROWSER_NAME: string;
|
||
|
||
/**
|
||
* Defines how elements should be scrolled into the viewport for interaction.
|
||
* This capability will be set to zero (0) if elements are aligned with the
|
||
* top of the viewport, or one (1) if aligned with the bottom. The default
|
||
* behavior is to align with the top of the viewport.
|
||
*/
|
||
ELEMENT_SCROLL_BEHAVIOR: string;
|
||
|
||
/**
|
||
* Whether the driver is capable of handling modal alerts (e.g. alert,
|
||
* confirm, prompt). To define how a driver <i>should</i> handle alerts,
|
||
* use {@link Capability.UNEXPECTED_ALERT_BEHAVIOR}.
|
||
*/
|
||
HANDLES_ALERTS: string;
|
||
|
||
/**
|
||
* Key for the logging driver logging preferences.
|
||
*/
|
||
LOGGING_PREFS: string;
|
||
|
||
/**
|
||
* Whether this session generates native events when simulating user input.
|
||
*/
|
||
NATIVE_EVENTS: string;
|
||
|
||
/**
|
||
* Describes the platform the browser is running on. Will be one of
|
||
* ANDROID, IOS, LINUX, MAC, UNIX, or WINDOWS. When <i>requesting</i> a
|
||
* session, ANY may be used to indicate no platform preference (this is
|
||
* semantically equivalent to omitting the platform capability).
|
||
*/
|
||
PLATFORM: string;
|
||
|
||
/**
|
||
* Describes the proxy configuration to use for a new WebDriver session.
|
||
*/
|
||
PROXY: string;
|
||
|
||
/** Whether the driver supports changing the brower's orientation. */
|
||
ROTATABLE: string;
|
||
|
||
/**
|
||
* Whether a driver is only capable of handling secure SSL certs. To request
|
||
* that a driver accept insecure SSL certs by default, use
|
||
* {@link Capability.ACCEPT_SSL_CERTS}.
|
||
*/
|
||
SECURE_SSL: string;
|
||
|
||
/** Whether the driver supports manipulating the app cache. */
|
||
SUPPORTS_APPLICATION_CACHE: string;
|
||
|
||
/** Whether the driver supports locating elements with CSS selectors. */
|
||
SUPPORTS_CSS_SELECTORS: string;
|
||
|
||
/** Whether the browser supports JavaScript. */
|
||
SUPPORTS_JAVASCRIPT: string;
|
||
|
||
/** Whether the driver supports controlling the browser's location info. */
|
||
SUPPORTS_LOCATION_CONTEXT: string;
|
||
|
||
/** Whether the driver supports taking screenshots. */
|
||
TAKES_SCREENSHOT: string;
|
||
|
||
/**
|
||
* Defines how the driver should handle unexpected alerts. The value should
|
||
* be one of 'accept', 'dismiss', or 'ignore.
|
||
*/
|
||
UNEXPECTED_ALERT_BEHAVIOR: string;
|
||
|
||
/** Defines the browser version. */
|
||
VERSION: string;
|
||
}
|
||
|
||
/**
|
||
* The standard WebDriver capability keys.
|
||
*/
|
||
export const Capability: ICapability;
|
||
|
||
/**
|
||
* Describes a set of capabilities for a WebDriver session.
|
||
*/
|
||
export class Capabilities {
|
||
// region Constructors
|
||
|
||
/**
|
||
* @param {(Capabilities|Object)=} opt_other Another set of
|
||
* capabilities to merge into this instance.
|
||
* @constructor
|
||
*/
|
||
constructor(opt_other?: Capabilities|{});
|
||
|
||
// endregion
|
||
|
||
// region Methods
|
||
|
||
/** @return {!Object} The JSON representation of this instance. */
|
||
toJSON(): any;
|
||
|
||
/**
|
||
* Merges another set of capabilities into this instance. Any duplicates in
|
||
* the provided set will override those already set on this instance.
|
||
* @param {!(Capabilities|Object)} other The capabilities to
|
||
* merge into this instance.
|
||
* @return {!Capabilities} A self reference.
|
||
*/
|
||
merge(other: Capabilities|{}): Capabilities;
|
||
|
||
/**
|
||
* @param {string} key The capability to set.
|
||
* @param {*} value The capability value. Capability values must be JSON
|
||
* serializable. Pass {@code null} to unset the capability.
|
||
* @return {!Capabilities} A self reference.
|
||
*/
|
||
set(key: string, value: any): Capabilities;
|
||
|
||
/**
|
||
* Sets the name of the target browser.
|
||
*
|
||
* @param {(Browser|string)} name the browser name.
|
||
* @return {!Capabilities} a self reference.
|
||
*/
|
||
setBrowserName(name: string): Capabilities;
|
||
|
||
/**
|
||
* Sets the desired version of the target browser.
|
||
*
|
||
* @param {string} version the desired version.
|
||
* @return {!Capabilities} a self reference.
|
||
*/
|
||
setBrowserVersion(version: string): Capabilities;
|
||
|
||
/**
|
||
* Sets the logging preferences. Preferences may be specified as a
|
||
* {@link logging.Preferences} instance, or a as a map of log-type to
|
||
* log-level.
|
||
* @param {!(logging.Preferences|Object.<string, string>)} prefs The
|
||
* logging preferences.
|
||
* @return {!Capabilities} A self reference.
|
||
*/
|
||
setLoggingPrefs(prefs: logging.Preferences|{}): Capabilities;
|
||
|
||
/**
|
||
* Sets the proxy configuration for this instance.
|
||
* @param {ProxyConfig} proxy The desired proxy configuration.
|
||
* @return {!Capabilities} A self reference.
|
||
*/
|
||
setProxy(proxy: ProxyConfig): Capabilities;
|
||
|
||
/**
|
||
* Sets whether native events should be used.
|
||
* @param {boolean} enabled Whether to enable native events.
|
||
* @return {!Capabilities} A self reference.
|
||
*/
|
||
setEnableNativeEvents(enabled: boolean): Capabilities;
|
||
|
||
/**
|
||
* Sets how elements should be scrolled into view for interaction.
|
||
* @param {number} behavior The desired scroll behavior: either 0 to align
|
||
* with the top of the viewport or 1 to align with the bottom.
|
||
* @return {!Capabilities} A self reference.
|
||
*/
|
||
setScrollBehavior(behavior: number): Capabilities;
|
||
|
||
/**
|
||
* Sets the default action to take with an unexpected alert before returning
|
||
* an error.
|
||
* @param {string} behavior The desired behavior; should be 'accept',
|
||
* 'dismiss', or 'ignore'. Defaults to 'dismiss'.
|
||
* @return {!Capabilities} A self reference.
|
||
*/
|
||
setAlertBehavior(behavior?: string): Capabilities;
|
||
|
||
/**
|
||
* @param {string} key The capability to return.
|
||
* @return {*} The capability with the given key, or {@code null} if it has
|
||
* not been set.
|
||
*/
|
||
get(key: string): any;
|
||
|
||
/**
|
||
* @param {string} key The capability to check.
|
||
* @return {boolean} Whether the specified capability is set.
|
||
*/
|
||
has(key: string): boolean;
|
||
|
||
// endregion
|
||
|
||
// region Static Methods
|
||
|
||
/**
|
||
* @return {!Capabilities} A basic set of capabilities for Android.
|
||
*/
|
||
static android(): Capabilities;
|
||
|
||
/**
|
||
* @return {!Capabilities} A basic set of capabilities for Chrome.
|
||
*/
|
||
static chrome(): Capabilities;
|
||
|
||
/**
|
||
* @return {!Capabilities} A basic set of capabilities for Microsoft Edge.
|
||
*/
|
||
static edge(): Capabilities;
|
||
|
||
/**
|
||
* @return {!Capabilities} A basic set of capabilities for Firefox.
|
||
*/
|
||
static firefox(): Capabilities;
|
||
|
||
/**
|
||
* @return {!Capabilities} A basic set of capabilities for
|
||
* Internet Explorer.
|
||
*/
|
||
static ie(): Capabilities;
|
||
|
||
/**
|
||
* @return {!Capabilities} A basic set of capabilities for iPad.
|
||
*/
|
||
static ipad(): Capabilities;
|
||
|
||
/**
|
||
* @return {!Capabilities} A basic set of capabilities for iPhone.
|
||
*/
|
||
static iphone(): Capabilities;
|
||
|
||
/**
|
||
* @return {!Capabilities} A basic set of capabilities for Opera.
|
||
*/
|
||
static opera(): Capabilities;
|
||
|
||
/**
|
||
* @return {!Capabilities} A basic set of capabilities for
|
||
* PhantomJS.
|
||
*/
|
||
static phantomjs(): Capabilities;
|
||
|
||
/**
|
||
* @return {!Capabilities} A basic set of capabilities for Safari.
|
||
*/
|
||
static safari(): Capabilities;
|
||
|
||
/**
|
||
* @return {!Capabilities} A basic set of capabilities for HTMLUnit.
|
||
*/
|
||
static htmlunit(): Capabilities;
|
||
|
||
/**
|
||
* @return {!Capabilities} A basic set of capabilities for HTMLUnit
|
||
* with enabled Javascript.
|
||
*/
|
||
static htmlunitwithjs(): Capabilities;
|
||
|
||
// endregion
|
||
}
|
||
|
||
/**
|
||
* 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
|
||
*/
|
||
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.
|
||
* @private
|
||
*/
|
||
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;
|
||
|
||
/**
|
||
* The domain the cookie is visible to. Defaults to the current browsing
|
||
* context's document's URL when adding a cookie.
|
||
*/
|
||
domain?: string;
|
||
|
||
/**
|
||
* Whether the cookie is a secure cookie. Defaults to false when adding a new
|
||
* cookie.
|
||
*/
|
||
secure?: boolean;
|
||
|
||
/**
|
||
* Whether the cookie is an HTTP only cookie. Defaults to false when adding a
|
||
* new cookie.
|
||
*/
|
||
httpOnly?: boolean;
|
||
|
||
/**
|
||
* 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.
|
||
*
|
||
* @type {(!Date|number|undefined)}
|
||
*/
|
||
expiry?: number|Date;
|
||
}
|
||
|
||
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.
|
||
*
|
||
* @type {(!number|undefined)}
|
||
*/
|
||
expiry?: number;
|
||
}
|
||
|
||
/**
|
||
* Provides methods for managing browser and driver state.
|
||
*/
|
||
export class Options {
|
||
// region Constructors
|
||
|
||
/**
|
||
* @param {!WebDriver} driver The parent driver.
|
||
* @constructor
|
||
*/
|
||
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<IWebDriverOptionsCookie[]>;
|
||
|
||
/**
|
||
* 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<IWebDriverOptionsCookie>;
|
||
|
||
/**
|
||
* @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
|
||
}
|
||
|
||
interface ITimeouts {
|
||
/**
|
||
* Sets the amount of time to wait, in milliseconds, for an asynchronous
|
||
* script to finish execution before returning an error. If the timeout is
|
||
* less than or equal to 0, the script will be allowed to run indefinitely.
|
||
*/
|
||
script?: number;
|
||
/**
|
||
* Sets the amount of time to wait, in milliseconds, for a page load to
|
||
* complete before returning an error. If the timeout is negative,
|
||
* page loads may be indefinite.
|
||
*/
|
||
pageLoad?: number;
|
||
/**
|
||
* Specifies the amount of time in milliseconds the driver should wait when
|
||
* searching for an element if it is not immediately present.
|
||
* <p/>
|
||
* When searching for a single element, the driver should poll the page
|
||
* until the element has been found, or this timeout expires before failing
|
||
* with a {@code bot.ErrorCode.NO_SUCH_ELEMENT} error. When searching
|
||
* for multiple elements, the driver should poll the page until at least one
|
||
* element has been found or this timeout has expired.
|
||
* <p/>
|
||
* Setting the wait timeout to 0 (its default value), disables implicit
|
||
* waiting.
|
||
* <p/>
|
||
* Increasing the implicit wait timeout should be used judiciously as it
|
||
* will have an adverse effect on test run time, especially when used with
|
||
* slower location strategies like XPath.
|
||
*/
|
||
implicit?: number;
|
||
}
|
||
|
||
/**
|
||
* An interface for managing the current window.
|
||
*/
|
||
export class Window {
|
||
// region Constructors
|
||
|
||
/**
|
||
* @param {!WebDriver} driver The parent driver.
|
||
* @constructor
|
||
*/
|
||
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.
|
||
* @return {!Promise} A promise that will be resolved when the
|
||
* command has completed.
|
||
*/
|
||
maximize(): Promise<void>;
|
||
|
||
// endregion
|
||
}
|
||
|
||
/**
|
||
* Interface for managing WebDriver log records.
|
||
*/
|
||
export class Logs {
|
||
// region Constructors
|
||
|
||
/**
|
||
* @param {!WebDriver} driver The parent driver.
|
||
* @constructor
|
||
*/
|
||
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
|
||
*/
|
||
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>;
|
||
|
||
/**
|
||
* Schedules a command to switch 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(nameOrIndex: number|WebElement): 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>;
|
||
|
||
/**
|
||
* 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 */
|
||
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, required?: Capabilities};
|
||
|
||
/**
|
||
* 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(executor, {required});
|
||
*
|
||
* // If the createSession operation failed, then this command will also
|
||
* // also fail, propagating the creation failure.
|
||
* driver.get('http://www.google.com').catch(e => console.log(e));
|
||
*
|
||
* @param {!command.Executor} executor The executor to create the new session
|
||
* with.
|
||
* @param {(!Capabilities|
|
||
* {desired: (Capabilities|undefined),
|
||
* required: (Capabilities|undefined)})} capabilities The desired
|
||
* capabilities for the new session.
|
||
* @param {promise.ControlFlow=} opt_flow The control flow all driver
|
||
* commands should execute under, including the initial session creation.
|
||
* Defaults to the {@link promise.controlFlow() currently active}
|
||
* control flow.
|
||
* @param {(function(new: WebDriver,
|
||
* !IThenable<!Session>,
|
||
* !command.Executor,
|
||
* promise.ControlFlow=))=} opt_ctor
|
||
* A reference to the constructor of the specific type of WebDriver client
|
||
* to instantiate. Will create a vanilla {@linkplain WebDriver} instance
|
||
* if a constructor is not provided.
|
||
* @param {(function(this: void): ?)=} opt_onQuit A callback to invoke when
|
||
* the newly created session is terminated. This should be used to clean
|
||
* up any resources associated with the session.
|
||
* @return {!WebDriver} The driver for the newly created session.
|
||
*/
|
||
// This method's arguments are untyped so that its overloads can have correct
|
||
// types. Typescript doesn't allow static methods to be overridden with
|
||
// incompatible signatures.
|
||
static createSession(...var_args: any[]): WebDriver;
|
||
|
||
// endregion
|
||
|
||
// region Methods
|
||
|
||
/**
|
||
* Schedules a {@link command.Command} to be executed by this driver's
|
||
* {@link command.Executor}.
|
||
*
|
||
* @param {!command.Command} command The command to schedule.
|
||
* @param {string} description A description of the command for debugging.
|
||
* @return {!Promise<T>} A promise that will be resolved
|
||
* with the command result.
|
||
* @template T
|
||
*/
|
||
execute<T>(command: command.Command, description?: string): Promise<T>;
|
||
|
||
/**
|
||
* Sets the {@linkplain input.FileDetector file detector} that should be
|
||
* used with this instance.
|
||
* @param {input.FileDetector} detector The detector to use or {@code null}.
|
||
*/
|
||
setFileDetector(detector: FileDetector): void;
|
||
|
||
getExecutor(): command.Executor;
|
||
|
||
/**
|
||
* @return {!Promise.<!Session>} A promise for this
|
||
* client's session.
|
||
*/
|
||
getSession(): Promise<Session>;
|
||
|
||
/**
|
||
* @return {!Promise.<!Capabilities>} A promise
|
||
* that will resolve with the this instance's capabilities.
|
||
*/
|
||
getCapabilities(): Promise<Capabilities>;
|
||
|
||
/**
|
||
* Schedules a command to quit the current session. After calling quit, this
|
||
* instance will be invalidated and may no longer be used to issue commands
|
||
* against the browser.
|
||
* @return {!Promise.<void>} A promise that will be resolved
|
||
* when the command has completed.
|
||
*/
|
||
quit(): Promise<void>;
|
||
|
||
/**
|
||
* Creates a new action sequence using this driver. The sequence will not be
|
||
* scheduled for execution until {@link actions.ActionSequence#perform} is
|
||
* called. Example:
|
||
*
|
||
* driver.actions().
|
||
* mouseDown(element1).
|
||
* mouseMove(element2).
|
||
* mouseUp().
|
||
* perform();
|
||
*
|
||
* @return {!actions.ActionSequence} A new action sequence for this instance.
|
||
*/
|
||
actions(options?: {async: boolean, bridge: boolean}|{async: boolean}|{bridge: boolean}): Actions;
|
||
|
||
/**
|
||
* Schedules a command to execute JavaScript in the context of the currently
|
||
* selected frame or window. The script fragment will be executed as the body
|
||
* of an anonymous function. If the script is provided as a function object,
|
||
* that function will be converted to a string for injection into the target
|
||
* window.
|
||
*
|
||
* Any arguments provided in addition to the script will be included as script
|
||
* arguments and may be referenced using the {@code arguments} object.
|
||
* Arguments may be a boolean, number, string, or {@code WebElement}.
|
||
* Arrays and objects may also be used as script arguments as long as each
|
||
* item adheres to the types previously mentioned.
|
||
*
|
||
* The script may refer to any variables accessible from the current window.
|
||
* Furthermore, the script will execute in the window's context, thus
|
||
* {@code document} may be used to refer to the current document. Any local
|
||
* variables will not be available once the script has finished executing,
|
||
* though global variables will persist.
|
||
*
|
||
* If the script has a return value (i.e. if the script contains a return
|
||
* statement), then the following steps will be taken for resolving this
|
||
* functions return value:
|
||
*
|
||
* - For a HTML element, the value will resolve to a
|
||
* {@link WebElement}
|
||
* - Null and undefined return values will resolve to null</li>
|
||
* - Booleans, numbers, and strings will resolve as is</li>
|
||
* - Functions will resolve to their string representation</li>
|
||
* - For arrays and objects, each member item will be converted according to
|
||
* the rules above
|
||
*
|
||
* @param {!(string|Function)} script The script to execute.
|
||
* @param {...*} var_args The arguments to pass to the script.
|
||
* @return {!Promise.<T>} A promise that will resolve to the
|
||
* scripts return value.
|
||
* @template T
|
||
*/
|
||
executeScript<T>(script: string|Function, ...var_args: any[]): Promise<T>;
|
||
|
||
/**
|
||
* Schedules a command to execute asynchronous JavaScript in the context of
|
||
* the currently selected frame or window. The script fragment will be
|
||
* executed as the body of an anonymous function. If the script is provided as
|
||
* a function object, that function will be converted to a string for
|
||
* injection into the target window.
|
||
*
|
||
* Any arguments provided in addition to the script will be included as script
|
||
* arguments and may be referenced using the {@code arguments} object.
|
||
* Arguments may be a boolean, number, string, or {@code WebElement}.
|
||
* Arrays and objects may also be used as script arguments as long as each
|
||
* item adheres to the types previously mentioned.
|
||
*
|
||
* Unlike executing synchronous JavaScript with {@link #executeScript},
|
||
* scripts executed with this function must explicitly signal they are
|
||
* finished by invoking the provided callback. This callback will always be
|
||
* injected into the executed function as the last argument, and thus may be
|
||
* referenced with {@code arguments[arguments.length - 1]}. The following
|
||
* steps will be taken for resolving this functions return value against the
|
||
* first argument to the script's callback function:
|
||
*
|
||
* - For a HTML element, the value will resolve to a
|
||
* {@link WebElement}
|
||
* - Null and undefined return values will resolve to null
|
||
* - Booleans, numbers, and strings will resolve as is
|
||
* - Functions will resolve to their string representation
|
||
* - For arrays and objects, each member item will be converted according to
|
||
* the rules above
|
||
*
|
||
* __Example #1:__ Performing a sleep that is synchronized with the currently
|
||
* selected window:
|
||
*
|
||
* var start = new Date().getTime();
|
||
* driver.executeAsyncScript(
|
||
* 'window.setTimeout(arguments[arguments.length - 1], 500);').
|
||
* then(function() {
|
||
* console.log(
|
||
* 'Elapsed time: ' + (new Date().getTime() - start) + ' ms');
|
||
* });
|
||
*
|
||
* __Example #2:__ Synchronizing a test with an AJAX application:
|
||
*
|
||
* var button = driver.findElement(By.id('compose-button'));
|
||
* button.click();
|
||
* driver.executeAsyncScript(
|
||
* 'var callback = arguments[arguments.length - 1];' +
|
||
* 'mailClient.getComposeWindowWidget().onload(callback);');
|
||
* driver.switchTo().frame('composeWidget');
|
||
* driver.findElement(By.id('to')).sendKeys('dog@example.com');
|
||
*
|
||
* __Example #3:__ Injecting a XMLHttpRequest and waiting for the result. In
|
||
* this example, the inject script is specified with a function literal. When
|
||
* using this format, the function is converted to a string for injection, so
|
||
* it should not reference any symbols not defined in the scope of the page
|
||
* under test.
|
||
*
|
||
* driver.executeAsyncScript(function() {
|
||
* var callback = arguments[arguments.length - 1];
|
||
* var xhr = new XMLHttpRequest();
|
||
* xhr.open('GET', '/resource/data.json', true);
|
||
* xhr.onreadystatechange = function() {
|
||
* if (xhr.readyState == 4) {
|
||
* callback(xhr.responseText);
|
||
* }
|
||
* }
|
||
* xhr.send('');
|
||
* }).then(function(str) {
|
||
* console.log(JSON.parse(str)['food']);
|
||
* });
|
||
*
|
||
* @param {!(string|Function)} script The script to execute.
|
||
* @param {...*} var_args The arguments to pass to the script.
|
||
* @return {!Promise.<T>} A promise that will resolve to the
|
||
* scripts return value.
|
||
* @template T
|
||
*/
|
||
executeAsyncScript<T>(script: string|Function, ...var_args: any[]): Promise<T>;
|
||
|
||
/**
|
||
* Schedules a command to wait for a condition to hold. The condition may be
|
||
* specified by a {@link Condition}, as a custom function, or
|
||
* as a {@link Promise}.
|
||
*
|
||
* For a {@link Condition} or function, the wait will repeatedly
|
||
* evaluate the condition until it returns a truthy value. If any errors occur
|
||
* while evaluating the condition, they will be allowed to propagate. In the
|
||
* event a condition returns a {@link Promise promise}, the
|
||
* polling loop will wait for it to be resolved and use the resolved value for
|
||
* whether the condition has been satisified. Note the resolution time for
|
||
* a promise is factored into whether a wait has timed out.
|
||
*
|
||
* Note, if the provided condition is a {@link WebElementCondition}, then
|
||
* the wait will return a {@link WebElementPromise} that will resolve to the
|
||
* element that satisified the condition.
|
||
*
|
||
* *Example:* waiting up to 10 seconds for an element to be present and
|
||
* visible on the page.
|
||
*
|
||
* var button = driver.wait(until.elementLocated(By.id('foo'), 10000);
|
||
* button.click();
|
||
*
|
||
* This function may also be used to block the command flow on the resolution
|
||
* of a {@link Promise promise}. When given a promise, the
|
||
* command will simply wait for its resolution before completing. A timeout
|
||
* may be provided to fail the command if the promise does not resolve before
|
||
* the timeout expires.
|
||
*
|
||
* *Example:* Suppose you have a function, `startTestServer`, that returns a
|
||
* promise for when a server is ready for requests. You can block a
|
||
* `WebDriver` client on this promise with:
|
||
*
|
||
* var started = startTestServer();
|
||
* driver.wait(started, 5 * 1000, 'Server should start within 5 seconds');
|
||
* driver.get(getServerUrl());
|
||
*
|
||
* @param {!WebElementCondition} condition The condition to
|
||
* wait on, defined as a promise, condition object, or a function to
|
||
* evaluate as a condition.
|
||
* @param {number=} opt_timeout How long to wait for the condition to be true.
|
||
* @param {string=} opt_message An optional message to use if the wait times
|
||
* out.
|
||
* @return {!WebElementPromise} A promise that will be fulfilled
|
||
* with the first truthy value returned by the condition function, or
|
||
* rejected if the condition times out.
|
||
* @template T
|
||
*/
|
||
wait(condition: WebElementCondition, opt_timeout?: number, opt_message?: string):
|
||
WebElementPromise;
|
||
|
||
/**
|
||
* Schedules a command to wait for a condition to hold. The condition may be
|
||
* specified by a {@link webdriver.Condition}, as a custom function, or
|
||
* as a {@link Promise}.
|
||
*
|
||
* For a {@link webdriver.Condition} or function, the wait will repeatedly
|
||
* evaluate the condition until it returns a truthy value. If any errors occur
|
||
* while evaluating the condition, they will be allowed to propagate. In the
|
||
* event a condition returns a {@link Promise promise}, the
|
||
* polling loop will wait for it to be resolved and use the resolved value for
|
||
* whether the condition has been satisified. Note the resolution time for
|
||
* a promise is factored into whether a wait has timed out.
|
||
*
|
||
* Note, if the provided condition is a {@link WebElementCondition}, then
|
||
* the wait will return a {@link WebElementPromise} that will resolve to the
|
||
* element that satisified the condition.
|
||
*
|
||
* *Example:* waiting up to 10 seconds for an element to be present and
|
||
* visible on the page.
|
||
*
|
||
* var button = driver.wait(until.elementLocated(By.id('foo'), 10000);
|
||
* button.click();
|
||
*
|
||
* This function may also be used to block the command flow on the resolution
|
||
* of a {@link Promise promise}. When given a promise, the
|
||
* command will simply wait for its resolution before completing. A timeout
|
||
* may be provided to fail the command if the promise does not resolve before
|
||
* the timeout expires.
|
||
*
|
||
* *Example:* Suppose you have a function, `startTestServer`, that returns a
|
||
* promise for when a server is ready for requests. You can block a
|
||
* `WebDriver` client on this promise with:
|
||
*
|
||
* var started = startTestServer();
|
||
* driver.wait(started, 5 * 1000, 'Server should start within 5 seconds');
|
||
* driver.get(getServerUrl());
|
||
*
|
||
* @param {!(Promise<T>|
|
||
* Condition<T>|
|
||
* function(!WebDriver): T)} condition The condition to
|
||
* wait on, defined as a promise, condition object, or a function to
|
||
* evaluate as a condition.
|
||
* @param {number=} opt_timeout How long to wait for the condition to be true.
|
||
* @param {string=} opt_message An optional message to use if the wait times
|
||
* out.
|
||
* @return {!Promise<T>} A promise that will be fulfilled
|
||
* with the first truthy value returned by the condition function, or
|
||
* rejected if the condition times out.
|
||
* @template T
|
||
*/
|
||
wait<T>(
|
||
condition: PromiseLike<T>|Condition<T>|((driver: WebDriver) => T | PromiseLike<T>)|Function,
|
||
opt_timeout?: number, opt_message?: string): Promise<T>;
|
||
|
||
/**
|
||
* Schedules a command to make the driver sleep for the given amount of time.
|
||
* @param {number} ms The amount of time, in milliseconds, to sleep.
|
||
* @return {!Promise.<void>} A promise that will be resolved
|
||
* when the sleep has finished.
|
||
*/
|
||
sleep(ms: number): Promise<void>;
|
||
|
||
/**
|
||
* Schedules a command to retrieve they current window handle.
|
||
* @return {!Promise.<string>} A promise that will be
|
||
* resolved with the current window handle.
|
||
*/
|
||
getWindowHandle(): Promise<string>;
|
||
|
||
/**
|
||
* Schedules a command to retrieve the current list of available window
|
||
* handles.
|
||
* @return {!Promise.<!Array.<string>>} A promise that will
|
||
* be resolved with an array of window handles.
|
||
*/
|
||
getAllWindowHandles(): Promise<string[]>;
|
||
|
||
/**
|
||
* Schedules a command to retrieve the current page's source. The page source
|
||
* returned is a representation of the underlying DOM: do not expect it to be
|
||
* formatted or escaped in the same way as the response sent from the web
|
||
* server.
|
||
* @return {!Promise.<string>} A promise that will be
|
||
* resolved with the current page source.
|
||
*/
|
||
getPageSource(): Promise<string>;
|
||
|
||
/**
|
||
* Schedules a command to close the current window.
|
||
* @return {!Promise.<void>} A promise that will be resolved
|
||
* when this command has completed.
|
||
*/
|
||
close(): Promise<void>;
|
||
|
||
/**
|
||
* Schedules a command to navigate to the given URL.
|
||
* @param {string} url The fully qualified URL to open.
|
||
* @return {!Promise.<void>} A promise that will be resolved
|
||
* when the document has finished loading.
|
||
*/
|
||
get(url: string): Promise<void>;
|
||
|
||
/**
|
||
* Schedules a command to retrieve the URL of the current page.
|
||
* @return {!Promise.<string>} A promise that will be
|
||
* resolved with the current URL.
|
||
*/
|
||
getCurrentUrl(): Promise<string>;
|
||
|
||
/**
|
||
* Schedules a command to retrieve the current page's title.
|
||
* @return {!Promise.<string>} A promise that will be
|
||
* resolved with the current page's title.
|
||
*/
|
||
getTitle(): Promise<string>;
|
||
|
||
/**
|
||
* Schedule a command to find an element on the page. If the element cannot be
|
||
* found, a {@link bot.ErrorCode.NO_SUCH_ELEMENT} result will be returned
|
||
* by the driver. Unlike other commands, this error cannot be suppressed. In
|
||
* other words, scheduling a command to find an element doubles as an assert
|
||
* that the element is present on the page. To test whether an element is
|
||
* present on the page, use {@link #findElements}.
|
||
*
|
||
* The search criteria for an element may be defined using one of the
|
||
* factories in the {@link By} namespace, or as a short-hand
|
||
* {@link By.Hash} object. For example, the following two statements
|
||
* are equivalent:
|
||
*
|
||
* var e1 = driver.findElement(By.id('foo'));
|
||
* var e2 = driver.findElement({id:'foo'});
|
||
*
|
||
* You may also provide a custom locator function, which takes as input this
|
||
* instance and returns a {@link WebElement}, or a promise that will resolve
|
||
* to a WebElement. If the returned promise resolves to an array of
|
||
* WebElements, WebDriver will use the first element. For example, to find the
|
||
* first visible link on a page, you could write:
|
||
*
|
||
* var link = driver.findElement(firstVisibleLink);
|
||
*
|
||
* function firstVisibleLink(driver) {
|
||
* var links = driver.findElements(By.tagName('a'));
|
||
* return promise.filter(links, function(link) {
|
||
* return link.isDisplayed();
|
||
* });
|
||
* }
|
||
*
|
||
* @param {!(by.By|Function)} locator The locator to use.
|
||
* @return {!WebElementPromise} A WebElement that can be used to issue
|
||
* commands against the located element. If the element is not found, the
|
||
* element will be invalidated and all scheduled commands aborted.
|
||
*/
|
||
findElement(locator: Locator): WebElementPromise;
|
||
|
||
/**
|
||
* Schedule a command to search for multiple elements on the page.
|
||
*
|
||
* @param {!(by.By|Function)} locator The locator to use.
|
||
* @return {!Promise.<!Array.<!WebElement>>} A
|
||
* promise that will resolve to an array of WebElements.
|
||
*/
|
||
findElements(locator: Locator): Promise<WebElement[]>;
|
||
|
||
/**
|
||
* Schedule a command to take a screenshot. The driver makes a best effort to
|
||
* return a screenshot of the following, in order of preference:
|
||
*
|
||
* 1. Entire page
|
||
* 2. Current window
|
||
* 3. Visible portion of the current frame
|
||
* 4. The entire display containing the browser
|
||
*
|
||
* @return {!Promise<string>} A promise that will be
|
||
* resolved to the screenshot as a base-64 encoded PNG.
|
||
*/
|
||
takeScreenshot(): Promise<string>;
|
||
|
||
/**
|
||
* @return {!Options} The options interface for this
|
||
* instance.
|
||
*/
|
||
manage(): Options;
|
||
|
||
/**
|
||
* @return {!Navigation} The navigation interface for this
|
||
* instance.
|
||
*/
|
||
navigate(): Navigation;
|
||
|
||
/**
|
||
* @return {!TargetLocator} The target locator interface for
|
||
* this instance.
|
||
*/
|
||
switchTo(): TargetLocator;
|
||
|
||
// endregion
|
||
}
|
||
|
||
/**
|
||
* A thenable wrapper around a {@linkplain webdriver.IWebDriver IWebDriver}
|
||
* instance that allows commands to be issued directly instead of having to
|
||
* repeatedly call `then`:
|
||
*
|
||
* let driver = new Builder().build();
|
||
* driver.then(d => d.get(url)); // You can do this...
|
||
* driver.get(url); // ...or this
|
||
*
|
||
* If the driver instance fails to resolve (e.g. the session cannot be created),
|
||
* every issued command will fail.
|
||
*
|
||
* @extends {webdriver.IWebDriver}
|
||
* @extends {Promise<!webdriver.IWebDriver>}
|
||
* @interface
|
||
*/
|
||
export interface ThenableWebDriver extends WebDriver, Promise<WebDriver> {}
|
||
|
||
export interface IWebElementId { [ELEMENT: string]: string; }
|
||
|
||
/**
|
||
* Represents a DOM element. WebElements can be found by searching from the
|
||
* document root using a {@code WebDriver} instance, or by searching
|
||
* under another {@code WebElement}:
|
||
* <pre><code>
|
||
* driver.get('http://www.google.com');
|
||
* var searchForm = driver.findElement(By.tagName('form'));
|
||
* var searchBox = searchForm.findElement(By.name('q'));
|
||
* searchBox.sendKeys('webdriver');
|
||
* </code></pre>
|
||
*
|
||
* The WebElement is implemented as a promise for compatibility with the promise
|
||
* API. It will always resolve itself when its internal state has been fully
|
||
* resolved and commands may be issued against the element. This can be used to
|
||
* catch errors when an element cannot be located on the page:
|
||
* <pre><code>
|
||
* driver.findElement(By.id('not-there')).then(function(element) {
|
||
* alert('Found an element that was not expected to be there!');
|
||
* }, function(error) {
|
||
* alert('The element was not found, as expected');
|
||
* });
|
||
* </code></pre>
|
||
*/
|
||
export interface IWebElement {
|
||
// region Methods
|
||
|
||
/**
|
||
* Schedules a command to click on this element.
|
||
* @return {!Promise} A promise that will be resolved when
|
||
* the click command has completed.
|
||
*/
|
||
click(): Promise<void>;
|
||
|
||
/**
|
||
* Schedules a command to type a sequence on the DOM element represented by
|
||
* this instance.
|
||
*
|
||
* Modifier keys (SHIFT, CONTROL, ALT, META) are stateful; once a modifier is
|
||
* processed in the key sequence, that key state is toggled until one of the
|
||
* following occurs:
|
||
*
|
||
* - The modifier key is encountered again in the sequence. At this point the
|
||
* state of the key is toggled (along with the appropriate keyup/down
|
||
* events).
|
||
* - The {@link input.Key.NULL} key is encountered in the sequence. When
|
||
* this key is encountered, all modifier keys current in the down state are
|
||
* released (with accompanying keyup events). The NULL key can be used to
|
||
* simulate common keyboard shortcuts:
|
||
*
|
||
* element.sendKeys('text was',
|
||
* Key.CONTROL, 'a', Key.NULL,
|
||
* 'now text is');
|
||
* // Alternatively:
|
||
* element.sendKeys('text was',
|
||
* Key.chord(Key.CONTROL, 'a'),
|
||
* 'now text is');
|
||
*
|
||
* - The end of the key sequence is encountered. When there are no more keys
|
||
* to type, all depressed modifier keys are released (with accompanying
|
||
* keyup events).
|
||
*
|
||
* If this element is a file input ({@code <input type='file'>}), the
|
||
* specified key sequence should specify the path to the file to attach to
|
||
* the element. This is analogous to the user clicking 'Browse...' and
|
||
* entering the path into the file select dialog.
|
||
*
|
||
* var form = driver.findElement(By.css('form'));
|
||
* var element = form.findElement(By.css('input[type=file]'));
|
||
* element.sendKeys('/path/to/file.txt');
|
||
* form.submit();
|
||
*
|
||
* For uploads to function correctly, the entered path must reference a file
|
||
* on the _browser's_ machine, not the local machine running this script. When
|
||
* running against a remote Selenium server, a {@link input.FileDetector}
|
||
* may be used to transparently copy files to the remote machine before
|
||
* attempting to upload them in the browser.
|
||
*
|
||
* __Note:__ On browsers where native keyboard events are not supported
|
||
* (e.g. Firefox on OS X), key events will be synthesized. Special
|
||
* punctuation keys will be synthesized according to a standard QWERTY en-us
|
||
* keyboard layout.
|
||
*
|
||
* @param {...(number|string|!IThenable<(number|string)>)} var_args The
|
||
* sequence of keys to type. Number keys may be referenced numerically or
|
||
* by string (1 or '1'). All arguments will be joined into a single
|
||
* sequence.
|
||
* @return {!Promise} A promise that will be resolved when all
|
||
* keys have been typed.
|
||
*/
|
||
sendKeys(...var_args: Array<number|string|Promise<string|number>>): Promise<void>;
|
||
|
||
/**
|
||
* Schedules a command to query for the tag/node name of this element.
|
||
* @return {!Promise} A promise that will be resolved with the
|
||
* element's tag name.
|
||
*/
|
||
getTagName(): Promise<string>;
|
||
|
||
/**
|
||
* Schedules a command to query for the computed style of the element
|
||
* represented by this instance. If the element inherits the named style from
|
||
* its parent, the parent will be queried for its value. Where possible,
|
||
* color values will be converted to their hex representation (e.g. #00ff00
|
||
* instead of rgb(0, 255, 0)). <p/> <em>Warning:</em> the value returned will
|
||
* be as the browser interprets it, so it may be tricky to form a proper
|
||
* assertion.
|
||
*
|
||
* @param {string} cssStyleProperty The name of the CSS style property to look
|
||
* up.
|
||
* @return {!Promise} A promise that will be resolved with the
|
||
* requested CSS value.
|
||
*/
|
||
getCssValue(cssStyleProperty: string): Promise<string>;
|
||
|
||
/**
|
||
* Schedules a command to query for the value of the given attribute of the
|
||
* element. Will return the current value even if it has been modified after
|
||
* the page has been loaded. More exactly, this method will return the value
|
||
* of the given attribute, unless that attribute is not present, in which case
|
||
* the value of the property with the same name is returned. If neither value
|
||
* is set, null is returned. The 'style' attribute is converted as best can be
|
||
* to a text representation with a trailing semi-colon. The following are
|
||
* deemed to be 'boolean' attributes and will be returned as thus:
|
||
*
|
||
* <p>async, autofocus, autoplay, checked, compact, complete, controls,
|
||
* declare, defaultchecked, defaultselected, defer, disabled, draggable,
|
||
* ended, formnovalidate, hidden, indeterminate, iscontenteditable, ismap,
|
||
* itemscope, loop, multiple, muted, nohref, noresize, noshade, novalidate,
|
||
* nowrap, open, paused, pubdate, readonly, required, reversed, scoped,
|
||
* seamless, seeking, selected, spellcheck, truespeed, willvalidate
|
||
*
|
||
* <p>Finally, the following commonly mis-capitalized attribute/property names
|
||
* are evaluated as expected:
|
||
* <ul>
|
||
* <li>'class'
|
||
* <li>'readonly'
|
||
* </ul>
|
||
* @param {string} attributeName The name of the attribute to query.
|
||
* @return {!Promise} A promise that will be resolved with the
|
||
* attribute's value.
|
||
*/
|
||
getAttribute(attributeName: string): Promise<string>;
|
||
|
||
/**
|
||
* Get the visible (i.e. not hidden by CSS) innerText of this element,
|
||
* including sub-elements, without any leading or trailing whitespace.
|
||
* @return {!Promise} A promise that will be resolved with the
|
||
* element's visible text.
|
||
*/
|
||
getText(): Promise<string>;
|
||
|
||
/**
|
||
* Schedules a command to compute the size of this element's bounding box, in
|
||
* pixels.
|
||
* @return {!Promise} A promise that will be resolved with the
|
||
* element's size as a {@code {width:number, height:number}} object.
|
||
*/
|
||
getSize(): Promise<ISize>;
|
||
|
||
/**
|
||
* Returns an object describing an element's location, in pixels relative to
|
||
* the document element, and the element's size in pixels.
|
||
*/
|
||
getRect(): Promise<IRectangle>;
|
||
|
||
/**
|
||
* Schedules a command to compute the location of this element in page space.
|
||
* @return {!Promise} A promise that will be resolved to the
|
||
* element's location as a {@code {x:number, y:number}} object.
|
||
*/
|
||
getLocation(): Promise<ILocation>;
|
||
|
||
/**
|
||
* Schedules a command to query whether the DOM element represented by this
|
||
* instance is enabled, as dicted by the {@code disabled} attribute.
|
||
* @return {!Promise} A promise that will be resolved with
|
||
* whether this element is currently enabled.
|
||
*/
|
||
isEnabled(): Promise<boolean>;
|
||
|
||
/**
|
||
* Schedules a command to query whether this element is selected.
|
||
* @return {!Promise} A promise that will be resolved with
|
||
* whether this element is currently selected.
|
||
*/
|
||
isSelected(): Promise<boolean>;
|
||
|
||
/**
|
||
* Schedules a command to submit the form containing this element (or this
|
||
* element if it is a FORM element). This command is a no-op if the element is
|
||
* not contained in a form.
|
||
* @return {!Promise} A promise that will be resolved when
|
||
* the form has been submitted.
|
||
*/
|
||
submit(): Promise<void>;
|
||
|
||
/**
|
||
* Schedules a command to clear the {@code value} of this element. This
|
||
* command has no effect if the underlying DOM element is neither a text INPUT
|
||
* element nor a TEXTAREA element.
|
||
* @return {!Promise} A promise that will be resolved when
|
||
* the element has been cleared.
|
||
*/
|
||
clear(): Promise<void>;
|
||
|
||
/**
|
||
* Schedules a command to test whether this element is currently displayed.
|
||
* @return {!Promise} A promise that will be resolved with
|
||
* whether this element is currently visible on the page.
|
||
*/
|
||
isDisplayed(): Promise<boolean>;
|
||
|
||
/**
|
||
* @return {!Promise.<WebElement.Id>} A promise
|
||
* that resolves to this element's JSON representation as defined by the
|
||
* WebDriver wire protocol.
|
||
* @see http://code.google.com/p/selenium/wiki/JsonWireProtocol
|
||
*/
|
||
getId(): Promise<IWebElementId>;
|
||
|
||
// endregion
|
||
}
|
||
|
||
export interface IWebElementFinders {
|
||
/**
|
||
* Schedule a command to find a descendant of this element. If the element
|
||
* cannot be found, a {@code bot.ErrorCode.NO_SUCH_ELEMENT} result will
|
||
* be returned by the driver. Unlike other commands, this error cannot be
|
||
* suppressed. In other words, scheduling a command to find an element doubles
|
||
* as an assert that the element is present on the page. To test whether an
|
||
* element is present on the page, use {@code #findElements}.
|
||
*
|
||
* <p>The search criteria for an element may be defined using one of the
|
||
* factories in the {@link By} namespace, or as a short-hand
|
||
* {@link By.Hash} object. For example, the following two statements
|
||
* are equivalent:
|
||
* <code><pre>
|
||
* var e1 = element.findElement(By.id('foo'));
|
||
* var e2 = element.findElement({id:'foo'});
|
||
* </pre></code>
|
||
*
|
||
* <p>You may also provide a custom locator function, which takes as input
|
||
* this WebDriver instance and returns a {@link WebElement}, or a
|
||
* promise that will resolve to a WebElement. For example, to find the first
|
||
* visible link on a page, you could write:
|
||
* <code><pre>
|
||
* var link = element.findElement(firstVisibleLink);
|
||
*
|
||
* function firstVisibleLink(element) {
|
||
* var links = element.findElements(By.tagName('a'));
|
||
* return promise.filter(links, function(link) {
|
||
* return links.isDisplayed();
|
||
* }).then(function(visibleLinks) {
|
||
* return visibleLinks[0];
|
||
* });
|
||
* }
|
||
* </pre></code>
|
||
*
|
||
* @param {!(Locator|By.Hash|Function)} locator The
|
||
* locator strategy to use when searching for the element.
|
||
* @return {!WebElement} A WebElement that can be used to issue
|
||
* commands against the located element. If the element is not found, the
|
||
* element will be invalidated and all scheduled commands aborted.
|
||
*/
|
||
findElement(locator: Locator): WebElementPromise;
|
||
|
||
/**
|
||
* Schedules a command to find all of the descendants of this element that
|
||
* match the given search criteria.
|
||
*
|
||
* @param {!(Locator|By.Hash|Function)} locator The
|
||
* locator strategy to use when searching for the elements.
|
||
* @return {!Promise.<!Array.<!WebElement>>} A
|
||
* promise that will resolve to an array of WebElements.
|
||
*/
|
||
findElements(locator: Locator): Promise<WebElement[]>;
|
||
}
|
||
|
||
/**
|
||
* Defines an object that can be asynchronously serialized to its WebDriver
|
||
* wire representation.
|
||
*
|
||
* @constructor
|
||
* @template T
|
||
*/
|
||
export interface Serializable<T> {
|
||
/**
|
||
* Returns either this instance's serialized represention, if immediately
|
||
* available, or a promise for its serialized representation. This function is
|
||
* conceptually equivalent to objects that have a {@code toJSON()} property,
|
||
* except the serialize() result may be a promise or an object containing a
|
||
* promise (which are not directly JSON friendly).
|
||
*
|
||
* @return {!(T|IThenable.<!T>)} This instance's serialized wire format.
|
||
*/
|
||
serialize(): T|Promise<T>;
|
||
}
|
||
|
||
/**
|
||
* Represents a DOM element. WebElements can be found by searching from the
|
||
* document root using a {@link WebDriver} instance, or by searching
|
||
* under another WebElement:
|
||
*
|
||
* driver.get('http://www.google.com');
|
||
* var searchForm = driver.findElement(By.tagName('form'));
|
||
* var searchBox = searchForm.findElement(By.name('q'));
|
||
* searchBox.sendKeys('webdriver');
|
||
*
|
||
* The WebElement is implemented as a promise for compatibility with the promise
|
||
* API. It will always resolve itself when its internal state has been fully
|
||
* resolved and commands may be issued against the element. This can be used to
|
||
* catch errors when an element cannot be located on the page:
|
||
*
|
||
* driver.findElement(By.id('not-there')).then(function(element) {
|
||
* alert('Found an element that was not expected to be there!');
|
||
* }, function(error) {
|
||
* alert('The element was not found, as expected');
|
||
* });
|
||
*
|
||
* @extends {Serializable.<WebElement.Id>}
|
||
*/
|
||
export class WebElement implements Serializable<IWebElementId> {
|
||
/**
|
||
* @param {!WebDriver} driver the parent WebDriver instance for this element.
|
||
* @param {(!IThenable<string>|string)} id The server-assigned opaque ID for
|
||
* the underlying DOM element.
|
||
*/
|
||
constructor(driver: WebDriver, id: Promise<string>|string);
|
||
|
||
/**
|
||
* @param {string} id The raw ID.
|
||
* @param {boolean=} opt_noLegacy Whether to exclude the legacy element key.
|
||
* @return {!Object} The element ID for use with WebDriver's wire protocol.
|
||
*/
|
||
static buildId(id: string, opt_noLegacy?: boolean): IWebElementId;
|
||
|
||
/**
|
||
* Extracts the encoded WebElement ID from the object.
|
||
*
|
||
* @param {?} obj The object to extract the ID from.
|
||
* @return {string} the extracted ID.
|
||
* @throws {TypeError} if the object is not a valid encoded ID.
|
||
*/
|
||
static extractId(obj: IWebElementId): string;
|
||
|
||
/**
|
||
* @param {?} obj the object to test.
|
||
* @return {boolean} whether the object is a valid encoded WebElement ID.
|
||
*/
|
||
static isId(obj: IWebElementId): boolean;
|
||
|
||
/**
|
||
* Compares two WebElements for equality.
|
||
*
|
||
* @param {!WebElement} a A WebElement.
|
||
* @param {!WebElement} b A WebElement.
|
||
* @return {!Promise<boolean>} A promise that will be
|
||
* resolved to whether the two WebElements are equal.
|
||
*/
|
||
static equals(a: WebElement, b: WebElement): Promise<boolean>;
|
||
|
||
/**
|
||
* @return {!WebDriver} The parent driver for this instance.
|
||
*/
|
||
getDriver(): WebDriver;
|
||
|
||
/**
|
||
* @return {!Promise<string>} A promise that resolves to
|
||
* the server-assigned opaque ID assigned to this element.
|
||
*/
|
||
getId(): Promise<string>;
|
||
|
||
/**
|
||
* Schedule a command to find a descendant of this element. If the element
|
||
* cannot be found, a {@link bot.ErrorCode.NO_SUCH_ELEMENT} result will
|
||
* be returned by the driver. Unlike other commands, this error cannot be
|
||
* suppressed. In other words, scheduling a command to find an element doubles
|
||
* as an assert that the element is present on the page. To test whether an
|
||
* element is present on the page, use {@link #findElements}.
|
||
*
|
||
* The search criteria for an element may be defined using one of the
|
||
* factories in the {@link By} namespace, or as a short-hand
|
||
* {@link By.Hash} object. For example, the following two statements
|
||
* are equivalent:
|
||
*
|
||
* var e1 = element.findElement(By.id('foo'));
|
||
* var e2 = element.findElement({id:'foo'});
|
||
*
|
||
* You may also provide a custom locator function, which takes as input
|
||
* this WebDriver instance and returns a {@link WebElement}, or a
|
||
* promise that will resolve to a WebElement. For example, to find the first
|
||
* visible link on a page, you could write:
|
||
*
|
||
* var link = element.findElement(firstVisibleLink);
|
||
*
|
||
* function firstVisibleLink(element) {
|
||
* var links = element.findElements(By.tagName('a'));
|
||
* return promise.filter(links, function(link) {
|
||
* return links.isDisplayed();
|
||
* }).then(function(visibleLinks) {
|
||
* return visibleLinks[0];
|
||
* });
|
||
* }
|
||
*
|
||
* @param {!(by.By|Function)} locator The locator strategy to use when
|
||
* searching for the element.
|
||
* @return {!WebElementPromise} A WebElement that can be used to issue
|
||
* commands against the located element. If the element is not found, the
|
||
* element will be invalidated and all scheduled commands aborted.
|
||
*/
|
||
findElement(locator: Locator): WebElementPromise;
|
||
|
||
/**
|
||
* Schedules a command to find all of the descendants of this element that
|
||
* match the given search criteria.
|
||
*
|
||
* @param {!(by.By|Function)} locator The locator strategy to use when
|
||
* searching for the element.
|
||
* @return {!Promise<!Array<!WebElement>>} A
|
||
* promise that will resolve to an array of WebElements.
|
||
*/
|
||
findElements(locator: Locator): Promise<WebElement[]>;
|
||
|
||
/**
|
||
* Schedules a command to click on this element.
|
||
* @return {!Promise.<void>} A promise that will be resolved
|
||
* when the click command has completed.
|
||
*/
|
||
click(): Promise<void>;
|
||
|
||
/**
|
||
* Schedules a command to type a sequence on the DOM element represented by
|
||
* this promsieinstance.
|
||
*
|
||
* Modifier keys (SHIFT, CONTROL, ALT, META) are stateful; once a modifier is
|
||
* processed in the keysequence, that key state is toggled until one of the
|
||
* following occurs:
|
||
*
|
||
* - The modifier key is encountered again in the sequence. At this point the
|
||
* state of the key is toggled (along with the appropriate keyup/down
|
||
* events).
|
||
* - The {@link Key.NULL} key is encountered in the sequence. When
|
||
* this key is encountered, all modifier keys current in the down state are
|
||
* released (with accompanying keyup events). The NULL key can be used to
|
||
* simulate common keyboard shortcuts:
|
||
*
|
||
* element.sendKeys('text was',
|
||
* Key.CONTROL, 'a', Key.NULL,
|
||
* 'now text is');
|
||
* // Alternatively:
|
||
* element.sendKeys('text was',
|
||
* Key.chord(Key.CONTROL, 'a'),
|
||
* 'now text is');
|
||
*
|
||
* - The end of the keysequence is encountered. When there are no more keys
|
||
* to type, all depressed modifier keys are released (with accompanying
|
||
* keyup events).
|
||
*
|
||
* If this element is a file input ({@code <input type='file'>}), the
|
||
* specified key sequence should specify the path to the file to attach to
|
||
* the element. This is analgous to the user clicking 'Browse...' and entering
|
||
* the path into the file select dialog.
|
||
*
|
||
* var form = driver.findElement(By.css('form'));
|
||
* var element = form.findElement(By.css('input[type=file]'));
|
||
* element.sendKeys('/path/to/file.txt');
|
||
* form.submit();
|
||
*
|
||
* For uploads to function correctly, the entered path must reference a file
|
||
* on the _browser's_ machine, not the local machine running this script. When
|
||
* running against a remote Selenium server, a {@link FileDetector}
|
||
* may be used to transparently copy files to the remote machine before
|
||
* attempting to upload them in the browser.
|
||
*
|
||
* __Note:__ On browsers where native keyboard events are not supported
|
||
* (e.g. Firefox on OS X), key events will be synthesized. Special
|
||
* punctionation keys will be synthesized according to a standard QWERTY en-us
|
||
* keyboard layout.
|
||
*
|
||
* @param {...(string|!Promise<string>)} var_args The sequence
|
||
* of keys to type. All arguments will be joined into a single sequence.
|
||
* @return {!Promise.<void>} A promise that will be resolved
|
||
* when all keys have been typed.
|
||
*/
|
||
sendKeys(...var_args: Array<string|number|Promise<string|number>>): Promise<void>;
|
||
|
||
/**
|
||
* Schedules a command to query for the tag/node name of this element.
|
||
* @return {!Promise.<string>} A promise that will be
|
||
* resolved with the element's tag name.
|
||
*/
|
||
getTagName(): Promise<string>;
|
||
|
||
/**
|
||
* Schedules a command to query for the computed style of the element
|
||
* represented by this instance. If the element inherits the named style from
|
||
* its parent, the parent will be queried for its value. Where possible,
|
||
* color values will be converted to their hex representation (e.g. #00ff00
|
||
* instead of rgb(0, 255, 0)).
|
||
*
|
||
* _Warning:_ the value returned will be as the browser interprets it, so
|
||
* it may be tricky to form a proper assertion.
|
||
*
|
||
* @param {string} cssStyleProperty The name of the CSS style property to look
|
||
* up.
|
||
* @return {!Promise<string>} A promise that will be
|
||
* resolved with the requested CSS value.
|
||
*/
|
||
getCssValue(cssStyleProperty: string): Promise<string>;
|
||
|
||
/**
|
||
* Schedules a command to query for the value of the given attribute of the
|
||
* element. Will return the current value, even if it has been modified after
|
||
* the page has been loaded. More exactly, this method will return the value
|
||
* of the given attribute, unless that attribute is not present, in which case
|
||
* the value of the property with the same name is returned. If neither value
|
||
* is set, null is returned (for example, the 'value' property of a textarea
|
||
* element). The 'style' attribute is converted as best can be to a
|
||
* text representation with a trailing semi-colon. The following are deemed to
|
||
* be 'boolean' attributes and will return either 'true' or null:
|
||
*
|
||
* async, autofocus, autoplay, checked, compact, complete, controls, declare,
|
||
* defaultchecked, defaultselected, defer, disabled, draggable, ended,
|
||
* formnovalidate, hidden, indeterminate, iscontenteditable, ismap, itemscope,
|
||
* loop, multiple, muted, nohref, noresize, noshade, novalidate, nowrap, open,
|
||
* paused, pubdate, readonly, required, reversed, scoped, seamless, seeking,
|
||
* selected, spellcheck, truespeed, willvalidate
|
||
*
|
||
* Finally, the following commonly mis-capitalized attribute/property names
|
||
* are evaluated as expected:
|
||
*
|
||
* - 'class'
|
||
* - 'readonly'
|
||
*
|
||
* @param {string} attributeName The name of the attribute to query.
|
||
* @return {!Promise.<?string>} A promise that will be
|
||
* resolved with the attribute's value. The returned value will always be
|
||
* either a string or null.
|
||
*/
|
||
getAttribute(attributeName: string): Promise<string>;
|
||
|
||
/**
|
||
* Get the visible (i.e. not hidden by CSS) innerText of this element,
|
||
* including sub-elements, without any leading or trailing whitespace.
|
||
* @return {!Promise.<string>} A promise that will be
|
||
* resolved with the element's visible text.
|
||
*/
|
||
getText(): Promise<string>;
|
||
|
||
/**
|
||
* DEPRECATED 3.0
|
||
* Schedules a command to compute the size of this element's bounding box, in
|
||
* pixels.
|
||
* @return {!Promise.<{width: number, height: number}>} A
|
||
* promise that will be resolved with the element's size as a
|
||
* {@code {width:number, height:number}} object.
|
||
*/
|
||
getSize(): Promise<ISize>;
|
||
|
||
/**
|
||
* Returns an object describing an element's location, in pixels relative to
|
||
* the document element, and the element's size in pixels.
|
||
*/
|
||
getRect(): Promise<IRectangle>;
|
||
|
||
/**
|
||
* DEPRECATED 3.0
|
||
* Schedules a command to compute the location of this element in page space.
|
||
* @return {!Promise.<{x: number, y: number}>} A promise that
|
||
* will be resolved to the element's location as a
|
||
* {@code {x:number, y:number}} object.
|
||
*/
|
||
getLocation(): Promise<ILocation>;
|
||
|
||
/**
|
||
* Schedules a command to query whether the DOM element represented by this
|
||
* instance is enabled, as dicted by the {@code disabled} attribute.
|
||
* @return {!Promise.<boolean>} A promise that will be
|
||
* resolved with whether this element is currently enabled.
|
||
*/
|
||
isEnabled(): Promise<boolean>;
|
||
|
||
/**
|
||
* Schedules a command to query whether this element is selected.
|
||
* @return {!Promise.<boolean>} A promise that will be
|
||
* resolved with whether this element is currently selected.
|
||
*/
|
||
isSelected(): Promise<boolean>;
|
||
|
||
/**
|
||
* Schedules a command to submit the form containing this element (or this
|
||
* element if it is a FORM element). This command is a no-op if the element is
|
||
* not contained in a form.
|
||
* @return {!Promise.<void>} A promise that will be resolved
|
||
* when the form has been submitted.
|
||
*/
|
||
submit(): Promise<void>;
|
||
|
||
/**
|
||
* Schedules a command to clear the `value` of this element. This command has
|
||
* no effect if the underlying DOM element is neither a text INPUT element
|
||
* nor a TEXTAREA element.
|
||
* @return {!Promise<void>} A promise that will be resolved
|
||
* when the element has been cleared.
|
||
*/
|
||
clear(): Promise<void>;
|
||
|
||
/**
|
||
* Schedules a command to test whether this element is currently displayed.
|
||
* @return {!Promise.<boolean>} A promise that will be
|
||
* resolved with whether this element is currently visible on the page.
|
||
*/
|
||
isDisplayed(): Promise<boolean>;
|
||
|
||
/**
|
||
* Take a screenshot of the visible region encompassed by this element's
|
||
* bounding rectangle.
|
||
*
|
||
* @param {boolean=} opt_scroll Optional argument that indicates whether the
|
||
* element should be scrolled into view before taking a screenshot.
|
||
* Defaults to false.
|
||
* @return {!Promise<string>} A promise that will be
|
||
* resolved to the screenshot as a base-64 encoded PNG.
|
||
*/
|
||
takeScreenshot(opt_scroll?: boolean): Promise<string>;
|
||
|
||
/** @override */
|
||
serialize(): Promise<IWebElementId>;
|
||
}
|
||
|
||
/**
|
||
* WebElementPromise is a promise that will be fulfilled with a WebElement.
|
||
* This serves as a forward proxy on WebElement, allowing calls to be
|
||
* scheduled without directly on this instance before the underlying
|
||
* WebElement has been fulfilled. In other words, the following two statements
|
||
* are equivalent:
|
||
* <pre><code>
|
||
* driver.findElement({id: 'my-button'}).click();
|
||
* driver.findElement({id: 'my-button'}).then(function(el) {
|
||
* return el.click();
|
||
* });
|
||
* </code></pre>
|
||
*
|
||
* @param {!WebDriver} driver The parent WebDriver instance for this
|
||
* element.
|
||
* @param {!Promise.<!WebElement>} el A promise
|
||
* that will resolve to the promised element.
|
||
* @constructor
|
||
* @extends {WebElement}
|
||
* @implements {promise.Thenable.<!WebElement>}
|
||
* @final
|
||
*/
|
||
export interface WebElementPromise extends Promise<WebElement> {}
|
||
|
||
/**
|
||
* Implement WebElementPromise
|
||
*/
|
||
export class WebElementPromise extends WebElement {
|
||
/**
|
||
* @param {!WebDriver} driver The parent WebDriver instance for this
|
||
* element.
|
||
* @param {!Promise<!WebElement>} el A promise
|
||
* that will resolve to the promised element.
|
||
*/
|
||
constructor(driver: WebDriver, el: Promise<WebElement>);
|
||
}
|
||
|
||
/**
|
||
* Contains information about a WebDriver session.
|
||
*/
|
||
export class Session {
|
||
// region Constructors
|
||
|
||
/**
|
||
* @param {string} id The session ID.
|
||
* @param {!(Object|Capabilities)} capabilities The session
|
||
* capabilities.
|
||
* @constructor
|
||
*/
|
||
constructor(id: string, capabilities: Capabilities|{});
|
||
|
||
// endregion
|
||
|
||
// region Methods
|
||
|
||
/**
|
||
* @return {string} This session's ID.
|
||
*/
|
||
getId(): string;
|
||
|
||
/**
|
||
* @return {!Capabilities} This session's capabilities.
|
||
*/
|
||
getCapabilities(): Capabilities;
|
||
|
||
/**
|
||
* Retrieves the value of a specific capability.
|
||
* @param {string} key The capability to retrieve.
|
||
* @return {*} The capability value.
|
||
*/
|
||
getCapability(key: string): any;
|
||
|
||
/**
|
||
* Returns the JSON representation of this object, which is just the string
|
||
* session ID.
|
||
* @return {string} The JSON representation of this Session.
|
||
*/
|
||
toJSON(): string;
|
||
|
||
// endregion
|
||
}
|