Copyright © 2024 World Wide Web Consortium . W3C ® liability , trademark and permissive document license rules apply.
WebDriver is a remote control interface that enables introspection and control of user agents. It provides a platform- and language-neutral wire protocol as a way for out-of-process programs to remotely instruct the behavior of web browsers.
Provided is a set of interfaces to discover and manipulate DOM elements in web documents and to control the behavior of a user agent. It is primarily intended to allow web authors to write tests that automate a user agent from a separate controlling process, but may also be used in such a way as to allow in-browser scripts to control a — possibly separate — browser.
This section describes the status of this document at the time of its publication. A list of current W3C publications and the latest revision of this technical report can be found in the W3C technical reports index at https://www.w3.org/TR/.
This document was published by the Browser Testing and Tools Working Group as an Editor's Draft.
Publication as an Editor's Draft does not imply endorsement by W3C and its Members.
This is a draft document and may be updated, replaced or obsoleted by other documents at any time. It is inappropriate to cite this document as other than work in progress.
This document was produced by a group operating under the W3C Patent Policy . W3C maintains a public list of any patent disclosures made in connection with the deliverables of the group; that page also includes instructions for disclosing a patent. An individual who has actual knowledge of a patent which the individual believes contains Essential Claim(s) must disclose the information in accordance with section 6 of the W3C Patent Policy .
This document is governed by the 03 November 2023 W3C Process Document .
This section is non-normative.
The WebDriver standard attempts to follow a number of design goals:
This specification is derived from the popular Selenium WebDriver browser automation framework. Selenium is a long-lived project, and due to its age and breadth of use it has a wide range of expected functionality. This specification uses these expectations to inform its design. Where improvements or clarifications have been made, they have been made with care to allow existing users of Selenium WebDriver to avoid unexpected breakages.
The largest intended group of users of this specification are software developers and testers writing automated tests and other tooling, such as monitoring or load testing, that relies on automating a browser. As such, care has been taken to provide commands that simplify common tasks such as typing into and clicking elements.
WebDriver provides a mechanism for others to define extensions to the protocol for the purposes of automating functionality that cannot be implemented entirely in ECMAScript . This allows other web standards to support the automation of new platform features. It also allows vendors to expose functionality that is specific to their browser.
As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, and notes in this specification are non-normative. Everything else in this specification is normative.
Conformance requirements phrased as algorithms or specific steps may be implemented in any manner, so long as the end result is equivalent. Algorithms in this document are typically written with readability, rather than performance, in mind.
In equations, all numbers are integers, addition is represented by “+”, subtraction by “−”, division by “÷”, and bitwise OR by “|”. The characters “(” and “)” are used to provide logical grouping in these contexts.
The mathematical function min ( value , value [, value ]) returns the smallest item of two or more values. Conversely, the function max ( value , value [, value ]) returns the largest item of two or more values.
The mathematical function floor ( value ) produces the largest integer, closest to positive infinity, that is not larger than value .
A Universally Unique Identifier (UUID) is a 128 bits long URN that requires no central registration process. Generating a UUID means Creating a UUID From Truly Random or Pseudo-Random Numbers , and converting it to the string representation. [ RFC4122 ]
The Unix Epoch is a value that approximates the number of seconds that have elapsed since the Epoch, as described by The Open Group Base Specifications Issue 7 section 4.15 (IEEE Std 1003.1).
An integer is a Number that is unchanged under the ToInteger operation.
The initial value of an ECMAScript property is the value defined by the platform for that property, i.e. the value it would have in the absence of any shadowing by content script.
The browser chrome is a non-normative term to refer to the representation through which the user interacts with the user agent itself, as distinct from the accessed web content. Examples of browser chrome elements include, but are not limited to, toolbars (such as the bookmark toolbar), menus (such as the file or context menu), buttons (such as the back and forward buttons), door hangers (such as security and certificate indicators), and decorations (such as operating system widget borders).
The webdriver-active flag is set to true when the user agent is under remote control. It is initially false.
WebIDL
Navigator
includes
NavigatorAutomationInformation
;
The
NavigatorAutomationInformation
interface
should
not
be
exposed
on
WorkerNavigator
.
Returns true if webdriver-active flag is set, false otherwise.
The WebDriver protocol consists of communication between:
The local end represents the client side of the protocol, which is usually in the form of language-specific libraries providing an API on top of the WebDriver protocol . This specification does not place any restrictions on the details of those libraries above the level of the wire protocol.
For remote ends the standard defines two broad conformance classes, known as node types :
All remote end node types must be black-box indistinguishable from a remote end , from the point of view of local end , and so are bound by the requirements on a remote end in terms of the wire protocol.
The readiness state of a remote end indicates whether it is free to accept new connections. It must be false if the implementation is an endpoint node and the list of active HTTP sessions is not empty, or otherwise if the remote end is known to be in a state in which attempting to create new sessions would fail. In all other cases it must be true.
If the intermediary node is a multiplexer that manages multiple endpoint nodes , this might indicate its ability to purvey more sessions , for example if it has hit its maximum capacity.
WebDriver remote ends must provide an HTTP compliant wire protocol where the endpoints map to different commands .
As this standard only defines the remote end protocol, it puts no demands to how local ends should be implemented. Local ends are only expected to be compatible to the extent that they can speak the remote end 's protocol; no requirements are made upon their exposed user-facing API.
Various parts of this specification are written in terms of step-by-step algorithms. The details of these algorithms do not have any normative significance; implementations are free to adopt any implementation strategy that produces equivalent output to the specification. In particular, algorithms in this document are optimized for readability rather than performance.
Where algorithms that return values are fallible, they are written in terms of returning either success or error . A success value has an associated data field which encapsulates the value returned, whereas an error value has an associated error code .
When calling a fallible algorithm, the construct “Let result be the result of trying to call algorithm ” is equivalent to
Let temp be the result of calling algorithm .
If temp is an error return temp , otherwise let result be temp 's data field.
The result of getting a property with name from object is defined as being the same as the result of calling Object.[[GetOwnProperty]] ( name ) on object .
The
result
of
getting
a
property
with
default
with
arguments
name
and
default
from
object
is
defined
as
being
the
same
as
the
result
of
calling
Object.[[GetOwnProperty]]
(
name
)
on
object
if
that
results
in
a
value
other
than
undefined
and
default
otherwise.
Setting a property with arguments name and value on object is defined as being the same as calling Object.[[Put]] ( name , value ) on object .
The result of JSON serialization with object of type JSON Object is defined as the result of calling stringify ( object ).
The result of JSON deserialization with text is defined as the result of calling parse ( text ).
The WebDriver protocol is organized into commands . Each HTTP request with a method and template defined in this specification represents a single command , and therefore each command produces a single HTTP response .
In response to a command , a remote end will run a series of actions known as remote end steps . These provide the sequences of actions that a remote end takes when it receives a particular command .
The remote end is an HTTP server reading requests from the client and writing responses, typically over a TCP socket. For the purposes of this specification we model the data transmission between a particular local end and remote end with a connection to which the remote end may write bytes and read bytes . However the exact details of how this connection works and how it is established are out of scope.
After a connection is established, the remote end must run the following steps:
While the connection is not closed:
Read bytes from the connection until a complete HTTP request can be constructed from the data. Let request be a request constructed from the received data, according to the requirements of [ RFC7230 ]. If it is not possible to construct a complete HTTP request , the remote end must either close the connection , return an HTTP response with status code 500, or return an error with error code unknown error .
Let request match be the result of the algorithm to match a request with request 's method and URL as arguments.
If request match is of type error , send an error with request match 's error code and continue .
Otherwise, let command and URL variables be request match 's data.
Let session be null.
If
URL
variables
contains
"
session
id"
:
This condition is intended to exclude the New Session and Status commands and any extension commands which do not operate on a particular session .
Let
session
id
be
URL
variables
["
session
id
"].
For each active session in the list of active sessions :
If active session 's session ID is equal to session id , then let session be active session , and break.
If
the
session
is
null
send
an
error
with
error
code
invalid
session
id
,
then
continue
.
Enqueue a task on remote end 's request queue to run the following steps:
Let
parameters
be
null
.
If request 's method is POST:
Let parse result be the result of parsing as JSON with request 's body as the argument. If this process throws an exception, return an error with error code invalid argument and jump back to step 1 in this overall algorithm.
If parse result is not an Object , send an error with error code invalid argument and jump back to step 1 in this overall algorithm.
Otherwise, let parameters be parse result .
Let navigate result be the result of wait for navigation to complete with session .
If navigate result is an error , send an error with error code equal to navigate result 's error code and return.
Let response result be the return value obtained by running the remote end steps for command with session , URL variables , and parameters .
If response result is an error , send an error with error code equal to response result 's error code and return.
Assert: response result is a success .
Let response data be response result 's data.
Send a response with status 200 and response data .
When required to send an error , with error code and an optional error data dictionary, a remote end must run the following steps:
Let status and name be the error response data for error code .
Let message be an implementation-defined string containing a human-readable description of the reason for the error.
Let stacktrace be an implementation-defined string containing a stack trace report of the active stack frames at the time when the error occurred.
Let body be a new JSON Object initialized with the following properties:
error
"
message
"
stacktrace
"
If
the
error
data
dictionary
contains
any
entries,
set
the
"
data
"
field
on
body
to
a
new
JSON
Object
populated
with
the
dictionary.
Send a response with status and body as arguments.
When required to send a response , with arguments status and data , a remote end must run the following steps:
Let response be a new response .
Set response 's HTTP status to status , and status message to the string corresponding to the description of status in the status code registry .
Set the response 's header with name and value with the following values:
Content-Type
application/json;
charset=utf-8
"
Cache-Control
no-cache
"
Let
response
's
body
be
the
UTF-8
encoded
JSON
serialization
of
a
JSON
Object
with
a
key
"
value
"
set
to
data
.
Let response bytes be the byte sequence resulting from serializing response according to the rules in [ RFC7230 ].
Write response bytes to the connection .
Request routing is the process of going from an HTTP request to the series of steps needed to implement the command represented by that request.
A remote end has an associated URL prefix , which is used as a prefix on all WebDriver-defined URLs on that remote end . This must either be undefined or a path-absolute URL .
In order to match a request given a method and URL , the following steps must be taken:
Let endpoints be a list containing each row in the table of endpoints .
Remove each entry from endpoints for which the concatenation of the URL prefix and the entry's URI template does not have a valid expansion equal to URL 's path .
If there are no entries in endpoints , return error with error code unknown command .
Remove each entry in endpoints for which the method column is not equal to method .
If there are no entries in endpoints , return error with error code unknown method .
There is now exactly one entry in endpoints ; let entry be this entry.
Let URI template be the concatenation of URL prefix with entry 's URI template .
Let command be entry 's command .
Let URL variables be a map with one entry for each variable defined in URI template , with the entry name equal to the template variable name, and the entry value being the variable value required to expand the URI template to match URL 's path .
Return success with data command and URL variables .
The following table of endpoints lists the method and URI template for each endpoint node command . Extension commands are implicitly appended to this table.
Method | URI Template | Command |
---|---|---|
POST | /session | New Session |
DELETE | /session/{ session id } | Delete Session |
GET | /status | Status |
GET | /session/{ session id }/timeouts | Get Timeouts |
POST | /session/{ session id }/timeouts | Set Timeouts |
POST | /session/{ session id }/url | Navigate To |
GET | /session/{ session id }/url | Get Current URL |
POST | /session/{ session id }/back | Back |
POST | /session/{ session id }/forward | Forward |
POST | /session/{ session id }/refresh | Refresh |
GET | /session/{ session id }/title | Get Title |
GET | /session/{ session id }/window | Get Window Handle |
DELETE | /session/{ session id }/window | Close Window |
POST | /session/{ session id }/window | Switch To Window |
GET | /session/{ session id }/window/handles | Get Window Handles |
POST | /session/{ session id }/window/new | New Window |
POST | /session/{ session id }/frame | Switch To Frame |
POST | /session/{ session id }/frame/parent | Switch To Parent Frame |
GET | /session/{ session id }/window/rect | Get Window Rect |
POST | /session/{ session id }/window/rect | Set Window Rect |
POST | /session/{ session id }/window/maximize | Maximize Window |
POST | /session/{ session id }/window/minimize | Minimize Window |
POST | /session/{ session id }/window/fullscreen | Fullscreen Window |
GET | /session/{ session id }/element/active | Get Active Element |
GET | /session/{ session id }/element/{ element id }/shadow | Get Element Shadow Root |
POST | /session/{ session id }/element | Find Element |
POST | /session/{ session id }/elements | Find Elements |
POST | /session/{ session id }/element/{element id}/element | Find Element From Element |
POST | /session/{ session id }/element/{element id}/elements | Find Elements From Element |
POST | /session/{ session id }/shadow/ {shadow id} /element | Find Element From Shadow Root |
POST | /session/{ session id }/shadow/ {shadow id} /elements | Find Elements From Shadow Root |
GET | /session/{ session id }/element/{ element id }/selected | Is Element Selected |
GET | /session/{ session id }/element/{ element id }/attribute/{ name } | Get Element Attribute |
GET | /session/{ session id }/element/{ element id }/property/{ name } | Get Element Property |
GET | /session/{ session id }/element/{ element id }/css/{ property name } | Get Element CSS Value |
GET | /session/{ session id }/element/{ element id }/text | Get Element Text |
GET | /session/{ session id }/element/{ element id }/name | Get Element Tag Name |
GET | /session/{ session id }/element/{ element id }/rect | Get Element Rect |
GET | /session/{ session id }/element/{ element id }/enabled | Is Element Enabled |
GET | /session/{ session id }/element/{ element id }/computedrole | Get Computed Role |
GET | /session/{ session id }/element/{ element id }/computedlabel | Get Computed Label |
POST | /session/{ session id }/element/{ element id }/click | Element Click |
POST | /session/{ session id }/element/{ element id }/clear | Element Clear |
POST | /session/{ session id }/element/{ element id }/value | Element Send Keys |
GET | /session/{ session id }/source | Get Page Source |
POST | /session/{ session id }/execute/sync | Execute Script |
POST | /session/{ session id }/execute/async | Execute Async Script |
GET | /session/{ session id }/cookie | Get All Cookies |
GET | /session/{ session id }/cookie/{ name } | Get Named Cookie |
POST | /session/{ session id }/cookie | Add Cookie |
DELETE | /session/{ session id }/cookie/{ name } | Delete Cookie |
DELETE | /session/{ session id }/cookie | Delete All Cookies |
POST | /session/{ session id }/actions | Perform Actions |
DELETE | /session/{ session id }/actions | Release Actions |
POST | /session/{ session id }/alert/dismiss | Dismiss Alert |
POST | /session/{ session id }/alert/accept | Accept Alert |
GET | /session/{ session id }/alert/text | Get Alert Text |
POST | /session/{ session id }/alert/text | Send Alert Text |
GET | /session/{ session id }/screenshot | Take Screenshot |
GET | /session/{ session id }/element/{ element id }/screenshot | Take Element Screenshot |
POST | /session/{ session id }/print | Print Page |
Errors
are
represented
in
the
WebDriver
protocol
by
an
HTTP
response
with
an
HTTP
status
in
the
4xx
or
5xx
range,
and
a
JSON
body
containing
details
of
the
error
.
The
body
is
a
JSON
Object
and
has
a
field
named
"
value
"
whose
value
is
an
object
bearing
three,
and
sometimes
four,
fields:
error
",
containing
a
string
indicating
the
error
code
.
message
",
containing
an
implementation-defined
string
with
a
human
readable
description
of
the
kind
of
error
that
occurred.
stacktrace
",
containing
an
implementation-defined
string
with
a
stack
trace
report
of
the
active
stack
frames
at
the
time
when
the
error
occurred.
data
",
which
is
a
JSON
Object
with
additional
error
data
helpful
in
diagnosing
the
error.
The
following
table
lists
each
error
code
,
its
associated
HTTP
status
,
JSON
error
code,
and
a
non-normative
description
of
the
error.
The
error
response
data
for
a
particular
error
code
is
the
values
of
the
HTTP
Status
and
JSON
Error
Code
columns
for
the
row
corresponding
to
that
error
code
.
Error Code | HTTP Status | JSON Error Code | Description |
---|---|---|---|
element click intercepted | 400 |
element
click
intercepted
| The Element Click command could not be completed because the element receiving the events is obscuring the element that was requested clicked. |
element not interactable | 400 |
element
not
interactable
| A command could not be completed because the element is not pointer - or keyboard interactable . |
insecure certificate | 400 |
insecure
certificate
| Navigation caused the user agent to hit a certificate warning, which is usually the result of an expired or invalid TLS certificate. |
invalid argument | 400 |
invalid
argument
| The arguments passed to a command are either invalid or malformed. |
invalid cookie domain | 400 |
invalid
cookie
domain
| An illegal attempt was made to set a cookie under a different domain than the current page. |
invalid element state | 400 |
invalid
element
state
| A command could not be completed because the element is in an invalid state, e.g. attempting to clear an element that isn't both editable and resettable . |
invalid selector | 400 |
invalid
selector
| Argument was an invalid selector. |
invalid session id | 404 |
invalid
session
id
| Occurs if the given session id is not in the list of active sessions , meaning the session either does not exist or that it's not active. |
javascript error | 500 |
javascript
error
| An error occurred while executing JavaScript supplied by the user. |
move target out of bounds | 500 |
move
target
out
of
bounds
| The target for mouse interaction is not in the browser's viewport and cannot be brought into that viewport. |
no such alert | 404 |
no
such
alert
| An attempt was made to operate on a modal dialog when one was not open. |
no such cookie | 404 |
no
such
cookie
| No cookie matching the given path name was found amongst the associated cookies of session 's current browsing context 's active document . |
no such element | 404 |
no
such
element
| An element could not be located on the page using the given search parameters. |
no such frame | 404 |
no
such
frame
| A command to switch to a frame could not be satisfied because the frame could not be found. |
no such window | 404 |
no
such
window
| A command to switch to a window could not be satisfied because the window could not be found. |
no such shadow root | 404 |
no
such
shadow
root
| The element does not have a shadow root. |
script timeout error | 500 |
script
timeout
| A script did not complete before its timeout expired. |
session not created | 500 |
session
not
created
| A new session could not be created. |
stale element reference | 404 |
stale
element
reference
| A command failed because the referenced element is no longer attached to the DOM. |
detached shadow root | 404 |
detached
shadow
root
| A command failed because the referenced shadow root is no longer attached to the DOM. |
timeout | 500 |
timeout
| An operation did not complete before its timeout expired. |
unable to set cookie | 500 |
unable
to
set
cookie
| A command to set a cookie's value could not be satisfied. |
unable to capture screen | 500 |
unable
to
capture
screen
| A screen capture was made impossible. |
unexpected alert open | 500 |
unexpected
alert
open
| A modal dialog was open, blocking this operation. |
unknown command | 404 |
unknown
command
| A command could not be executed because the remote end is not aware of it. |
unknown error | 500 |
unknown
error
| An unknown error occurred in the remote end while processing the command . |
unknown method | 405 |
unknown
method
| The requested command matched a known URL but did not match any method for that URL. |
unsupported operation | 500 |
unsupported
operation
| Indicates that a command that should have executed properly cannot be supported for some reason. |
An error data dictionary is a mapping of string keys to JSON serializable values that can optionally be included with error objects.
Using the terminology defined in this section, others may define additional commands that seamlessly integrate with the standard protocol. This allows vendors to expose functionality that is specific to their user agent, and it also allows other web standards to define commands for automating new platform features.
Commands defined in this way are called extension commands and behave no differently than other commands ; each has a dedicated HTTP endpoint and a set of remote end steps .
Each extension command has an associated extension command URI Template that is a URI Template string, and which should bear some resemblance to what the command performs. This value, along with the HTTP method and extension command , is added to the table of endpoints and thus follows the same rules for request routing as that of other built-in commands .
In order to avoid potential resource conflicts with other implementations, vendor-specific extension command URI Templates must begin with one or more path segments which uniquely identifies the vendor and UA. It is suggested that vendors use their vendor prefixes without additional characters as outlined in [ CSS21 ], notably in section 4.1.2.2 on vendor keywords , as the name for this path element, and include a vendor-chosen UA identifier.
Other
specifications
may
define
additional
WebDriver
capabilities
.
Each
defined
capability
must
have
a
capability
name
which
is
a
string
not
containing
a
"
:
"
(colon)
character,
an
additional
capability
deserialization
algorithm
which
is
a
set
of
steps
taking
a
single
argument
value
which
has
a
JSON
type,
returning
either
success
wrapping
the
deserialized
capability
value
or
error
.
An
additional
WebDriver
capability
may
also
define
a
matched
capability
serialization
algorithm
,
which
is
a
set
of
steps
used
to
determine
if
a
capability
is
matched
by
the
current
implementation
and
provide
any
computed
value
to
return
to
the
user.
This
set
of
steps
takes
a
single
argument
value
,
which
is
the
output
of
the
corresponding
additional
capability
deserialization
algorithm
,
and
returns
either
null
to
indicate
the
capability
is
not
matched,
or
a
non-null
JSON-serializable
value
if
the
capability
is
matched.
Other specifications may also define WebDriver new session algorithms , which are called just after a new session is created, and before the new session response is sent to the remote end . These algorithms are called with session representing the WebDriver session that will be established, and capabilities , the capabilities object that will be returned to the remote end . It is permitted for such an algorithm to modify any entry in the capabilities object with a name that's an additional WebDriver capability defined by the same specification.
Remote
ends
may
also
introduce
extension
capabilities
that
are
extra
capabilities
used
to
provide
configuration
or
fulfill
other
vendor-specific
needs.
Extension
capabilities'
key
must
contain
a
"
:
"
(colon)
character,
denoting
an
implementation
specific
namespace.
The
value
can
be
arbitrary
JSON
types.
As
with
extension
commands
,
it
is
suggested
that
the
key
used
to
denote
the
extension
capability
namespace
is
based
on
the
vendor
keywords
listed
in
[
CSS21
]
and
precedes
the
first
"
:
"
character
in
the
string.
WebDriver capabilities are used to communicate the features supported by a given implementation. The local end may use capabilities to define which features it requires the remote end to satisfy when creating a new session . Likewise, the remote end uses capabilities to describe the full feature set for a session .
The following table of standard capabilities enumerates the capabilities each implementation must support. An implementation may define additional extension capabilities .
Capability | Key | Value Type | Description |
---|---|---|---|
Browser name |
"
browserName
"
| string | Identifies the user agent. |
Browser version |
"
browserVersion
"
| string | Identifies the version of the user agent. |
Platform name |
"
platformName
"
| string | Identifies the operating system of the endpoint node . |
Accept insecure TLS certificates |
"
acceptInsecureCerts
"
| boolean | Indicates whether untrusted and self-signed TLS certificates are implicitly trusted on navigation for the duration of the session . |
Page load strategy |
"
pageLoadStrategy
"
| string | Defines the session 's page load strategy . |
Proxy configuration |
"
proxy
"
| JSON Object | Defines the session 's proxy configuration . |
Window dimensioning/positioning |
"
setWindowRect
"
| boolean | Indicates whether the remote end supports all of the resizing and repositioning commands . |
Session timeouts |
"
timeouts
"
| JSON Object | Describes the timeouts imposed on certain session operations. |
Strict file interactability |
"
strictFileInteractability
"
| boolean | Defines the session 's strict file interactability . |
Unhandled prompt behavior |
"
unhandledPromptBehavior
"
| string |
Describes
the
session
's
user
prompt
handler
.
Defaults
to
"
dismiss
and
notify
".
|
User Agent |
"
userAgent
"
| string | Identifies the default User-Agent value of the endpoint node . |
The proxy configuration capability is a JSON Object nested within the primary capabilities . Implementations may define additional proxy configuration options, but they must not alter the semantics of those listed below.
Key | Value Type | Description | Valid values |
---|---|---|---|
proxyType
| string | Indicates the type of proxy configuration. |
"
pac
",
"
direct
",
"
autodetect
",
"
system
",
or
"
manual
".
|
proxyAutoconfigUrl
| string |
Defines
the
URL
for
a
proxy
autoconfiguration
file
if
is
equal
to
"
pac
".
| Any URL . |
ftpProxy
| string |
Defines
the
proxy
host
for
FTP
traffic
when
the
is
"
manual
".
|
A
host
and
optional
port
for
scheme
"
ftp
".
|
httpProxy
| string |
Defines
the
proxy
host
for
HTTP
traffic
when
the
is
"
manual
".
|
A
host
and
optional
port
for
scheme
"
http
".
|
noProxy
| array |
Lists
the
address
for
which
the
proxy
should
be
bypassed
when
the
is
"
manual
".
| A List containing any number of String s. |
sslProxy
| string |
Defines
the
proxy
host
for
encrypted
TLS
traffic
when
the
is
"
manual
".
|
A
host
and
optional
port
for
scheme
"
https
".
|
socksProxy
| string |
Defines
the
proxy
host
for
a
SOCKS
proxy
when
the
is
"
manual
".
| A host and optional port with an undefined scheme. |
socksVersion
| number |
Defines
the
SOCKS
proxy
version
when
the
is
"
manual
".
| Any integer between 0 and 255 inclusive. |
A host and optional port for a scheme is defined as being a valid host , optionally followed by a colon and a valid port . The host may include credentials . If the port is omitted and scheme has a default port , this is the implied port. Otherwise, the port is left undefined.
A
of
"
proxyType
direct
"
indicates
that
the
browser
should
not
use
a
proxy
at
all.
A
of
"
proxyType
system
"
indicates
that
the
browser
should
use
the
various
proxies
configured
for
the
underlying
Operating
System.
A
of
"
proxyType
autodetect
"
indicates
that
the
proxy
to
use
should
be
detected
in
an
implementation-specific
way.
The remote end steps to deserialize as a proxy argument parameter are:
If parameter is not a JSON Object return an error with error code invalid argument .
Let proxy be a new, empty proxy configuration object .
For each enumerable own property in parameter run the following substeps:
Let key be the name of the property.
Let value be the result of getting a property named name from parameter .
If
there
is
no
matching
key
for
key
in
the
proxy
configuration
table
return
an
error
with
error
code
invalid
argument
.
If
value
is
not
one
of
the
valid
values
for
that
key
,
return
an
error
with
error
code
invalid
argument
.
Set a property key to value on proxy .
If
proxy
does
not
have
an
own
property
for
"
proxyType
"
return
an
error
with
error
code
invalid
argument
.
If
the
result
of
getting
a
property
named
"
proxyType
"
from
proxy
equals
"
pac
",
and
proxy
does
not
have
an
own
property
for
"
proxyAutoconfigUrl
"
return
an
error
with
error
code
invalid
argument
.
If
proxy
has
an
own
property
for
"
socksProxy
"
and
does
not
have
an
own
property
for
"
socksVersion
"
return
an
error
with
error
code
invalid
argument
.
Return success with data proxy .
A proxy configuration object is a JSON Object where each of its own properties matching keys in the proxy configuration meets the validity criteria for that key.
To process capabilities given parameters , and session configuration flags flags , the endpoint node must take the following steps:
Let
capabilities
request
be
the
result
of
getting
the
property
"
capabilities
"
from
parameters
.
If capabilities request is not a JSON Object , return error with error code invalid argument .
Let
required
capabilities
be
the
result
of
getting
the
property
"
alwaysMatch
"
from
capabilities
request
.
If required capabilities is undefined , set the value to an empty JSON Object .
Let required capabilities be the result of trying to validate capabilities with arguments required capabilities and flag .
Let
all
first
match
capabilities
be
the
result
of
getting
the
property
"
firstMatch
"
from
capabilities
request
.
If all first match capabilities is undefined , set the value to a List with a single entry of an empty JSON Object .
If all first match capabilities is not a List with one or more entries, return error with error code invalid argument .
Let validated first match capabilities be an empty List .
For each first match capabilities corresponding to an indexed property in all first match capabilities :
Let validated capabilities be the result of trying to validate capabilities with arguments first match capabilities and flags .
Append validated capabilities to validated first match capabilities .
Let merged capabilities be an empty List .
For each first match capabilities corresponding to an indexed property in validated first match capabilities :
Let merged be the result of trying to merge capabilities with required capabilities and first match capabilities as arguments.
Append merged to merged capabilities .
For each capabilities corresponding to an indexed property in merged capabilities :
Let matched capabilities be the result of trying to match capabilities with capabilities as an argument.
If
matched
capabilities
is
not
null
,
return
success
with
data
matched
capabilities
.
When required to validate capabilities with argument capabilities :
If capabilities is not a JSON Object return an error with error code invalid argument .
Let result be an empty JSON Object .
For each enumerable own property in capabilities , run the following substeps:
Let name be the name of the property.
Let value be the result of getting a property named name from capabilities .
Run the substeps of the first matching condition:
null
Let
deserialized
be
set
to
null
.
acceptInsecureCerts
"
If value is not a boolean return an error with error code invalid argument . Otherwise, let deserialized be set to value .
browserName
"
browserVersion
"
platformName
"
If value is not a string return an error with error code invalid argument . Otherwise, let deserialized be set to value .
pageLoadStrategy
"
Let deserialized be the result of trying to deserialize as a page load strategy with argument value .
proxy
"
Let deserialized be the result of trying to deserialize as a proxy with argument value .
strictFileInteractability
"
If value is not a boolean return an error with error code invalid argument . Otherwise, let deserialized be set to value
timeouts
"
Let deserialized be the result of trying to deserialize as timeouts configuration with value .
unhandledPromptBehavior
"
Let deserialized be the result of trying to deserialize as an unhandled prompt behavior with argument value .
Let deserialized be the result of trying to run the additional capability deserialization algorithm for the extension capability corresponding to name , with argument value .
If name is known to the implementation, let deserialized be the result of trying to deserialize value in an implementation-specific way. Otherwise, let deserialized be set to value .
Return an error with error code invalid argument .
If
deserialized
is
not
null
,
set
a
property
on
result
with
name
name
and
value
deserialized
.
When merging capabilities with JSON Object arguments primary and secondary , an endpoint node must take the following steps:
Let result be a new JSON Object .
For each enumerable own property in primary , run the following substeps:
Let name be the name of the property.
Let value be the result of getting a property named name from primary .
If secondary is undefined , return result .
For each enumerable own property in secondary , run the following substeps:
Let name be the name of the property.
Let value be the result of getting a property named name from secondary .
Let primary value be the result of getting the property name from primary .
If primary value is not undefined , return an error with error code invalid argument .
Return result .
When matching capabilities given JSON Object capabilities , and a session configuration flags flags , an endpoint node must take the following steps:
Let matched capabilities be a JSON Object with the following entries:
browserName
"
browserVersion
"
platformName
"
acceptInsecureCerts
"
strictFileInteractability
"
setWindowRect
"
userAgent
"
If
flags
contains
"
http
",
add
the
following
entries
to
matched
capabilities
:
strictFileInteractability
"
Optionally add extension capabilities as entries to matched capabilities . The values of these may be elided, and there is no requirement that all extension capabilities be added.
For each name and value corresponding to capabilities 's own properties :
Let match value equal value .
Run the substeps of the first matching name :
browserName
"
If
value
is
not
a
string
equal
to
the
"
browserName
"
entry
in
matched
capabilities
,
return
success
with
data
null
.
There
is
a
chance
the
remote
end
will
need
to
start
a
browser
process
to
correctly
determine
the
browserName
.
Lightweight
checks
are
preferred
before
this
is
done.
browserVersion
"
Compare
value
to
the
"
browserVersion
"
entry
in
matched
capabilities
using
an
implementation-defined
comparison
algorithm.
The
comparison
is
to
accept
a
value
that
places
constraints
on
the
version
using
the
"
<
",
"
<=
",
"
>
",
and
"
>=
"
operators.
If
the
two
values
do
not
match,
return
success
with
data
null
.
Version comparison is left as an implementation detail since each user agent will likely have conflicting methods of encoding the user agent version, and standardizing these schemes is beyond the scope of this standard.
There
is
a
chance
the
remote
end
will
need
to
start
a
browser
process
to
correctly
determine
the
browserVersion
.
Lightweight
checks
are
preferred
before
this
is
done.
platformName
"
If
value
is
not
a
string
equal
to
the
"
platformName
"
entry
in
matched
capabilities
,
return
success
with
data
null
.
The following platform names are in common usage with well-understood semantics and, when matching capabilities , greatest interoperability can be achieved by honoring them as valid synonyms for well-known Operating Systems:
Key | System |
---|---|
"
linux
"
|
Any server or desktop system based upon the Linux kernel. |
"
mac
"
|
Any version of Apple's macOS. |
"
windows
"
|
Any version of Microsoft Windows, including desktop and mobile versions. |
This list is not exhaustive.
When
returning
capabilities
from
New
Session
,
it
is
valid
to
return
a
more
specific
platformName
,
allowing
users
to
correctly
identify
the
Operating
System
the
WebDriver
implementation
is
running
on.
acceptInsecureCerts
"
If
accept
insecure
TLS
flag
is
set
and
not
equal
to
value
,
return
success
with
data
null
.
If the endpoint node does not support insecure TLS certificates and this is the reason no match is ultimately made, it is useful to provide this information to the local end .
proxy
"
If
the
has
proxy
configuration
flag
is
set,
or
if
the
proxy
configuration
defined
in
value
is
not
one
that
passes
the
endpoint
node
's
implementation-specific
validity
checks,
return
success
with
data
null
.
A local end would only send this capability if it expected it to be honored and the configured proxy used. The intent is that if this is not possible a new session will not be established.
unhandledPromptBehavior
"
If
check
user
prompt
handler
matches
with
value
is
false,
return
success
with
data
null
.
If name is the name of an additional WebDriver capability which defines a matched capability serialization algorithm , let match value be the result of running the matched capability serialization algorithm for capability name with arguments value , and flags .
Otherwise,
if
name
is
the
key
of
an
extension
capability
,
let
match
value
be
the
result
of
trying
implementation-specific
steps
to
match
on
name
with
value
.
If
the
match
is
not
successful,
return
success
with
data
null
.
If match value is not null, set a property on matched capabilities with name name and value match value .
Return success with data matched capabilities .
A WebDriver session represents the logical connection between a local end and a specific remote end . The session object holds state specific to that connection.
An intermediary node will maintain an associated session for each active session . This is the session on the upstream neighbor that is created when the intermediary node executes the New Session command . Closing a session on an intermediary node will also close the session of the associated session .
A session has a session ID , which is the string representation of a UUID used to uniquely identify the session. This is set when creating the session.
A session has a boolean HTTP flag which is set when the session is created. A session with this flag set is an HTTP session .
A remote end has an associated list of active sessions , which is a list of all session s that are currently started.
A remote end has an associated list of active HTTP sessions , which is a list of all HTTP session s that are currently started.
The limitation of a single HTTP session for endpoint node s means that the first entry in the list of active HTTP sessions will be the only entry.
A HTTP session has an associated current browsing context , which is the browsing context against which commands will run, an associated current parent browsing context , which is set to the parent of the current browsing context when changing browsing contexts, and an associated current top-level browsing context , which is set to the top-browsing context ancestor of the current browsing context , when changing browsing contexts.
An HTTP session has an associated session timeouts which is a timeouts configuration . This is initially set to a new timeouts configuration .
An HTTP session has an associated page loading strategy , which is one of the keywords from the table of page load strategies . This is initially set to normal .
An HTTP session has an associated strict file interactability state which is a boolean. This is initially set to false.
A session has an associated browsing context input state map , which is a weak map with top-level browsing contexts as keys, and input state objects as values. This is initially set to an empty map.
An HTTP session has an associated request queue which is a queue of requests that are currently awaiting processing.
When
a
session
is
created,
a
set
of
session
configuration
flags
are
provided
that
define
the
features
of
the
session.
This
specification
always
creates
sessions
with
"
http
"
in
session
configuration
flags
,
which
corresponds
to
the
HTTP
flag
.
External
specficiations
may
define
additional
flags,
or
create
sessions
without
the
HTTP
flag
.
In addition to per-session state, a remote end that is an endpoint node also has additional state that is global across all sessions.
An endpoint node has an associated accept insecure TLS flag that indicates whether untrusted or self-signed TLS certificates are treated as trusted. The default value of the flag is false if the endpoint doesn't support accepting insecure TLS connections, or unset otherwise.
An endpoint node has an associated has proxy configuration flag that indicates whether the proxy is already configured. The default value of the flag is true if the endpoint doesn't support proxy configuration, or false otherwise.
To create a session , given a JSON Object capabilites , and session configuration flags flags :
Let session id be the result of generating a UUID .
Let
session
be
a
new
session
with
session
ID
session
id
,
and
HTTP
flag
flags
contains
"
http
".
Let
proxy
be
the
result
of
getting
property
"
proxy
"
from
capabilities
and
run
the
substeps
of
the
first
matching
statement:
Take implementation-defined steps to set the user agent proxy using the extracted proxy configuration. If the defined proxy cannot be configured return error with error code session not created . Otherwise set the has proxy configuration flag to true.
proxy
"
and
a
value
that
is
a
new
JSON
Object
.
If
capabilites
has
a
property
named
"
acceptInsecureCerts
",
set
the
endpoint
node
's
accept
insecure
TLS
flag
to
the
result
of
getting
a
property
named
"
acceptInsecureCerts
"
from
capabilities
.
Let
user
prompt
handler
capability
be
the
result
of
getting
property
"
unhandledPromptBehavior
"
from
capabilities
.
If user prompt handler capability is not undefined, update the user prompt handler with user prompt handler capability .
Let serialized user prompt handler be serialize the user prompt handler .
If
serialized
user
prompt
handler
is
not
null,
set
a
property
on
capabilities
with
the
name
"
unhandledPromptBehavior
",
and
the
value
serialized
user
prompt
handler
.
If
flags
contains
"
http
":
Let
strategy
be
the
result
of
getting
property
"
pageLoadStrategy
"
from
capabilities
.
If
strategy
is
a
string,
set
the
session
's
page
loading
strategy
to
strategy
.
Otherwise,
set
the
page
loading
strategy
to
normal
and
set
a
property
of
capabilities
with
name
"
pageLoadStrategy
"
and
value
"
normal
".
Let
strictFileInteractability
be
the
result
of
getting
property
"
strictFileInteractability
"
from
capabilities
.
If
strictFileInteractability
is
a
boolean,
set
session
's
strict
file
interactability
to
strictFileInteractability
.
Let
timeouts
be
the
result
of
getting
a
property
"
timeouts
"
from
capabilities
.
If
timeouts
is
not
undefined,
set
session
's
session
timeouts
to
timeouts
.
Set
a
property
on
capabilities
with
name
"
timeouts
"
and
value
serialize
the
timeouts
configuration
with
session
's
session
timeouts
.
Process any extension capabilities in capabilities in an implementation-defined manner.
Run any WebDriver new session algorithm defined in external specifications, with arguments session , capabilities , and flags .
Append session to active sessions .
If
flags
contains
"
http
",
append
session
to
active
HTTP
sessions
.
Set the webdriver-active flag to true.
To close the session , given session a remote end must take the following steps:
If session 's HTTP flag is set, remove session from active HTTP sessions .
Remove session from active sessions .
Perform the following substeps based on the remote end 's type:
If the list of active sessions is empty:
Set the webdriver-active flag to false
Set the user prompt handler to null.
Unset the accept insecure TLS flag.
Reset the has proxy configuration flag to its default value.
Optionally, close all top-level browsing contexts , without prompting to unload .
Close the associated session . If this causes an error to occur, complete the remainder of this algorithm before returning the error .
Perform any implementation-specific cleanup steps.
If
an
error
has
occurred
in
any
of
the
steps
above,
return
the
error
,
otherwise
return
success
with
data
null
.
Closing a session might cause the associated browser process to be killed. It is assumed that any implementation-specific cleanup steps are performed after the response has been sent back to the client so that the connection is not prematurely closed.
HTTP Method | URI Template |
---|---|
POST | /session |
The New Session command creates a new WebDriver session with the endpoint node . If the creation fails, a session not created error is returned.
If the remote end is an intermediary node , it may use the result of the capabilities processing algorithm to route the new session request to the appropriate endpoint node . An intermediary node is free to define extension capabilities to assist in this process, however, these specific capabilities must not be forwarded to the endpoint node .
If the intermediary node requires additional information unrelated to user agent features, it is recommended that this information be passed as top-level parameters, and not as part of the requested capabilities . An intermediary node must forward custom, top-level parameters (i.e. non- capabilities ) to subsequent remote end nodes.
The remote end steps , given session , URL variables and parameters are:
If the implementation is an endpoint node , and the list of active HTTP sessions is not empty, or otherwise if the implementation is unable to start an additional session, return error with error code session not created .
If the remote end is an intermediary node , take implementation-defined steps that either result in returning an error with error code session not created , or in returning a success with data that is isomorphic to that returned by remote ends according to the rest of this algorithm. If an error is not returned, the intermediary node must retain a reference to the session created on the upstream node as the associated session such that commands may be forwarded to this associated session on subsequent commands.
How
this
is
done
is
entirely
up
to
the
implementation,
but
typically
the
sessionId
,
and
URL
and
URL
prefix
of
the
upstream
remote
end
will
need
to
be
tracked.
Let
flags
be
a
set
containing
"
http
".
Let capabilities be the result of trying to process capabilities with parameters and flags .
If
capabilities
's
is
null
,
return
error
with
error
code
session
not
created
.
Let session be the result of create a session , with capabilities , and flags .
Let body be a JSON Object initialized with:
sessionId
"
capabilities
"
Set session ' current top-level browsing context to one of the endpoint node 's top-level browsing context s, preferring the top-level browsing context that has system focus , or otherwise preferring any top-level browsing context whose visibility state is visible .
WebDriver implementations typically start a completely new browser instance, but there is no requirement in this specification (or for WebDriver only to be used to automate only web browsers). Implementations might choose to use an existing browser instance, eg. by selecting the window that currently has focus.
Set the request queue to a new queue .
Return success with data body .
HTTP Method | URI Template |
---|---|
DELETE | /session/{ session id } |
The remote end steps , given session , URL variables and parameters are:
If session is an active HTTP session , try to close the session with session .
HTTP Method | URI Template |
---|---|
GET | /status |
Implementations
may
optionally
include
additional
meta
information
as
part
of
the
body,
but
the
top-level
properties
ready
and
message
are
reserved
and
must
not
be
overwritten.
The remote end steps , given session , URL variables and parameters are:
Let body be a new JSON Object with the following properties:
ready
"
The remote end 's readiness state .
message
"
An implementation-defined string explaining the remote end 's readiness state .
Return success with data body .
A timer is a struct . It has a timeout fired flag , which is a boolean, initially false.
To start the timer given timer and timeout
Assert: timeout is not null.
Run the following steps in parallel :
Wait for at least timeout milliseconds to pass.
Set timer 's timeout fired flag to true.
A timeouts configuration is a struct representing the timeouts for script evaluation , navigation , and element retrieval . It has a script timeout item which is an integer or null and is initially set to 30,000, a page load timeout item which is an integer or null and is initially set to 300,000, and an implicit wait timeout item which is an integer or null and is initially set to 0. To deserialize as timeouts configuration given timeouts :
Set timeouts to the result of converting a JSON-derived JavaScript value to an Infra value with timeouts .
Let configuration be a new timeouts configuration .
For each key → value in timeouts :
If
«"
script
",
"
pageLoad
",
"
implicit
"»
does
not
contain
key
,
then
continue.
If value is neither null nor a number greater than or equal to 0 and less than or equal to the maximum safe integer return error with error code invalid argument .
Run the substeps matching key :
script
"
Set configuration 's script timeout to value .
pageLoad
"
Set configuration 's page load timeout to value .
implicit
"
Set configuration 's implicit wait timeout to value .
Return success with data configuration .
Let serialized be an empty map .
Set
serialized
["
script
"]
to
timeouts
'
script
timeout
.
Set
serialized
["
pageLoad
"]
to
timeouts
'
page
load
timeout
.
Set
serialized
["
implicit
"]
to
timeouts
'
implicit
wait
timeout
.
Return convert an Infra value to a JSON-compatible JavaScript value with serialized .
HTTP Method | URI Template |
---|---|
GET | /session/{ session id }/timeouts |
The remote end steps , given session , URL variables and parameters are:
Let timeouts be serialize the timeouts configuration with session 's timeouts configuration
Return success with data timeouts .
HTTP Method | URI Template |
---|---|
POST | /session/{ session id }/timeouts |
The remote end steps , given session , URL variables and parameters are:
Let timeouts be the result of trying to deserialize as timeouts configuration with parameters .
Set session 's timeouts configuration to timeouts .
Many WebDriver commands happen in the context of either session 's current browsing context or current top-level browsing context . session 's current top-level browsing context is represented in the protocol by its associated window handle . When a top-level browsing context is selected using the Switch To Window command, a specific browsing context can be selected using the Switch to Frame command.
The
use
of
the
term
“window”
to
refer
to
a
top-level
browsing
context
is
legacy
and
doesn't
correspond
with
either
the
operating
system
notion
of
a
“window”
or
the
DOM
Window
object.
A browsing context is said to be no longer open if its navigable has been destroyed.
Each
browsing
context
has
an
associated
window
handle
which
uniquely
identifies
it.
This
must
be
a
String
and
must
not
be
"
current
".
A web frame is an abstraction used to identify a frame or iframe when it is transported via the protocol , between remote and local ends.
The
web
frame
identifier
is
the
string
constant
"
frame-075b-4da1-b6ba-e579c2d3230a
".
An ECMAScript Object represents a web frame if it has a web frame identifier own property .
A web window is an abstraction used to identify a window when it is transported via the protocol , between remote and local ends.
The
web
window
identifier
is
the
string
constant
"
window-fcc6-11e5-b4f8-330a88ab9d7f
".
An ECMAScript Object represents a web window if it has a web window identifier own property .
The
WindowProxy
reference
object
with
WindowProxy
object
window
is
given
by:
Let identifier be the web window identifier if the associated browsing context of window is a top-level browsing context .
Otherwise let it be the web frame identifier .
Return a JSON Object initialized with the following properties:
Associated window handle of the window 's browsing context .
To deserialize a web frame by a JSON Object object that represents a web frame :
If object has no own property web frame identifier , return error with error code invalid argument .
Let reference be the result of getting the web frame identifier property from object .
Let browsing context be the browsing context whose window handle is reference , or null if no such browsing context exists.
If browsing context is null or a top-level browsing context , return error with error code no such frame .
Return success with data browsing context 's associated window.
To deserialize a web window by a JSON Object object that represents a web window :
If object has no own property web window identifier , return error with error code invalid argument .
Let reference be the result of getting the web window identifier property from object .
Let browsing context be the browsing context whose window handle is reference , or null if no such browsing context exists.
If browsing context is null or not a top-level browsing context , return error with error code no such window .
Return success with data browsing context 's associated window.
When required to set the current browsing context given session and context , an implementation must follow the following steps:
Set session 's current browsing context to context .
Set the session 's current parent browsing context to the parent browsing context of context , if that context exists, or null otherwise.
When required to set the current top-level browsing context given session and context , an implementation must:
Assert: context is a top-level browsing context .
Set session 's current top-level browsing context to context .
Set the current browsing context with session and context .
In accordance with the focus section of the [ HTML ] specification, commands are unaffected by whether the operating system window has focus or not.
HTTP Method | URI Template |
---|---|
GET | /session/{ session id }/window |
The remote end steps , given session , URL variables and parameters are:
If session 's current top-level browsing context is no longer open , return error with error code no such window .
Return success with data being the window handle associated with session 's current top-level browsing context .
HTTP Method | URI Template |
---|---|
DELETE | /session/{ session id }/window |
The remote end steps , given session , URL variables and parameters are:
If session 's current top-level browsing context is no longer open , return error with error code no such window .
Try to handle any user prompts with session .
Close session 's current top-level browsing context .
If there are no more open top-level browsing contexts , then try to close the session .
HTTP Method | URI Template |
---|---|
POST | /session/{ session id }/window |
Switching window will select session 's current top-level browsing context used as the target for all subsequent commands . In a tabbed browser, this will typically make the tab containing the browsing context the selected tab.
The remote end steps , given session , URL variables and parameters are:
Let
handle
be
the
result
of
getting
the
property
"
handle
"
from
parameters
.
If handle is undefined , return error with error code invalid argument .
If there is an active user prompt , that prevents the focusing of another top-level browsing context , return error with error code unexpected alert open .
If handle is equal to the associated window handle for some top-level browsing context , let context be the that browsing context, and set the current top-level browsing context with session and context .
Otherwise, return error with error code no such window .
Update any implementation-specific state that would result from the user selecting session 's current browsing context for interaction, without altering OS-level focus.
HTTP Method | URI Template |
---|---|
GET | /session/{ session id }/window/handles |
The order in which the window handles are returned is arbitrary.
The remote end steps , given session , URL variables and parameters are:
Let handles be a List .
For each top-level browsing context in the remote end , push the associated window handle onto handles .
HTTP Method | URI Template |
---|---|
POST | /session/{ session id }/window/new |
Create a new top-level browsing context .
The remote end steps , given session , URL variables and parameters are:
If the implementation does not support creating new top-level browsing contexts, return error with error code unsupported operation .
If session 's current top-level browsing context is no longer open , return error with error code no such window .
Try to handle any user prompts with session .
Let
type
hint
be
the
result
of
getting
the
property
"
type
"
from
parameters
.
Create
a
new
top-level
browsing
context
by
running
the
window
open
steps
with
URL
set
to
"
about:blank
",
target
set
to
the
empty
string,
and
features
set
to
"
noopener
"
and
the
user
agent
configured
to
create
a
new
browsing
context.
This
must
be
done
without
invoking
the
focusing
steps
for
the
created
browsing
context.
If
type
hint
has
the
value
"
tab
",
and
the
implementation
supports
multiple
browsing
context
in
the
same
OS
window,
the
new
browsing
context
should
share
an
OS
window
with
session
's
current
browsing
context
.
If
type
hint
is
"
window
",
and
the
implementation
supports
multiple
browsing
contexts
in
separate
OS
windows,
the
created
browsing
context
should
be
in
a
new
OS
window.
In
all
other
cases
the
details
of
how
the
browsing
context
is
presented
to
the
user
are
implementation
defined.
Let handle be the associated window handle of the newly created window.
Let
type
be
"
tab
"
if
the
newly
created
window
shares
an
OS-level
window
with
session
's
current
browsing
context
,
or
"
window
"
otherwise.
Let result be a new JSON Object initialized with:
handle
"
type
"
Return success with data result .
HTTP Method | URI Template |
---|---|
POST | /session/{ session id }/frame |
The Switch To Frame command is used to select session 's current top-level browsing context or a child browsing context of session 's current browsing context to use as session 's current browsing context for subsequent commands . The remote end steps , given session , URL variables and parameters are:
Let
id
be
the
result
of
getting
the
property
"
id
"
from
parameters
.
If
id
is
not
null
,
a
Number
object,
or
an
Object
that
represents
a
web
element
,
return
error
with
error
code
invalid
argument
.
Run the substeps of the first matching condition:
null
If session 's current top-level browsing context is no longer open , return error with error code no such window .
Try to handle any user prompts with session .
Set the current browsing context with session and session 's current top-level browsing context .
Number
object
If id is less than 0 or greater than 2 16 – 1, return error with error code invalid argument .
If session 's current browsing context is no longer open , return error with error code no such window .
Try to handle any user prompts with session .
Let window be the associated window of session 's current browsing context 's active document .
If id is not a supported property index of window , return error with error code no such frame .
Let
child
window
be
the
WindowProxy
object
obtained
by
calling
window
.
[[GetOwnProperty]]
(
id
).
Set the current browsing context with session and child window 's browsing context .
If session 's current browsing context is no longer open , return error with error code no such window .
Try to handle any user prompts with session .
Let element be the result of trying to get a known element with session and id .
If
element
is
not
a
frame
or
iframe
element,
return
error
with
error
code
no
such
frame
.
Set the current browsing context with session and element 's content navigable 's active browsing context .
Update any implementation-specific state that would result from the user selecting session 's current browsing context for interaction, without altering OS-level focus.
WebDriver is not bound by the same origin policy, so it is always possible to switch into child browsing contexts, even if they are different origin to the current browsing context.
HTTP Method | URI Template |
---|---|
POST | /session/{ session id }/frame/parent |
The Switch to Parent Frame command sets session 's current browsing context for future commands to the parent of session 's current browsing context .
The remote end steps , given session , URL variables and parameters are:
If session 's current browsing context is already the top-level browsing context :
If session 's current browsing context is no longer open , return error with error code no such window .
If session 's current parent browsing context is no longer open , return error with error code no such window .
Try to handle any user prompts with session .
If session 's current parent browsing context is not null , set the current browsing context with session and current parent browsing context .
Update any implementation-specific state that would result from the user selecting session 's current browsing context for interaction, without altering OS-level focus.
WebDriver provides commands for interacting with the operating system window containing session 's current top-level browsing context . Because different operating systems' window managers provide different abilities, not all of the commands in this section can be supported by all remote ends . Support for these commands is determined by the window dimensioning/positioning capability . Where a command is not supported, an unsupported operation error is returned.
The top-level browsing context has an associated window state which describes what visibility state its OS widget window is in. It can be in one of the following states:
State | Keyword | Default | Description |
---|---|---|---|
Maximized window state |
"
maximized
"
| The window is maximized. | |
Minimized window state |
"
minimized
"
| The window is iconified. | |
Normal window state |
"
normal
"
| ✓ | The window is shown normally. |
Fullscreen window state |
"
fullscreen
"
| The window is in full screen mode. |
If for whatever reason the top-level browsing context 's OS window cannot enter either of the window states , or if this concept is not applicable on the current system, the default state must be normal .
The WindowRect object for a WindowProxy , window is an Object initialized with the following properties:
x
"
window 's screenX attribute.
y
"
window 's screenY attribute.
width
"
windows 's outerWidth attribute.
height
"
window 's outerHeight attribute.
To maximize the window , given an operating system level window with an associated top-level browsing context , run the implementation-specific steps to transition the operating system level window into the maximized window state . If the window manager supports window resizing but does not have a concept of window maximization, the window dimensions must be increased to the maximum available size permitted by the window manager for the current screen. Return when the window has completed the transition, or within an implementation-defined timeout.
To iconify the window , given an operating system level window with an associated top-level browsing context , run implementation-specific steps to transition the operating system level window into the minimized window state . Do not return from this operation until the visibility state of the top-level browsing context 's active document has reached the state, or until the operation times out.
To restore the window , given an operating system level window with an associated top-level browsing context , run implementation-specific steps to restore or unhide the window to the visible screen. Do not return from this operation until the visibility state of the top-level browsing context 's active document has reached the visible state, or until the operation times out.
HTTP Method | URI Template |
---|---|
GET | /session/{session id}/window/rect |
The Get Window Rect command returns the size and position on the screen of the operating system window corresponding to session 's current top-level browsing context .
The remote end steps , given session , URL variables and parameters are:
If session 's current top-level browsing context is no longer open , return error with error code no such window .
Try to handle any user prompts with session .
Return success with data set to the WindowRect object for the session 's current top-level browsing context .
HTTP Method | URI Template |
---|---|
POST | /session/{ session id }/window/rect |
The Set Window Rect command alters the size and the position of the operating system window corresponding to session 's current top-level browsing context .
The remote end steps , given session , URL variables and parameters are:
Let
width
be
the
result
of
getting
a
property
named
"
width
"
from
parameters
,
else
let
it
be
null
.
Let
height
be
the
result
of
getting
a
property
named
"
height
"
from
parameters
,
else
let
it
be
null
.
Let
x
be
the
result
of
getting
a
property
named
"
x
"
from
parameters
,
else
let
it
be
null
.
Let
y
be
the
result
of
getting
a
property
named
"
y
"
from
parameters
,
else
let
it
be
null
.
If
width
or
height
is
neither
null
nor
a
Number
from
0
to
2
31
−
1,
return
error
with
error
code
invalid
argument
.
If
x
or
y
is
neither
null
nor
a
Number
from
−(2
31
)
to
2
31
−
1,
return
error
with
error
code
invalid
argument
.
If the remote end does not support the Set Window Rect command for session 's current top-level browsing context for any reason, return error with error code unsupported operation .
If session 's current top-level browsing context is no longer open , return error with error code no such window .
Try to handle any user prompts with session .
If
width
and
height
are
not
null
:
Set the width, in CSS pixels , of the operating system window containing session 's current top-level browsing context , including any browser chrome and externally drawn window decorations to a value that is as close as possible to width .
Set the height, in CSS pixels , of the operating system window containing session 's current top-level browsing context , including any browser chrome and externally drawn window decorations to a value that is as close as possible to height .
If
x
and
y
are
not
null
:
Run the implementation-specific steps to set the position of the operating system level window containing session 's current top-level browsing context to the position given by the x and y coordinates.
Return success with data set to the WindowRect object for the session 's current top-level browsing context .
HTTP Method | URI Template |
---|---|
POST | /session/{ session id }/window/maximize |
The Maximize Window command invokes the window manager-specific “maximize” operation, if any, on the window containing session 's current top-level browsing context . This typically increases the window to the maximum available size without going full-screen.
The remote end steps , given session , URL variables and parameters are:
If the remote end does not support the Maximize Window command for session 's current top-level browsing context for any reason, return error with error code unsupported operation .
If session 's current top-level browsing context is no longer open , return error with error code no such window .
Try to handle any user prompts with session .
Maximize the window of session 's current top-level browsing context .
Return success with data set to the WindowRect object for the session 's current top-level browsing context .
HTTP Method | URI Template |
---|---|
POST | /session/{ session id }/window/minimize |
The Minimize Window command invokes the window manager-specific “minimize” operation, if any, on the window containing session 's current top-level browsing context . This typically hides the window in the system tray.
The remote end steps , given session , URL variables and parameters are:
If the remote end does not support the Minimize Window command for session 's current top-level browsing context for any reason, return error with error code unsupported operation .
If session 's current top-level browsing context is no longer open , return error with error code no such window .
Try to handle any user prompts with session .
Return success with data set to the WindowRect object for the session 's current top-level browsing context .
HTTP Method | URI Template |
---|---|
POST | /session/{ session id }/window/fullscreen |
The remote end steps , given session , URL variables and parameters are:
If the remote end does not support fullscreen return error with error code unsupported operation .
If session 's current top-level browsing context is no longer open , return error with error code no such window .
Try to handle any user prompts with session .
Call fullscreen an element with session 's current top-level browsing context 's active document 's document element .
The window is now in the Fullscreen window state .
Return success with data set to the WindowRect object for the session 's current top-level browsing context .
A web element is an abstraction used to identify an element when it is transported via the protocol , between remote and local ends.
The
web
element
identifier
is
the
string
constant
"
element-6066-11e4-a52e-4f735466cecf
".
An ECMAScript Object represents a web element if it has a web element identifier own property .
The WebDriver node id is a globally unique string representing a handle to a DOM node in a specific WebDriver session .
A weak map is a map in which keys are held weakly i.e. items are removed if the key object is garbaged collected, and presence in the map does not prevent garbage collection. This acts as an alternative to defining properties directly on the key objects.
Unlike the ECMAScript WeakMap , a weak map can participate in the full set of operations available for a Map.
A WebDriver session has a browsing context group node map , which is a weak map between a browsing context group and a node id map .
A node id map is weak map between nodes and their corresponding WebDriver node id .
A WebDriver session has a navigable seen nodes map which is a weak map between a navigable and a set.
To get a node given session , browsing context , and reference :
To get or create a node reference given session , browsing context , and node :
Return node id map [ node ].
A node reference is known given session , browsing context , and reference if the following steps return true:
To get a known element given session and reference :
Element
return
error
with
error
code
no
such
element
.
To get or create a web element reference given session and element :
Element
.
The web element reference object for session and element is:
Let identifier be the web element identifier .
Let reference be the result of get or create a web element reference with session and element .
Return a JSON Object initialized with a property with name identifier and value reference .
To deserialize a web element by a JSON Object object that represents a web element :
If object has no own property web element identifier , return error with error code invalid argument .
Let reference be the result of getting the web element identifier property from object .
Let element be the result of trying to get a known element with session and reference .
Return success with data element .
An element is stale if its node document is not the active document or if it is not connected .
To scroll into view an element perform the following steps only if the element is not already in view :
Let
options
be
the
following
ScrollIntoViewOptions
:
block
"
end
"
inline
"
nearest
"
Run Function.[[Call]] ( scrollIntoView , options ) with element as the this value.
Editable elements are those that can be used for typing and clearing , and they fall into two subcategories:
Denotes
input
elements
that
are
mutable
(e.g.
that
are
not
read
only
or
disabled
)
and
whose
type
attribute
is
in
one
of
the
following
states:
And
the
textarea
element.
Denotes elements that are editing hosts or content editable .
An
element
is
said
to
have
pointer
events
disabled
if
the
resolved
value
of
its
"
pointer-events
"
style
property
is
"
none
".
An
element
is
to
be
considered
read
only
if
it
is
an
input
element
whose
readonly
attribute
is
set.
In order to determine if an element can be interacted with using pointer actions, WebDriver performs hit-testing to find if the interaction will be able to reach the requested element.
An interactable element is an element which is either pointer-interactable or keyboard-interactable .
A pointer-interactable element is defined to be the first element , defined by the paint order found at the center point of its rectangle that is inside the viewport , excluding the size of any rendered scrollbars.
A
keyboard-interactable
element
is
any
element
that
has
a
focusable
area
,
is
a
body
element,
or
is
the
document
element
.
An
element
's
in-view
center
point
is
the
origin
position
of
the
rectangle
that
is
the
intersection
between
the
element's
first
DOMRect
of
getClientRects
()
and
the
initial
viewport
.
Given
an
element
that
is
known
to
be
in
view
,
it
can
be
calculated
this
way:
Let
rectangle
be
the
first
element
of
the
DOMRect
sequence
returned
by
calling
getClientRects
()
on
element
.
Let left be max (0, min ( x coordinate , x coordinate + width dimension )).
Let right be min ( innerWidth , max ( x coordinate , x coordinate + width dimension )).
Let top be max (0, min ( y coordinate , y coordinate + height dimension )).
Let bottom be min ( innerHeight , max ( y coordinate , y coordinate + height dimension )).
Let x be floor (( left + right ) ÷ 2.0).
Let y be floor (( top + bottom ) ÷ 2.0).
Return the pair of ( x , y ).
An element element is disabled if the following steps return true:
If element is an option element or element is an optgroup element:
For each inclusive ancestor ancestor of element :
If ancestor is an optgroup element or ancestor is a select element, and ancestor is actually disabled , return true.
Return false.
Return element is actually disabled .
An element is in view if it is a member of its own pointer-interactable paint tree , given the pretense that its pointer events are not disabled .
An element is obscured if the pointer-interactable paint tree at its center point is empty, or the first element in this tree is not an inclusive descendant of itself.
An element 's pointer-interactable paint tree is produced this way:
If element is not in the same tree as session 's current browsing context 's active document , return an empty sequence.
Let
rectangles
be
the
DOMRect
sequence
returned
by
calling
getClientRects
()
.
If rectangles has the length of 0, return an empty sequence.
Let center point be the in-view center point of the first indexed element in rectangles .
Return the elements from point given the coordinates center point .
A shadow root is an abstraction used to identify a shadow root when it is transported via the protocol , between remote and local ends.
The
shadow
root
identifier
is
the
string
constant
"
shadow-6066-11e4-a52e-4f735466cecf
".
An ECMAScript Object represents a shadow root if it has a shadow root identifier own property .
To get a known shadow root given session and reference :
ShadowRoot
return
error
with
error
code
no
such
shadow
root
.
To get or create a shadow root reference given session and shadow root :
ShadowRoot
.
The shadow root reference object for session and shadow root is given by:
Let identifier be the shadow root identifier .
Let reference be the result of get or create a shadow root reference with session and shadow root .
Return a JSON Object initialized with a property with name identifier and value reference .
When required to deserialize a shadow root by a JSON Object object that represents a shadow root :
If object has no own property shadow root identifier , return error with error code invalid argument .
Let reference be the result of getting the shadow root identifier property from object .
Let shadow be the result of trying to get a known shadow root with session and reference .
Return success with data shadow .
A shadow root is detached if its node document is not the active document or if the element node referred to as its host is stale .
The Find Element , Find Elements , Find Element From Element , Find Elements From Element , Find Element From Shadow Root , and Find Elements From Shadow Root commands allow lookup of individual elements and collections of elements. Element retrieval searches are performed using pre-order traversal of the document's nodes that match the provided selector's expression.
When required to find given session , start node , using and value , a remote end must run the following steps:
Let location strategy be equal to using .
Let selector be equal to value .
Let timeout be session 's session timeouts ' implicit wait timeout .
Let timer be a new timer .
If timeout is not null:
Start the timer with timer and timeout .
Let elements returned be an empty List .
While elements returned is empty and timer 's timeout fired flag is not set:
Set elements returned to the result of trying to call the relevant element location strategy with arguments start node , and selector .
DOMException
,
SyntaxError
,
XPathException
,
or
other
error
occurs
during
the
execution
of
the
element
location
strategy
,
return
error
invalid
selector
.
Let result be an empty List .
For each element in elements returned , append the web element reference object for session and element , to result .
Return success with data result .
An element location strategy is an enumerated attribute deciding what technique should be used to search for elements in session 's current browsing context . The following table of location strategies lists the keywords and states defined for this attribute:
State | Keyword |
---|---|
CSS selector |
"
css
selector
"
|
Link text selector |
"
link
text
"
|
Partial link text selector |
"
partial
link
text
"
|
Tag name |
"
tag
name
"
|
XPath selector |
"
xpath
"
|
To find a web element with the CSS Selector strategy the following steps need to be completed:
Let
elements
be
the
result
of
calling
querySelectorAll
()
with
start
node
as
this
and
selector
as
the
argument.
If
this
causes
an
exception
to
be
thrown,
return
error
with
error
code
invalid
selector
.
Return success with data elements .
To find a web element with the Link Text strategy the following steps need to be completed:
Let
elements
be
the
result
of
calling
querySelectorAll
()
with
start
node
as
this
and
"
a
"
as
the
argument.
If
this
throws
an
exception,
return
error
with
error
code
unknown
error
.
Let
result
be
an
empty
NodeList
.
For each element in elements :
Let rendered text be the value that would be returned via a call to Get Element Text for element .
Let trimmed text be the result of removing all whitespace from the start and end of the string rendered text .
If trimmed text equals selector , append element to result .
Return success with data result .
The
Partial
link
text
strategy
is
very
similar
to
the
Link
Text
strategy
,
but
rather
than
matching
the
entire
string,
only
a
substring
needs
to
match.
That
is,
return
all
a
elements
with
rendered
text
that
contains
the
selector
expression.
To find a web element with the Partial Link Text strategy the following steps need to be completed:
Let
elements
be
the
result
of
calling
querySelectorAll
()
with
start
node
as
this
and
"
a
"
as
the
argument.
If
this
throws
an
exception,
return
error
with
error
code
unknown
error
.
Let
result
be
an
empty
NodeList
.
For each element in elements :
Let rendered text be the value that would be returned via a call to Get Element Text for element .
If rendered text contains selector , append element to result .
Return success with data result .
To
find
a
web
element
with
the
Tag
Name
strategy
return
success
with
data
set
to
the
result
of
calling
getElementsByTagName
()
with
start
node
as
this
and
selector
as
the
argument.
To find a web element with the XPath Selector strategy the following steps need to be completed:
Let
evaluateResult
be
the
result
of
calling
evaluate
,
with
arguments
selector
,
start
node
,
null
,
ORDERED_NODE_SNAPSHOT_TYPE
,
and
null
.
A snapshot is used to promote operation atomicity.
Let index be 0.
Let
length
be
the
result
of
getting
the
property
"
snapshotLength
"
from
evaluateResult
.
If
this
throws
an
XPathException
return
error
with
error
code
invalid
selector
,
otherwise
if
this
throws
any
other
exception
return
error
with
error
code
unknown
error
.
Let
result
be
an
empty
NodeList
.
Repeat, while index is less than length :
If node is not an element return an error with error code invalid selector .
Return success with data result .
HTTP Method | URI Template |
---|---|
POST | /session/{ session id }/element |
The remote end steps , given session , URL variables and parameters are:
Let
location
strategy
be
the
result
of
getting
a
property
named
"
using
"
from
parameters
.
If location strategy is not present as a keyword in the table of location strategies , return error with error code invalid argument .
Let
selector
be
the
result
of
getting
a
property
named
"
value
"
from
parameters
.
If selector is undefined , return error with error code invalid argument .
If session 's current browsing context is no longer open , return error with error code no such window .
Try to handle any user prompts with session .
Let start node be session 's current browsing context 's document element .
If
start
node
is
null
,
return
error
with
error
code
no
such
element
.
Let result be the result of trying to Find with session , start node , location strategy , and selector .
If result is empty, return error with error code no such element . Otherwise, return the first element of result .
HTTP Method | URI Template |
---|---|
POST | /session/{ session id }/elements |
The remote end steps , given session , URL variables and parameters are:
Let
location
strategy
be
the
result
of
getting
a
property
named
"
using
"
from
parameters
.
If location strategy is not present as a keyword in the table of location strategies , return error with error code invalid argument .
Let
selector
be
the
result
of
getting
a
property
named
"
value
"
from
parameters
.
If selector is undefined , return error with error code invalid argument .
If session 's current browsing context is no longer open , return error with error code no such window .
Try to handle any user prompts with session .
Let start node be session 's current browsing context 's document element .
If
start
node
is
null
,
return
error
with
error
code
no
such
element
.
HTTP Method | URI Template |
---|---|
POST | /session/{ session id }/element/{ element id }/element |
The remote end steps , given session , URL variables and parameters are:
Let
location
strategy
be
the
result
of
getting
a
property
named
"
using
"
from
parameters
.
If location strategy is not present as a keyword in the table of location strategies , return error with error code invalid argument .
Let
selector
be
the
result
of
getting
a
property
named
"
value
"
from
parameters
.
If selector is undefined , return error with error code invalid argument .
If session 's current browsing context is no longer open , return error with error code no such window .
Try to handle any user prompts with session .
Let
start
node
be
the
result
of
trying
to
get
a
known
element
with
session
and
URL
variables
["
element
id
"].
If result is empty, return error with error code no such element . Otherwise, return the first element of result .
HTTP Method | URI Template |
---|---|
POST | /session/{ session id }/element/{ element id }/elements |
The remote end steps , given session , URL variables and parameters are:
Let
location
strategy
be
the
result
of
getting
a
property
named
"
using
"
from
parameters
.
If location strategy is not present as a keyword in the table of location strategies , return error with error code invalid argument .
Let
selector
be
the
result
of
getting
a
property
named
"
value
"
from
parameters
.
If selector is undefined , return error with error code invalid argument .
If session 's current browsing context is no longer open , return error with error code no such window .
Try to handle any user prompts with session .
Let
start
node
be
the
result
of
trying
to
get
a
known
element
with
session
and
URL
variables
["
element
id
"].
HTTP Method | URI Template |
---|---|
POST | /session/{ session id }/shadow/{ shadow id }/element |
The remote end steps , given session , URL variables and parameters are:
Let
location
strategy
be
the
result
of
getting
a
property
called
"
using
".
If location strategy is not present as a keyword in the table of location strategies , return error with error code invalid argument .
Let
selector
be
the
result
of
getting
a
property
called
"
value
".
If selector is undefined , return error with error code invalid argument .
If the ssession 's current browsing context is no longer open , return error with error code no such window .
Handle any user prompts and return its value if it is an error .
Let
start
node
be
the
result
of
trying
to
get
a
known
shadow
root
with
session
and
URL
variables
["
shadow
id
"].
If result is empty, return error with error code no such element . Otherwise, return the first element of result .
HTTP Method | URI Template |
---|---|
POST | /session/{ session id }/shadow/{ shadow id }/elements |
The remote end steps , given session , URL variables and parameters are:
Let
location
strategy
be
the
result
of
getting
a
property
called
"
using
".
If location strategy is not present as a keyword in the table of location strategies , return error with error code invalid argument .
Let
selector
be
the
result
of
getting
a
property
called
"
value
".
If selector is undefined , return error with error code invalid argument .
If session 's current browsing context is no longer open , return error with error code no such window .
Handle any user prompts and return its value if it is an error .
Let
start
node
be
the
result
of
trying
to
get
a
known
shadow
root
with
session
and
URL
variables
["
shadow
id
"].
HTTP Method | URI Template |
---|---|
GET | /session/{ session id }/element/active |
The remote end steps , given session , URL variables and parameters are:
If session 's current browsing context is no longer open , return error with error code no such window .
Try to handle any user prompts with session .
Let active element be the active element of session 's current browsing context 's document element .
If active element is a non-null element , return success with data set to web element reference object for session and active element .
Otherwise, return error with error code no such element .
HTTP Method | URI Template |
---|---|
GET | /session/{ session id }/element/{ element id }/shadow |
The remote end steps , given session , URL variables and parameters are:
If session 's current browsing context is no longer open , return error with error code no such window .
Handle any user prompts and return its value if it is an error .
Let element be the result of trying to get a known element with session and URL variables [ element id ].
Let shadow root be element 's shadow root .
If shadow root is null, return error with error code no such shadow root .
Let serialized be the shadow root reference object for session and shadow root .
Return success with data serialized .
To calculate the absolute position given session and element :
Let
rect
be
the
value
returned
by
calling
getBoundingClientRect
()
.
Let window be the associated window of session 's current top-level browsing context .
Let x be ( scrollX of window + rect 's x coordinate ).
Let y be ( scrollY of window + rect 's y coordinate ).
Return a pair of ( x , y ).
To determine if node is not in the same tree as another node , other , run the following substeps:
If the node 's node document is not other 's node document , return true.
Return
true
if
the
result
of
calling
the
node
's
compareDocumentPosition
()
with
other
as
argument
is
DOCUMENT_POSITION_DISCONNECTED
(1),
otherwise
return
false.
An element 's container is:
option
element
in
a
valid
element
context
optgroup
element
in
a
valid
element
context
The element 's element context , which is determined by:
Let
datalist
parent
be
the
first
datalist
element
reached
by
traversing
the
tree
in
reverse
order
from
element
,
or
undefined
if
the
root
of
the
tree
is
reached.
Let
select
parent
be
the
first
select
element
reached
by
traversing
the
tree
in
reverse
order
from
element
,
or
undefined
if
the
root
of
the
tree
is
reached.
If datalist parent is undefined , the element context is select parent . Otherwise, the element context is datalist parent .
option
element
in
an
invalid
element
context
The element does not have a container.
The container is the element itself.
HTTP Method | URI Template |
---|---|
GET | /session/{ session id }/element/{ element id }/selected |
The
Is
Element
Selected
command
determines
if
the
referenced
element
is
selected
or
not.
This
operation
only
makes
sense
on
input
elements
of
the
Checkbox
-
and
Radio
Button
states,
or
on
option
elements.
The remote end steps , given session , URL variables and parameters are:
If session 's current browsing context is no longer open , return error with error code no such window .
Try to handle any user prompts with session .
Let element be the result of trying to get a known element with session and URL variables [ element id ].
Let selected be the value corresponding to the first matching statement:
input
element
with
a
type
attribute
in
the
Checkbox
-
or
Radio
Button
state
The result of element 's checkedness .
option
element
The result of element 's selectedness .
Return success with data selected .
HTTP Method | URI Template |
---|---|
GET | /session/{ session id }/element/{ element id }/attribute/{ name } |
The remote end steps , given session , URL variables and parameters are:
If session 's current browsing context is no longer open , return error with error code no such window .
Try to handle any user prompts with session .
Let element be the result of trying to get a known element with session and URL variables ' element id.
Let
name
be
URL
variables
["
name
"].
"
true
"
(string)
if
the
element
hasAttribute
()
with
name
,
otherwise
null
.
The result of getting an attribute by name name .
Return success with data result .
Please
note
that
the
behavior
of
this
command
deviates
from
the
behavior
of
getAttribute
()
in
[
DOM
],
which
in
the
case
of
a
set
boolean
attribute
would
return
an
empty
string.
The
reason
this
command
returns
true
as
a
string
is
because
this
evaluates
to
true
in
most
dynamically
typed
programming
languages,
but
still
preserves
the
expected
type
information.
HTTP Method | URI Template |
---|---|
GET | /session/{ session id }/element/{ element id }/property/{ name } |
The remote end steps , given session , URL variables and parameters are:
If session 's current browsing context is no longer open , return error with error code no such window .
Try to handle any user prompts with session .
Let element be the result of trying to get a known element with session and URL variables ' element id.
Let
name
URL
variables
["
name
"].
Let property be the result of calling the Object.[[GetProperty]] ( name ) on element .
Let
result
be
the
value
of
property
if
not
undefined
,
or
null
.
Return success with data result .
HTTP Method | URI Template |
---|---|
GET | /session/{ session id }/element/{ element id }/css/{ property name } |
The remote end steps , given session , URL variables and parameters are:
If session 's current browsing context is no longer open , return error with error code no such window .
Try to handle any user prompts with session .
Let
element
be
the
result
of
trying
to
get
a
known
element
with
URL
variables
["
element
id
"].
Let computed value be the result of the first matching condition:
xml
"
property
name
"]
from
element
's
style
declarations.
HTTP Method | URI Template |
---|---|
GET | /session/{ session id }/element/{ element id }/text |
When
processing
text,
whitespace
is
defined
as
characters
from
the
Unicode
Character
Database
with
the
Unicode
character
property
"
WSpace=Y
"
or
"
WS
".
[
UAX44
]
The remote end steps , given session , URL variables and parameters are:
If session 's current browsing context is no longer open , return error with error code no such window .
Try to handle any user prompts with session .
Let element be the result of trying to get a known element with session and URL variables [ element id ].
Let
rendered
text
be
the
result
of
performing
implementation-specific
steps
whose
result
is
exactly
the
same
as
the
result
of
a
Function.[[Call]]
(
null
,
element
)
with
bot.dom.getVisibleText
as
the
this
value.
Return success with data rendered text .
HTTP Method | URI Template |
---|---|
GET | /session/{ session id }/element/{ element id }/name |
The remote end steps , given session , URL variables and parameters are:
If session 's current browsing context is no longer open , return error with error code no such window .
Try to handle any user prompts with session .
Let
element
be
the
result
of
trying
to
get
a
known
element
with
URL
variables
["
element
id
"].
Let
qualified
name
be
the
result
of
getting
element
's
tagName
IDL
attribute.
Return success with data qualified name .
HTTP Method | URI Template |
---|---|
GET | /session/{ session id }/element/{ element id }/rect |
The remote end steps , given session , URL variables and parameters are:
If session 's current browsing context is no longer open , return error with error code no such window .
Try to handle any user prompts with session .
Let
element
be
the
result
of
trying
to
get
a
known
element
with
session
and
URL
variables
["
element
id
"].
Let coordinates be calculate the absolute position with session and element .
Let rect be element 's bounding rectangle .
Let body be a new JSON Object initialized with:
x
"
y
"
width
"
height
"
Return success with data body .
HTTP Method | URI Template |
---|---|
GET | /session/{ session id }/element/{ element id }/enabled |
The remote end steps , given session , URL variables and parameters are:
If session 's current browsing context is no longer open , return error with error code no such window .
Try to handle any user prompts with session .
Let element be the result of trying to get a known element with session and URL variables [ element id ].
Let
enabled
be
a
boolean
initially
set
to
true
if
session
's
current
browsing
context
's
active
document
's
type
is
not
"
xml
".
Otherwise, let enabled to false and jump to the last step of this algorithm.
Set enabled to false if a form control is disabled .
Return success with data enabled .
HTTP Method | URI Template |
---|---|
GET | /session/{ session id }/element/{ element id }/computedrole |
The remote end steps , given session , URL variables and parameters are:
If session 's current browsing context is no longer open , return error with error code no such window .
Try to handle any user prompts with session .
Let
element
be
the
result
of
trying
to
get
a
known
element
with
URL
variables
["
element
id
"].
Let role be the result of computing the WAI-ARIA role of element .
Return success with data role .
HTTP Method | URI Template |
---|---|
GET | /session/{ session id }/element/{ element id }/computedlabel |
The remote end steps , given session , URL variables and parameters are:
If session 's current browsing context is no longer open , return error with error code no such window .
Try to handle any user prompts with session .
Let
element
be
the
result
of
trying
to
get
a
known
element
with
session
and
URL
variables
["
element
id
"].
Let label be the result of a Accessible Name and Description Computation for the Accessible Name of the element .
Return success with data label .
The element interaction commands provide a high-level instruction set for manipulating form controls. Unlike Actions , they will implicitly scroll elements into view and check that it is an interactable element .
Some
resettable
elements
define
their
own
clear
algorithm
.
Unlike
their
associated
reset
algorithms
,
changes
made
to
form
controls
as
part
of
these
algorithms
do
count
as
changes
caused
by
the
user
(and
thus,
e.g.
do
cause
input
events
to
fire).
When
the
clear
algorithm
is
invoked
for
an
element
that
does
not
define
its
own
clear
algorithm
,
its
reset
algorithm
must
be
invoked
instead.
The
clear
algorithm
for
input
elements
is
to
set
the
dirty
value
flag
and
dirty
checkedness
flag
back
to
false,
set
the
value
of
the
element
to
an
empty
string,
set
the
checkedness
of
the
element
to
true
if
the
element
has
a
checked
content
attribute
and
false
if
it
does
not,
empty
the
list
of
selected
files
,
and
then
invoke
the
value
sanitization
algorithm
iff
the
type
attribute's
current
state
defines
one.
The
clear
algorithm
for
textarea
elements
is
to
set
the
dirty
value
flag
back
to
false,
and
set
the
raw
value
of
element
to
an
empty
string.
The
clear
algorithm
for
output
elements
is
set
the
element's
value
mode
flag
to
default
and
then
to
set
the
element's
textContent
IDL
attribute
to
an
empty
string
(thus
clearing
the
element's
child
nodes).
HTTP Method | URI Template |
---|---|
POST | /session/{ session id }/element/{ element id }/click |
The remote end steps , given session , URL variables and parameters are:
If session 's current browsing context is no longer open , return error with error code no such window .
Try to handle any user prompts with session .
Let element be the result of trying to get a known element with session and element id .
If
the
element
is
an
input
element
in
the
file
upload
state
return
error
with
error
code
invalid
argument
.
Scroll into view the element 's container .
If element 's container is still not in view , return error with error code element not interactable .
If element 's container is obscured by another element , return error with error code element click intercepted .
Matching on element :
option
element
Let parent node be the element 's container .
Fire a mouseOver event at parent node .
Fire a mouseMove event at parent node .
Fire a mouseDown event at parent node .
Run the focusing steps on parent node .
If element is not disabled :
Let previous selectedness be equal to element selectedness .
If
element
's
container
has
the
multiple
attribute
,
toggle
the
element
's
selectedness
state
by
setting
it
to
the
opposite
value
of
its
current
selectedness
.
Otherwise, set the element 's selectedness state to true.
If
previous
selectedness
is
false,
fire
a
change
event
at
parent
node
.
Fire a mouseUp event at parent node .
Fire a click event at parent node .
Let input state be the result of get the input state given session and session 's current top-level browsing context .
Let actions options be a new actions options with the is element origin steps set to represents a web element , and the get element origin steps set to get a WebElement origin .
Let input id be a the result of generating a UUID .
Let
source
be
the
result
of
create
an
input
source
with
input
state
,
and
"
pointer
".
Add an input source with input state , input id and source .
Let click point be the element 's in-view center point .
Let
pointer
move
action
be
an
action
object
constructed
with
arguments
input
id
,
"
pointer
",
and
"
pointerMove
".
Set
a
property
x
to
0
on
pointer
move
action
.
Set
a
property
y
to
0
on
pointer
move
action
.
Set
a
property
origin
to
element
on
pointer
move
action
.
Let
pointer
down
action
be
an
action
object
constructed
with
arguments
input
id
,
"
pointer
",
and
"
pointerDown
".
Set
a
property
button
to
0
on
pointer
down
action
.
Let
pointer
up
action
be
an
action
object
constructed
with
arguments
input
id
,
"
pointer
",
and
"
pointerUp
"
as
arguments.
Set
a
property
button
to
0
on
pointer
up
action
.
Let actions be the list « pointer move action , pointer down action , pointer up action ».
Dispatch a list of actions with input state , actions , session 's current browsing context , and actions options .
Remove an input source with input state and input id .
Wait until the user agent event loop has spun enough times to process the DOM events generated by the previous step.
Perform implementation-defined steps to allow any navigations triggered by the click to start.
It is not always clear how long this will cause the algorithm to wait, and it is acknowledged that some implementations may have unavoidable race conditions. The intention is to allow a new attempt to navigate to begin so that the next step in the algorithm is meaningful. It is possible the click does not cause an attempt to navigate , in which case the implementation-defined steps can return immediately, and the next step will also return immediately.
Try to wait for navigation to complete with session .
Try to run the post-navigation checks .
HTTP Method | URI Template |
---|---|
POST | /session/{ session id }/element/{ element id }/clear |
To clear a content editable element :
If
element
's
innerHTML
IDL
attribute
is
an
empty
string
do
nothing
and
return.
Run the focusing steps for element .
Set
element
's
innerHTML
IDL
attribute
to
an
empty
string.
Run the unfocusing steps for the element .
To clear a resettable element :
Let empty be the result of the first matching condition:
input
element
whose
type
attribute
is
in
the
File
Upload
state
If element is a candidate for constraint validation it satisfies its constraints , and empty is true, abort these substeps.
Invoke the focusing steps for element .
Invoke the clear algorithm for element .
Invoke the unfocusing steps for the element .
The remote end steps , given session , URL variables and parameters are:
If session 's current browsing context is no longer open , return error with error code no such window .
Try to handle any user prompts with session .
Let element be the result of trying to get a known element with session and element id .
If element is not editable , return an error with error code invalid element state .
Scroll into view the element .
Let timeout be session 's session timeouts ' implicit wait timeout .
Let timer be a new timer .
If timeout is not null:
Start the timer with timer and timeout .
Wait for element to become interactable , or timer 's timeout fired flag to be set, whichever occurs first.
If element is not interactable , return error with error code element not interactable .
Run the substeps of the first matching statement:
Invoke the steps to clear a resettable element .
Invoke the steps to clear a content editable element .
Return error with error code invalid element state .
HTTP Method | URI Template |
---|---|
POST | /session/{ session id }/element/{ element id }/value |
The Element Send Keys command scrolls into view the form control element and then sends the provided keys to the element . In case the element is not keyboard-interactable , an element not interactable error is returned.
A
non-typeable
form
control
is
an
input
element
whose
type
attribute
state
causes
the
primary
input
mechanism
not
to
be
through
means
of
a
keyboard,
whether
virtual
or
physical.
Non-typeable
form
controls
means
to
refer
to
form
control
elements
rendered
by
the
user
agent
as
something
other
than
as
a
text
input
control.
When
targetting
an
input
element
in
the
color
state
being
presented
as
a
color
wheel,
interaction
with
it
will
be
simulated,
rather
than
typed
using
key
emulation
with
actions
.
Other
examples
of
non-typeable
form
controls
include
form
controls
interacted
with
via
system-native
widgets,
such
as
a
scrolled
option
list
for
select
elements
and
a
number
keypad
for
input
elements
in
the
number
state
on
non-desktop
devices.
The key input source used for input may be cleared mid-way through “typing” by sending the null key , which is U+E000 (NULL).
To clear the modifier key state given input state , input id , source , undo actions , and browsing context :
If source is not a key input source return error with error code invalid argument .
Let actions options be a new actions options with the is element origin steps set to represents a web element , and the get element origin steps set to get a WebElement origin .
For each entry key in the lexically sorted keys of undo actions :
Let action be the value of undo actions equal to the key entry key .
If
action
is
not
an
action
object
with
type
"
key
"
and
subtype
"
keyUp
",
return
error
with
error
code
invalid
argument
.
Let actions be the list « action »
Dispatch a list of actions with input state , actions , browsing context , and actions options .
An extended grapheme cluster is typeable if it consists of a single unicode code point and the code is not undefined .
The
shifted
state
for
keyboard
is
the
value
of
keyboard
's
shift
property.
To dispatch the events for a typeable string given input state , input id , source , text , and browsing context :
Let actions options be a new actions options with the is element origin steps set to represents a web element , and the get element origin steps set to get a WebElement origin .
Let global key state be the result of get the global key state with input state .
If char is a shifted character , and the shifted state of source is false:
Let
action
be
an
action
object
constructed
with
input
id
,
"
key
",
and
"
keyDown
",
and
set
its
value
property
to
U+E008
("left
shift").
Let actions be the list « action ».
Dispatch a list of actions with input state , actions , and browsing context .
If char is not a shifted character and the shifted state of source is true:
Let
action
be
an
action
object
constructed
with
input
id
,
"
key
",
and
"
keyUp
",
and
set
its
value
property
to
U+E008
("left
shift").
Let tick actions be the list « action ».
Dispatch a list of actions with input state , actions , browsing context , and actions options .
Let
keydown
action
be
an
action
object
constructed
with
arguments
input
id
,
"
key
",
and
"
keyDown
".
Set
the
value
property
of
keydown
action
to
char
.
Let
keyup
action
be
a
copy
of
keydown
action
with
the
subtype
property
changed
to
"
keyUp
".
Let actions be the list « keydown action , keyup action ».
Dispatch a list of actions with input state , actions , browsing context , and actions options .
When required to dispatch a composition event given type and cluster , and browsing context , the remote end must perform implementation-specific action dispatch steps on browsing context equivalent to sending composition events in accordance with the requirements of [ UI-EVENTS ], and producing the following event with the specified properties.
composition
event
with
properties:
Attribute | Value |
---|---|
type
|
type |
data
|
cluster |
To dispatch actions for a string given input state , input id , source , text , browsing context , and actions options :
Let clusters be an array created by breaking text into extended grapheme clusters .
Let undo actions be an empty map.
Let current typeable text be an empty list.
For each cluster corresponding to an indexed property in clusters run the substeps of the first matching statement:
Dispatch the events for a typeable string with input state , input id , source , current typeable text , and browsing context . Empty current typeable text .
Try to clear the modifier key state with input state , input id , source , undo actions and browsing context .
Clear undo actions .
Dispatch the events for a typeable string with input state , input id , source , current typeable text , and browsing context .
Empty current typeable text .
Let
keydown
action
be
an
action
object
constructed
with
arguments
input
id
,
"
key
",
and
"
keyDown
".
Set
the
value
property
of
keydown
action
to
cluster
.
Let actions be the list « keydown action »
Dispatch a list of actions with input state , actions , browsing context , and actions options .
Add
an
entry
to
undo
actions
with
key
cluster
and
value
being
a
copy
of
keydown
action
with
the
subtype
property
modified
to
"
keyUp
".
Append cluster to current typeable text .
Dispatch the events for a typeable string with input state , input id , source , current typeable text , and browsing context .
Empty current typeable text .
Dispatch
a
composition
event
with
arguments
"
compositionstart
",
undefined
,
and
browsing
context
.
Dispatch
a
composition
event
with
arguments
"
compositionupdate
",
cluster
,
and
browsing
context
.
Dispatch
a
composition
event
with
arguments
"
compositionend
",
cluster
,
and
browsing
context
.
Dispatch the events for a typeable string with input state , input id and source , current typeable text , and browsing context .
Try to clear the modifier key state with input state , input id , source , undo actions , and browsing context .
The remote end steps , given session , URL variables and parameters are:
Let
text
be
the
result
of
getting
a
property
named
"
text
"
from
parameters
.
If text is not a String , return an error with error code invalid argument .
If session 's current browsing context is no longer open , return error with error code no such window .
Try to handle any user prompts with session .
Let element be the result of trying to get a known element with session and URL variables [ element id ].
Let
file
be
true
if
element
is
input
element
in
the
file
upload
state
,
or
false
otherwise.
If file is false or the session 's strict file interactability , is true run the following substeps:
Scroll into view the element .
Let timeout be session 's session timeouts ' implicit wait timeout .
Let timer be a new timer .
If timeout is not null:
Start the timer with timer and timeout .
Wait for element to become keyboard-interactable , or timer 's timeout fired flag to be set, whichever occurs first.
If element is not keyboard-interactable , return error with error code element not interactable .
If element is not the active element run the focusing steps for the element .
Run the substeps of the first matching condition:
Let
files
be
the
result
of
splitting
text
on
the
newline
(
\n
)
character.
If files is of 0 length, return an error with error code invalid argument .
Let
multiple
equal
the
result
of
calling
hasAttribute
()
with
"multiple"
on
element
.
if
multiple
is
false
and
the
length
of
files
is
not
equal
to
1,
return
an
error
with
error
code
invalid
argument
.
Verify that each file given by the user exists. If any do not, return error with error code invalid argument .
Complete
implementation
specific
steps
equivalent
to
setting
the
selected
files
on
the
input
element.
If
multiple
is
true
files
are
be
appended
to
element
's
selected
files
.
Fire these events in order on element :
If
element
does
not
have
an
own
property
named
value
return
an
error
with
error
code
element
not
interactable
If element is not mutable return an error with error code element not interactable .
Set
a
property
value
to
text
on
element
.
If element is suffering from bad input return an error with error code invalid argument .
If element does not currently have focus, let current text length be the length of element 's API value .
Set
the
text
insertion
caret
using
set
selection
range
using
current
text
length
for
both
the
start
and
end
parameters.
Let input state be the result of get the input state with session and session 's current top-level browsing context .
Let input id be a the result of generating a UUID .
Let
source
be
the
result
of
create
an
input
source
with
input
state
,
and
"
key
".
Add an input source with input state , input id and source .
Dispatch actions for a string with arguments input state , input id , and source , text , and session 's current browsing context .
Remove an input source with input state and input id .
HTTP Method | URI Template |
---|---|
GET | /session/{ session id }/source |
The Get Page Source command returns a string serialization of the DOM of session 's current browsing context active document .
The remote end steps , given session , URL variables and parameters are:
If session 's current browsing context is no longer open , return error with error code no such window .
Try to handle any user prompts with session .
Let
source
be
the
result
of
invoking
the
fragment
serializing
algorithm
on
a
fictional
node
whose
only
child
is
the
document
element
providing
true
for
the
require
well-formed
flag.
If
this
causes
an
exception
to
be
thrown,
let
source
be
null
.
Let
source
be
the
result
of
serializing
to
string
session
's
current
browsing
context
's
active
document
,
if
source
is
null
.
Return success with data source .
A collection is an Object that implements the Iterable interface, and whose:
toString
own
property
is
"
Arguments
"
Array
DOMTokenList
FileList
HTMLAllCollection
HTMLCollection
HTMLFormControlsCollection
HTMLOptionsCollection
NodeList
To JSON deserialize given session , value and optional argument seen , a remote end must run the following steps:
If seen is not provided, let seen be an empty List .
Jump to the first appropriate step below:
Matching on value :
null
Return success with data value .
Return the deserialized web element of value .
Return the deserialized shadow root of value .
Return the deserialized web frame of value .
Return the deserialized web window of value .
Return clone an object algorithm with session , value and seen , and the JSON deserialize algorithm as the clone algorithm.
To JSON clone given session and value , return the result of internal JSON clone with session , value and an empty List .
To internal JSON clone given session , value and seen , return the value of the first matching statement, matching on value :
null
Return success with data value .
Element
If the element is stale , return error with error code stale element reference .
Otherwise:
Let reference be the web element reference object for session and value .
Return success with data reference .
ShadowRoot
If the shadow root is detached , return error with error code detached shadow root .
Otherwise:
Let reference be the shadow root reference object for session and value .
Return success with data reference .
WindowProxy
object
If
the
associated
browsing
context
of
the
WindowProxy
object
in
value
has
been
destroyed,
return
error
with
error
code
stale
element
reference
.
Otherwise:
Let
reference
be
the
WindowProxy
reference
object
for
value
.
Return success with data reference .
toJSON
"
that
is
a
Function
toJSON
)
with
value
as
the
this
value.
Let result be clone an object with session value and seen , and internal JSON clone as the clone algorithm .
To clone an object , given session , value , seen , and clone algorithm :
If value is in seen , return error with error code javascript error .
Append value to seen .
Let result be the value of the first matching statement, matching on value :
A
new
Array
which
length
property
is
equal
to
the
result
of
getting
the
property
length
of
value
.
A new Object .
For each enumerable property in value , run the following substeps:
Let name be the name of the property.
Let source property value be the result of getting a property named name from value . If doing so causes script to be run and that script throws an error, return error with error code javascript error .
Let cloned property result be the result of calling the clone algorithm with session , source property value and seen .
If cloned property result is a success , set a property of result with name name and value equal to cloned property result 's data.
Otherwise, return cloned property result .
Remove the last element of seen .
When required to extract the script arguments from a request with argument parameters the implementation must:
Let
script
be
the
result
of
getting
a
property
named
"
script
"
from
parameters
.
If script is not a String , return error with error code invalid argument .
Let
args
be
the
result
of
getting
a
property
named
"
args
"
from
parameters
.
If args is not an Array return error with error code invalid argument .
Let arguments be JSON deserialize with session and args .
Return success with data script and arguments .
The rules to execute a function body are as follows. The algorithm returns an ECMAScript completion record .
If
at
any
point
during
the
algorithm
a
user
prompt
appears,
immediately
return
Completion
{
[[Type]]:
normal
,
[[Value]]:
null
,
[[Target]]:
empty
},
but
continue
to
run
the
other
steps
of
this
algorithm
in
parallel
.
Let window be the associated window of session 's current browsing context 's active document .
Let environment settings be window 's relevant settings object .
If
body
is
not
parsable
as
a
FunctionBody
or
if
parsing
detects
an
early
error
,
return
Completion
{
[[Type]]:
normal
,
[[Value]]:
null
,
[[Target]]:
empty
}.
If body begins with a directive prologue that contains a use strict directive then let strict be true, otherwise let strict be false.
Prepare to run script with environment settings .
Prepare to run a callback with environment settings .
Let function be the result of calling FunctionCreate , with arguments:
Let completion be Function.[[Call]] ( window , parameters ) with function as the this value.
Clean up after running a callback with environment settings .
Clean up after running script with environment settings .
Return completion .
The above algorithm is not associated with any particular element, and is therefore not subject to the document CSP directives .
HTTP Method | URI Template |
---|---|
POST | /session/{ session id }/execute/sync |
The remote end steps , given session , URL variables and parameters are:
Let body and arguments be the result of trying to extract the script arguments from a request with argument parameters .
If session 's current browsing context is no longer open , return error with error code no such window .
Try to handle any user prompts with session .
Let timeout be session 's session timeouts ' script timeout .
Let timer be a new timer .
If timeout is not null:
Start the timer with timer and timeout .
Let promise be a new Promise .
Run the following substeps in parallel :
Let scriptPromise be the result of promise-calling execute a function body , with arguments body and arguments .
Upon fulfillment of scriptPromise with value v , resolve promise with value v .
Upon rejection of scriptPromise with value r , reject promise with value r .
Wait until promise is resolved, or timer 's timeout fired flag is set, whichever occurs first.
If promise is still pending and timer 's timeout fired flag is set, return error with error code script timeout .
If promise is fulfilled with value v , let result be JSON clone with session and v , and return success with data result .
If promise is rejected with reason r , let result be JSON clone with session and r , and return error with error code javascript error and data result .
HTTP Method | URI Template |
---|---|
POST | /session/{ session id }/execute/async |
The Execute Async Script command causes JavaScript to execute as an anonymous function. An additional value is provided as the final argument to the function. This is a function that may be invoked to signal the completion of the asynchronous operation. The first argument provided to the function will be serialized to JSON and returned by Execute Async Script .
The remote end steps , given session , URL variables and parameters are:
Let body and arguments by the result of trying to extract the script arguments from a request with argument parameters .
If session 's current browsing context is no longer open , return error with error code no such window .
Try to handle any user prompts with session .
Let timeout be session 's session timeouts ' script timeout .
Let timer be a new timer .
If timeout is not null:
Start the timer with timer and timeout .
Let promise be a new Promise .
Run the following substeps in parallel :
Let resolvingFunctions be CreateResolvingFunctions ( promise ).
Append
resolvingFunctions
.[[Resolve]]
to
arguments
.
Let result be the result of calling execute a function body , with arguments body and arguments .
If
scriptResult
.[[Type]]
is
not
normal
,
then
reject
promise
with
value
scriptResult
.[[Value]],
and
abort
these
steps.
Prior revisions of this specification did not recognize the return value of the provided script. In order to preserve legacy behavior, the return value only influences the command if it is a "thenable" object or if determining this produces an exception.
If Type ( scriptResult .[[Value]]) is not Object , then abort these steps.
Let then be Get ( scriptResult .[[Value]], "then").
If
then
.[[Type]]
is
not
normal
,
then
reject
promise
with
value
then
.[[Value]],
and
abort
these
steps.
If
IsCallable
(
then
.[[Type]])
is
false
,
then
abort
these
steps.
Let scriptPromise be PromiseResolve ( Promise , scriptResult .[[Value]]).
Upon fulfillment of scriptPromise with value v , resolve promise with value v .
Upon rejection of scriptPromise with value r , reject promise with value r .
Wait until promise is resolved, or timer 's timeout fired flag is set, whichever occurs first.
If promise is still pending and timer 's timeout fired flag is set, return error with error code script timeout .
If promise is fulfilled with value v , let result be JSON clone with session and v , and return success with data result .
If promise is rejected with reason r , let result be JSON clone with session and r , and return error with error code javascript error and data result .
The Actions API provides a low-level interface for providing virtualized device input to the web browser. Conceptually, the Actions commands divide time into a series of ticks . The local end sends a series of actions which correspond to the change in state, if any, of each input device during each tick . For example, pressing a key is represented by an action sequence consisting of a single key input device and two ticks , the first containing a keyDown action, and the second a keyUp action, whereas a pinch-zoom input is represented by an action sequence consisting of three ticks and two pointer input devices of type touch, each performing a sequence of actions pointerDown , followed by pointerMove , and then pointerUp .
Configuration of actions dispatch is controlled by a actions options object. This is a struct that has a fields named is element origin , which is a set of steps that validate if a protocol object represents an element origin, and get element origin , which is a set of steps used to deserialize an element.
To get a WebElement origin given session , origin and browsing context :,
Assert: browsing context is the current browsing context .
Let element be equal to the result of trying to get a known element with session and origin .
Return success with data element .
An input source is a virtual device providing input events. Each input source is represented by an struct specific to the type of the input source. Each input source has an input id which is stored as a key in the input state map .
To create an input source given input state , type and optional subtype :
Run the substeps matching the first matching value of type :
none
"
key
"
pointer
"
wheel
"
A null input source is an input source that is not associated with a specific physical device. a null input source has no type-specific items, and supports the following actions:
Action | Non-normative Description |
---|---|
pause | Used with an integer argument to specify the duration of a tick , or as a placeholder to indicate that an input source does nothing during a particular tick . |
To create a null input source , return a new null input source .
A key input source is an input source that is associated with a keyboard-type device.
A key input source has the following items:
Item | Non-normative Description | Default Value |
---|---|---|
pressed | A set of strings representing currently pressed keys. | Empty set |
alt | A boolean indicating whether the alt modifier is depressed. | False |
ctrl | A boolean indicating whether the ctrl modifier is depressed. | False |
meta | A boolean indicating whether the meta modifier is depressed. | False |
shift | A boolean indicating whether the shift modifier is depressed. | False |
A key input source supports the same pause action as a null input source plus the following actions:
Action | Non-normative Description |
---|---|
keyDown | Used to indicate that a particular key should be held down. |
keyUp | Used to indicate that a depressed key should be released. |
To create a key input source , return a new key input source with the items initalized to their default values.
A pointer input source is an input source that is associated with a pointer-type input device.
A pointer input source has the following items:
Item | Non-normative Description | Default Value |
---|---|---|
subtype |
The
type
of
pointing
device.
This
can
be
"
mouse
",
"
pen
",
or
"
touch
".
| |
pointerId | The numeric id of the pointing device. This is a positive integer, with the values 0 and 1 reserved for mouse-type pointers. | |
pressed | A set of unsigned integers representing the pointer buttons that are currently depressed. | Empty set |
x | An unsigned integer representing the pointer x location in viewport coordinates. | 0 |
y | An unsigned integer representing the pointer y location in viewport coordinates. | 0 |
A pointer input source supports the same pause action as a null input source plus the following actions:
Action | Non-normative Description |
---|---|
pointerDown | Used to indicate that a pointer should be depressed in some way e.g. by holding a button down (for a mouse) or by coming into contact with the active surface (for a touch or pen device). |
pointerUp | Used to indicate that a pointer should be released in some way e.g. by releasing a mouse button or moving a pen or touch device away from the active surface. |
pointerMove | Used to indicate a location on the screen that a pointer should move to, either in its active (pressed) or inactive state. |
pointerCancel | Used to cancel a pointer action. |
To create a pointer input source object given input state , and subtype , return a new pointer input source with subtype set to subtype , pointerId set to get a pointer id with input state and subtype , and the other items set to their default values.
A wheel input source is an input source that is associated with a wheel-type input device. A wheel input source has no type specific items, and supports the same pause action as a null input source plus the following actions:
Action | Non-normative Description |
---|---|
scroll | Used to indicate that the scroll wheel is rolled down, up, right or left to scroll the page down, up, right or left. |
To create a wheel input source return a new wheel input source .
An input state represents the overall state of a collection of input sources . An input state has the following items:
A input state map which is a map where keys are input ids , and the values are input sources .
An input cancel list , which is a list of action objects . This list is used to manage dispatching events when resetting the state of the input source
An actions queue which is a queue that ensures that access to the input state is serialized.
To get the input state given session and browsing context :
Assert: browsing context is a top-level browsing context .
Let input state map be session 's browsing context input state map .
If input state map does not contain browsing context , set input state map [ browsing context ] to create an input state .
Return input state map [ browsing context ].
To reset the input state given session and browsing context :
Assert: browsing context is a top-level browsing context .
Let input state map be session 's browsing context input state map .
If input state map [ browsing context ] exists , then remove input state map [ browsing context ].
To create an input state :
Let input state be an input state with the input state map set to an empty map, and the input cancel list set to an empty list.
Return input state .
To add an input source given input state , input id , and source :
Let input state map be input state 's input state map .
To remove an input source given input state , and input id :
Assert: None of the items in input state 's input cancel list has id equal to input id .
Let input state map be input state 's input state map .
To get an input source given input state and input id :
Let input state map be input state 's input state map .
If input state map [ input id ] exists, return input state map [ input id ].
Return undefined.
To get or create an input source given input state , type , input id , and optional subtype :
Let source be get an input source with input state and input id .
If source is not undefined and source 's type is not equal to type , or source is a pointer input source , return error with error code invalid argument .
If source is undefined, set source to the result of trying to create an input source with input state and type .
Return success with data source .
A global key state is a struct with items pressed, altKey, ctrlKey, metaKey, and shiftKey.
To get the global key state given input state :
Let input state map be input state 's input state map .
Let sources be the result of getting the values with input state map .
Let
key
state
be
a
new
global
key
state
with
pressed
set
to
an
empty
set,
altKey
,
ctrlKey
,
metaKey
,
and
shiftKey
set
to
false.
For each source in sources :
If source is not a key input source , continue to the first step of this loop.
Set
key
state
's
pressed
item
to
the
union
of
its
current
value
and
source
's
pressed
item.
If
source
's
alt
item
is
true,
set
key
state
's
altKey
item
to
true.
If
source
's
ctrl
item
is
true,
set
key
state
's
ctrlKey
item
to
true.
If
source
's
meta
item
is
true,
set
key
state
's
metaKey
item
to
true.
If
source
's
shift
item
is
true,
set
key
state
's
shiftKey
item
to
true.
Return key state .
To get a pointer id given input state and subtype :
mouse
",
or
2
otherwise.
Let sources be the result of getting the values with input state 's input state map .
For each source in sources .:
If source is a pointer input source , append source 's pointerId to pointer ids .
Return the smallest integer that is greater than or equal to minimum id and that is not contained in pointer ids .
A tick is the basic unit of time over which actions can be performed. During a tick , each input source has an assigned action — possibly a noop pause action — which may result in changes to the user agent internal state and eventually cause DOM events to be fired at the page. The next tick begins after the user agent has had a chance to process all DOM events generated in the current tick .
Waiting asynchronously means waiting for something to occur whilst allowing the browser to continue processing the event loop .
At the lowest level, the behavior of actions is intended to mimic the remote end 's behavior with an actual input device as closely as possible, and the implementation strategy may involve e.g. injecting synthesized events into a browser event loop. Therefore the steps to dispatch an action will inevitably end up in implementation-specific territory. However there are certain content observable effects that must be consistent across implementations. To accommodate this, the specification requires that remote ends perform implementation-specific action dispatch steps on a browsing context context , and a list of events and their properties. These steps must be equivalent to performing the given input device manipulations on context , such that trusted events corresponding to the entries in list of events are dispatched.
The algorithm for extracting an action sequence from a request takes the JSON Object representing an action sequence, validates the input, and returns a data structure that is the transpose of the input JSON, such that the actions to be performed in a single tick are grouped together.
To get coordinates relative to an origin given source , x offset , y offset , origin , browsing context , and actions options :
Run the substeps of the first matching value of origin
viewport
"
Let x equal x offset and y equal y offset .
pointer
"
Let
start
x
be
equal
to
the
x
property
of
source
.
Let
start
y
be
equal
to
the
y
property
of
source
.
Let x equal start x + x offset and y equal start y + y offset .
Let element be the result of trying to run actions options ' get element origin steps with origin and browsing context .
If element is null, return error with error code no such element .
Let x element and y element be the result of calculating the in-view center point of element .
Let x equal x element + x offset , and y equal y element + y offset .
Return ( x , y )
To extract an action sequence given input state , parameters , and actions options :
Let
actions
be
the
result
of
getting
a
property
named
"
actions
"
from
parameters
.
If actions is undefined or is not an Array , return error with error code invalid argument .
Let actions by tick be an empty List .
For each value action sequence corresponding to an indexed property in actions :
Let source actions be the result of trying to process an input source action sequence given input state , action sequence , and actions options .
For each action in source actions :
Return success with data actions by tick .
When required to process an input source action sequence , given input state , action sequence , and actions options , a remote end must:
Let
type
be
the
result
of
getting
a
property
named
"
type
"
from
action
sequence
.
If
type
is
not
"
key
",
"
pointer
",
"
wheel
",
or
"
none
",
return
an
error
with
error
code
invalid
argument
.
Let
id
be
the
result
of
getting
the
property
"
id
"
from
action
sequence
.
If id is undefined or is not a String , return error with error code invalid argument .
If
type
is
equal
to
"
pointer
",
let
parameters
data
be
the
result
of
getting
the
property
"
parameters
"
from
action
sequence
.
Then
let
parameters
be
the
result
of
trying
to
process
pointer
parameters
with
argument
parameters
data
.
Let source be the result of trying to get or create an input source given input state , type and id .
If
parameters
is
not
undefined
,
then
if
its
pointerType
property
is
not
equal
to
source
's
subtype
property,
return
an
error
with
error
code
invalid
argument
.
Let
action
items
be
the
result
of
getting
a
property
named
"
actions
"
from
action
sequence
.
If action items is not an Array , return error with error code invalid argument .
Let actions be a new list.
For each action item in action items :
If action item is not an Object return error with error code invalid argument .
If
type
is
"
none
"
let
action
be
the
result
of
trying
to
process
a
null
action
with
parameters
id
,
and
action
item
.
Otherwise,
if
type
is
"
key
"
let
action
be
the
result
of
trying
to
process
a
key
action
with
parameters
id
,
and
action
item
.
Otherwise,
if
type
is
"
pointer
"
let
action
be
the
result
of
trying
to
process
a
pointer
action
with
parameters
id
,
parameters
,
action
item
,
and
actions
options
.
Otherwise,
if
type
is
"
wheel
"
let
action
be
the
result
of
trying
to
process
a
wheel
action
with
parameters
id
,
and
action
item
,
and
actions
options
.
Append action to actions .
Return success with data actions .
The
default
pointer
parameters
consist
of
an
object
with
property
pointerType
set
to
mouse
.
To process pointer parameters given parameters data :
Let parameters be the default pointer parameters .
If parameters data is undefined , return success with data parameters .
If parameters data is not an Object , return error with error code invalid argument .
Let
pointer
type
be
the
result
of
getting
a
property
named
"
pointerType
"
from
parameters
data
.
If pointer type is not undefined :
If
pointer
type
does
not
have
one
of
the
values
"
mouse
",
"
pen
",
or
"
touch
",
return
error
with
error
code
invalid
argument
.
Set
the
pointerType
property
of
parameters
to
pointer
type
.
Return success with data parameters .
An action object constructed with arguments id , type , and subtype is an object with property id set to id , type set to type and subtype set to subtype . Specific action objects have further properties added by other algorithms in this specification.
To process a null action given id and action item :
Let
subtype
be
the
result
of
getting
a
property
named
"
type
"
from
action
item
.
If
subtype
is
not
"
pause
",
return
error
with
error
code
invalid
argument
.
Let
action
be
an
action
object
constructed
with
arguments
id
,
"none"
,
and
subtype
.
Let result be the result of trying to process a pause action with arguments action item and action .
Return result .
To process a key action given id and action item :
Let
subtype
be
the
result
of
getting
a
property
named
"
type
"
from
action
item
.
If
subtype
is
not
one
of
the
values
"
keyUp
",
"
keyDown
",
or
"
pause
",
return
an
error
with
error
code
invalid
argument
.
Let
action
be
an
action
object
constructed
with
arguments
id
,
"
key
",
and
subtype
.
If
subtype
is
"
pause
",
let
result
be
the
result
of
trying
to
process
a
pause
action
with
arguments
action
item
and
action
,
and
return
result
.
Let
key
be
the
result
of
getting
a
property
named
"
value
"
from
action
item
.
If key is not a String containing a single unicode code point or grapheme cluster? return error with error code invalid argument .
Set
the
value
property
on
action
to
key
.
Return success with data action .
To process a pointer action given id , parameters , action item , and action options :
Let
subtype
be
the
result
of
getting
a
property
named
"
type
"
from
action
item
.
If
subtype
is
not
one
of
the
values
"
pause
",
"
pointerUp
",
"
pointerDown
",
"
pointerMove
",
or
"
pointerCancel
",
return
an
error
with
error
code
invalid
argument
.
Let
action
be
an
action
object
constructed
with
arguments
id
,
"
pointer
",
and
subtype
.
If
subtype
is
"
pause
",
let
result
be
the
result
of
trying
to
process
a
pause
action
with
arguments
action
item
,
action
,
and
actions
options
,
and
return
result
.
Set
the
pointerType
property
of
action
equal
to
the
pointerType
property
of
parameters
.
If
subtype
is
"
pointerUp
"
or
"
pointerDown
",
process
a
pointer
up
or
pointer
down
action
with
arguments
action
item
and
action
.
If
doing
so
results
in
an
error
,
return
that
error
.
If
subtype
is
"
pointerMove
"
process
a
pointer
move
action
with
arguments
action
item
,
action
,
and
actions
options
.
If
doing
so
results
in
an
error
,
return
that
error
.
If
subtype
is
"
pointerCancel
"
process
a
pointer
cancel
action
.
If
doing
so
results
in
an
error
,
return
that
error
.
Return success with data action .
To process a wheel action given id , action item , and actions options :
Let
subtype
be
the
result
of
getting
a
property
named
"
type
"
from
action
item
.
If
subtype
is
not
the
value
"
pause
",
or
"
scroll
",
return
an
error
with
error
code
invalid
argument
.
Let
action
be
an
action
object
constructed
with
arguments
id
,
"
wheel
",
and
subtype
.
If
subtype
is
"
pause
",
let
result
be
the
result
of
trying
to
process
a
pause
action
with
arguments
action
item
and
action
,
and
return
result
.
Let
duration
be
the
result
of
getting
a
property
named
"
duration
"
from
action
item
.
If duration is not undefined and duration is not an Integer greater than or equal to 0, return error with error code invalid argument .
Set
the
duration
property
of
action
to
duration
.
Let
origin
be
the
result
of
getting
the
property
origin
from
action
item
.
If
origin
is
undefined
let
origin
equal
"
viewport
".
If
origin
is
not
equal
to
"
viewport
",
or
actions
options
'
is
element
origin
steps
given
origin
return
false,
return
error
with
error
code
invalid
argument
.
Set
the
origin
property
of
action
to
origin
.
Let
x
be
the
result
of
getting
the
property
x
from
action
item
.
If x is not an Integer , return error with error code invalid argument .
Set
the
x
property
of
action
to
x
.
Let
y
be
the
result
of
getting
the
property
y
from
action
item
.
If y is not an Integer , return error with error code invalid argument .
Set
the
y
property
of
action
to
y
.
Let
deltaX
be
the
result
of
getting
the
property
deltaX
from
action
item
.
If deltaX is not an Integer , return error with error code invalid argument .
Set
the
deltaX
property
of
action
to
deltaX
.
Let
deltaY
be
the
result
of
getting
the
property
deltaY
from
action
item
.
If deltaY is not an Integer , return error with error code invalid argument .
Set
the
deltaY
property
of
action
to
deltaY
.
Return success with data action .
To process a pause action given action item , and action :
Let
duration
be
the
result
of
getting
the
property
"
duration
"
from
action
item
.
If duration is not undefined and duration is not an Integer greater than or equal to 0, return error with error code invalid argument .
Set
the
duration
property
of
action
to
duration
.
Return success with data action .
To process a pointer up or pointer down action given action item , and action :
Let
button
be
the
result
of
getting
the
property
button
from
action
item
.
If button is not an Integer greater than or equal to 0 return error with error code invalid argument .
Set
the
button
property
of
action
to
button
.
Let
width
be
the
result
of
getting
the
property
width
from
action
item
.
If width is not undefined and width is not a Number greater than or equal to 0 return error with error code invalid argument .
Set
the
width
property
of
action
to
width
.
Let
height
be
the
result
of
getting
the
property
height
from
action
item
.
If height is not undefined and height is not a Number greater than or equal to 0 return error with error code invalid argument .
Set
the
height
property
of
action
to
height
.
Let
pressure
be
the
result
of
getting
the
property
pressure
from
action
item
.
If pressure is not undefined and pressure is not a Number greater than or equal to 0 and less than or equal to 1 return error with error code invalid argument .
Set
the
pressure
property
of
action
to
pressure
.
Let
tangentialPressure
be
the
result
of
getting
the
property
tangentialPressure
from
action
item
.
If tangentialPressure is not undefined and tangentialPressure is not a Number greater than or equal to -1 and less than or equal to 1 return error with error code invalid argument .
Set
the
tangentialPressure
property
of
action
to
tangentialPressure
.
Let
tiltX
be
the
result
of
getting
the
property
tiltX
from
action
item
.
If tiltX is not undefined and tiltX is not an Integer greater than or equal to -90 and less than or equal to 90 return error with error code invalid argument .
Set
the
tiltX
property
of
action
to
tiltX
.
Let
tiltY
be
the
result
of
getting
the
property
tiltY
from
action
item
.
If tiltY is not undefined and tiltY is not an Integer greater than or equal to -90 and less than or equal to 90 return error with error code invalid argument .
Set
the
tiltY
property
of
action
to
tiltY
.
Let
twist
be
the
result
of
getting
the
property
twist
from
action
item
.
If twist is not undefined and twist is not an Integer greater than or equal to 0 and less than or equal to 359 return error with error code invalid argument .
Set
the
twist
property
of
action
to
twist
.
Let
altitudeAngle
be
the
result
of
getting
the
property
altitudeAngle
from
action
item
.
If altitudeAngle is not undefined and altitudeAngle is not a Number greater than or equal to 0 and less than or equal to π/2 return error with error code invalid argument .
Set
the
altitudeAngle
property
of
action
to
altitudeAngle
.
Let
azimuthAngle
be
the
result
of
getting
the
property
azimuthAngle
from
action
item
.
If azimuthAngle is not undefined and azimuthAngle is not a Number greater than or equal to 0 and less than or equal to 2π return error with error code invalid argument .
Set
the
azimuthAngle
property
of
action
to
azimuthAngle
.
Return
success
with
data
null
.
To process a pointer move action given action item , action , and actions options :
Let
duration
be
the
result
of
getting
the
property
duration
from
action
item
.
If duration is not undefined and duration is not an Integer greater than or equal to 0, return error with error code invalid argument .
Set
the
duration
property
of
action
to
duration
.
Let
origin
be
the
result
of
getting
the
property
origin
from
action
item
.
If
origin
is
undefined
let
origin
equal
"
viewport
".
If
origin
is
not
equal
to
"
viewport
"
or
"
pointer
",
and
actions
options
is
element
origin
steps
given
origin
return
false,
return
error
with
error
code
invalid
argument
.
Set
the
origin
property
of
action
to
origin
.
Let
x
be
the
result
of
getting
the
property
x
from
action
item
.
If x is not an Integer , return error with error code invalid argument .
Set
the
x
property
of
action
to
x
.
Let
y
be
the
result
of
getting
the
property
y
from
action
item
.
If y is not an Integer , return error with error code invalid argument .
Set
the
y
property
of
action
to
y
.
Let
width
be
the
result
of
getting
the
property
width
from
action
item
.
If width is not undefined and width is not a Number greater than or equal to 0 return error with error code invalid argument .
Set
the
width
property
of
action
to
width
.
Let
height
be
the
result
of
getting
the
property
height
from
action
item
.
If height is not undefined and height is not a Number greater than or equal to 0 return error with error code invalid argument .
Set
the
height
property
of
action
to
height
.
Let
pressure
be
the
result
of
getting
the
property
pressure
from
action
item
.
If pressure is not undefined and pressure is not a Number greater than or equal to 0 and less than or equal to 1 return error with error code invalid argument .
Set
the
pressure
property
of
action
to
pressure
.
Let
tangentialPressure
be
the
result
of
getting
the
property
tangentialPressure
from
action
item
.
If tangentialPressure is not undefined and tangentialPressure is not a Number greater than or equal to -1 and less than or equal to 1 return error with error code invalid argument .
Set
the
tangentialPressure
property
of
action
to
tangentialPressure
.
Let
tiltX
be
the
result
of
getting
the
property
tiltX
from
action
item
.
If tiltX is not undefined and tiltX is not an Integer greater than or equal to -90 and less than or equal to 90 return error with error code invalid argument .
Set
the
tiltX
property
of
action
to
tiltX
.
Let
tiltY
be
the
result
of
getting
the
property
tiltY
from
action
item
.
If tiltY is not undefined and tiltY is not an Integer greater than or equal to -90 and less than or equal to 90 return error with error code invalid argument .
Set
the
tiltY
property
of
action
to
tiltY
.
Let
twist
be
the
result
of
getting
the
property
twist
from
action
item
.
If twist is not undefined and twist is not an Integer greater than or equal to 0 and less than or equal to 359 return error with error code invalid argument .
Set
the
twist
property
of
action
to
twist
.
Let
altitudeAngle
be
the
result
of
getting
the
property
altitudeAngle
from
action
item
.
If altitudeAngle is not undefined and altitudeAngle is not a Number greater than or equal to 0 and less than or equal to π/2 return error with error code invalid argument .
Set
the
altitudeAngle
property
of
action
to
altitudeAngle
.
Let
azimuthAngle
be
the
result
of
getting
the
property
azimuthAngle
from
action
item
.
If azimuthAngle is not undefined and azimuthAngle is not a Number greater than or equal to 0 and less than or equal to 2π return error with error code invalid argument .
Set
the
azimuthAngle
property
of
action
to
azimuthAngle
.
Return
success
with
data
null
.
The algorithm to dispatch actions takes a list of actions grouped by tick , and then causes each action to be run at the appropriate point in the sequence.
To dispatch actions given input state , actions by tick , browsing context , and actions options :
Let token be a new unique identifier.
Enqueue token in input state 's actions queue .
Wait for token to be the first item in input state 's actions queue .
Let actions result be the result of dispatch actions inner with input state , actions by tick , browsing context , and actions options .
Dequeue input state 's actions queue .
Assert: this returns token
Return actions result .
To dispatch actions inner given input state , actions by tick , browsing context , and actions options :
For each item tick actions in actions by tick :
Let tick duration be the result of computing the tick duration with argument tick actions .
Try to dispatch tick actions with input state , tick actions , tick duration , browsing context , and actions options .
Wait until the following conditions are all met:
There are no pending asynchronous waits arising from the last invocation of the dispatch tick actions steps.
The user agent event loop has spun enough times to process the DOM events generated by the last invocation of the dispatch tick actions steps.
At least tick duration milliseconds have passed.
Return
success
with
data
null
.
To compute the tick duration given tick actions :
Let max duration be 0.
For each action object in tick actions :
let duration be undefined .
If
action
object
has
subtype
property
set
to
"
pause
"
or
action
object
has
type
property
set
to
"
pointer
"
and
subtype
property
set
to
"
pointerMove
",
or
action
object
has
type
property
set
to
"
wheel
"
and
subtype
property
set
to
"
scroll
",
let
duration
be
equal
to
the
duration
property
of
action
object
.
If duration is not undefined , and duration is greater than max duration , let max duration be equal to duration.
Return max duration .
To dispatch tick actions given input state , tick actions , tick duration , browsing context , and actions options :
For each action object in tick actions :
Let input id be equal to the value of action object 's id property.
Let source type be equal to the value of action object 's type property.
Let source be the result of get an input source given input state and input id .
Assert: source is not undefined.
Let global key state be the result of get the global key state with input state .
Let subtype be action object 's subtype.
Let algorithm be the value of the column dispatch action algorithm from the following table where the source type column is source type and the subtype column is equal to subtype .
source type | subtype | Dispatch action algorithm |
---|---|---|
"
none
"
|
"
pause
"
| Dispatch a pause action |
"
key
"
|
"
pause
"
| Dispatch a pause action |
"
key
"
|
"
keyDown
"
| Dispatch a keyDown action |
"
key
"
|
"
keyUp
"
| Dispatch a keyUp action |
"
pointer
"
|
"
pause
"
| Dispatch a pause action |
"
pointer
"
|
"
pointerDown
"
| Dispatch a pointerDown action |
"
pointer
"
|
"
pointerUp
"
| Dispatch a pointerUp action |
"
pointer
"
|
"
pointerMove
"
| Dispatch a pointerMove action |
"
pointer
"
|
"
pointerCancel
"
| Dispatch a pointerCancel action |
"
wheel
"
|
"
pause
"
| Dispatch a pause action |
"
wheel
"
|
"
scroll
"
| Dispatch a scroll action |
If
subtype
is
"
keyDown
",
append
a
copy
of
action
object
with
the
subtype
property
changed
to
"
keyUp
"
to
input
state
's
input
cancel
list
.
If
subtype
is
"
pointerDown
",
append
a
copy
of
action
object
with
the
subtype
property
changed
to
"
pointerUp
"
to
input
state
's
input
cancel
list
.
To dispatch a list of actions given input state , actions , browsing context , and actions options :
Let tick actions be the list « actions »
Let actions by tick be the list « tick actions ».
Return the result of dispatch actions with input state , actions by tick , browsing context , and actions options .
To dispatch a pause action given action object , source , global key state , tick duration , browsing context , and actions options :
The normalized key value for a raw key key is, if key appears in the table below, the string value in the second column on the row containing key 's unicode code point in the first column, otherwise it is key .
key 's codepoint | Normalized key value |
---|---|
\uE000
|
"Unidentified"
|
\uE001
|
"Cancel"
|
\uE002
|
"Help"
|
\uE003
|
"Backspace"
|
\uE004
|
"Tab"
|
\uE005
|
"Clear"
|
\uE006
|
"Return"
|
\uE007
|
"Enter"
|
\uE008
|
"Shift"
|
\uE009
|
"Control"
|
\uE00A
|
"Alt"
|
\uE00B
|
"Pause"
|
\uE00C
|
"Escape"
|
\uE00D
|
"
"
|
\uE00E
|
"PageUp"
|
\uE00F
|
"PageDown"
|
\uE010
|
"End"
|
\uE011
|
"Home"
|
\uE012
|
"ArrowLeft"
|
\uE013
|
"ArrowUp"
|
\uE014
|
"ArrowRight"
|
\uE015
|
"ArrowDown"
|
\uE016
|
"Insert"
|
\uE017
|
"Delete"
|
\uE018
|
";"
|
\uE019
|
"="
|
\uE01A
|
"0"
|
\uE01B
|
"1"
|
\uE01C
|
"2"
|
\uE01D
|
"3"
|
\uE01E
|
"4"
|
\uE01F
|
"5"
|
\uE020
|
"6"
|
\uE021
|
"7"
|
\uE022
|
"8"
|
\uE023
|
"9"
|
\uE024
|
"*"
|
\uE025
|
"+"
|
\uE026
|
","
|
\uE027
|
"-"
|
\uE028
|
"."
|
\uE029
|
"/"
|
\uE031
|
"F1"
|
\uE032
|
"F2"
|
\uE033
|
"F3"
|
\uE034
|
"F4"
|
\uE035
|
"F5"
|
\uE036
|
"F6"
|
\uE037
|
"F7"
|
\uE038
|
"F8"
|
\uE039
|
"F9"
|
\uE03A
|
"F10"
|
\uE03B
|
"F11"
|
\uE03C
|
"F12"
|
\uE03D
|
"Meta"
|
\uE040
|
"ZenkakuHankaku"
|
\uE050
|
"Shift"
|
\uE051
|
"Control"
|
\uE052
|
"Alt"
|
\uE053
|
"Meta"
|
\uE054
|
"PageUp"
|
\uE055
|
"PageDown"
|
\uE056
|
"End"
|
\uE057
|
"Home"
|
\uE058
|
"ArrowLeft"
|
\uE059
|
"ArrowUp"
|
\uE05A
|
"ArrowRight"
|
\uE05B
|
"ArrowDown"
|
\uE05C
|
"Insert"
|
\uE05D
|
"Delete"
|
The code for key is the value in the last column of the following table on the row with key in either the first or second column, if any such row exists, otherwise it is undefined .
A shifted character is one that appears in the second column of the following table.
Key | Alternate Key | code |
---|---|---|
"`"
|
"~"
|
"Backquote"
|
"\"
|
"|"
|
"Backslash"
|
"\uE003"
|
|
"Backspace"
|
"["
|
"{"
|
"BracketLeft"
|
"]"
|
"}"
|
"BracketRight"
|
","
|
"<"
|
"Comma"
|
"0"
|
")"
|
"Digit0"
|
"1"
|
"!"
|
"Digit1"
|
"2"
|
"@"
|
"Digit2"
|
"3"
|
"#"
|
"Digit3"
|
"4"
|
"$"
|
"Digit4"
|
"5"
|
"%"
|
"Digit5"
|
"6"
|
"^"
|
"Digit6"
|
"7"
|
"&"
|
"Digit7"
|
"8"
|
"*"
|
"Digit8"
|
"9"
|
"("
|
"Digit9"
|
"="
|
"+"
|
"Equal"
|
"<"
|
">"
|
"IntlBackslash"
|
"a"
|
"A"
|
"KeyA"
|
"b"
|
"B"
|
"KeyB"
|
"c"
|
"C"
|
"KeyC"
|
"d"
|
"D"
|
"KeyD"
|
"e"
|
"E"
|
"KeyE"
|
"f"
|
"F"
|
"KeyF"
|
"g"
|
"G"
|
"KeyG"
|
"h"
|
"H"
|
"KeyH"
|
"i"
|
"I"
|
"KeyI"
|
"j"
|
"J"
|
"KeyJ"
|
"k"
|
"K"
|
"KeyK"
|
"l"
|
"L"
|
"KeyL"
|
"m"
|
"M"
|
"KeyM"
|
"n"
|
"N"
|
"KeyN"
|
"o"
|
"O"
|
"KeyO"
|
"p"
|
"P"
|
"KeyP"
|
"q"
|
"Q"
|
"KeyQ"
|
"r"
|
"R"
|
"KeyR"
|
"s"
|
"S"
|
"KeyS"
|
"t"
|
"T"
|
"KeyT"
|
"u"
|
"U"
|
"KeyU"
|
"v"
|
"V"
|
"KeyV"
|
"w"
|
"W"
|
"KeyW"
|
"x"
|
"X"
|
"KeyX"
|
"y"
|
"Y"
|
"KeyY"
|
"z"
|
"Z"
|
"KeyZ"
|
"-"
|
"_"
|
"Minus"
|
"."
|
"."
|
"Period"
|
"'"
|
"""
|
"Quote"
|
";"
|
":"
|
"Semicolon"
|
"/"
|
"?"
|
"Slash"
|
"\uE00A"
|
|
"AltLeft"
|
"\uE052"
|
|
"AltRight"
|
"\uE009"
|
|
"ControlLeft"
|
"\uE051"
|
|
"ControlRight"
|
"\uE006"
|
|
"Enter"
|
"\uE00B"
|
|
"Pause"
|
"\uE03D"
|
|
"MetaLeft"
|
"\uE053"
|
|
"MetaRight"
|
"\uE008"
|
|
"ShiftLeft"
|
"\uE050"
|
|
"ShiftRight"
|
"
"
|
"\uE00D"
|
"Space"
|
"\uE004"
|
|
"Tab"
|
"\uE017"
|
|
"Delete"
|
"\uE010"
|
|
"End"
|
"\uE002"
|
|
"Help"
|
"\uE011"
|
|
"Home"
|
"\uE016"
|
|
"Insert"
|
"\uE00F"
|
|
"PageDown"
|
"\uE00E"
|
|
"PageUp"
|
"\uE015"
|
|
"ArrowDown"
|
"\uE012"
|
|
"ArrowLeft"
|
"\uE014"
|
|
"ArrowRight"
|
"\uE013"
|
|
"ArrowUp"
|
"\uE00C"
|
|
"Escape"
|
"\uE031"
|
|
"F1"
|
"\uE032"
|
|
"F2"
|
"\uE033"
|
|
"F3"
|
"\uE034"
|
|
"F4"
|
"\uE035"
|
|
"F5"
|
"\uE036"
|
|
"F6"
|
"\uE037"
|
|
"F7"
|
"\uE038"
|
|
"F8"
|
"\uE039"
|
|
"F9"
|
"\uE03A"
|
|
"F10"
|
"\uE03B"
|
|
"F11"
|
"\uE03C"
|
|
"F12"
|
"\uE019"
|
|
"NumpadEqual"
|
"\uE01A"
|
"\uE05C"
|
"Numpad0"
|
"\uE01B"
|
"\uE056"
|
"Numpad1"
|
"\uE01C"
|
"\uE05B"
|
"Numpad2"
|
"\uE01D"
|
"\uE055"
|
"Numpad3"
|
"\uE01E"
|
"\uE058"
|
"Numpad4"
|
"\uE01F"
|
|
"Numpad5"
|
"\uE020"
|
"\uE05A"
|
"Numpad6"
|
"\uE021"
|
"\uE057"
|
"Numpad7"
|
"\uE022"
|
"\uE059"
|
"Numpad8"
|
"\uE023"
|
"\uE054"
|
"Numpad9"
|
"\uE025"
|
|
"NumpadAdd"
|
"\uE026"
|
|
"NumpadComma"
|
"\uE028"
|
"\uE05D"
|
"NumpadDecimal"
|
"\uE029"
|
|
"NumpadDivide"
|
"\uE007"
|
|
"NumpadEnter"
|
"\uE024"
|
|
"NumpadMultiply"
|
"\uE027"
|
|
"NumpadSubtract"
|
The
key
location
for
key
is
the
value
in
the
last
column
in
the
table
below
on
the
row
with
key
appears
in
the
first
column,
if
such
a
row
exists,
otherwise
it
is
0
.
key 's codepoint | Description | Location |
---|---|---|
\uE007
| Enter |
1
|
\uE008
| Left Shift |
1
|
\uE009
| Left Control |
1
|
\uE00A
| Left Alt |
1
|
\uE019
| Numpad = |
3
|
\uE01A
| Numpad 0 |
3
|
\uE01B
| Numpad 1 |
3
|
\uE01C
| Numpad 2 |
3
|
\uE01D
| Numpad 3 |
3
|
\uE01E
| Numpad 4 |
3
|
\uE01F
| Numpad 5 |
3
|
\uE020
| Numpad 6 |
3
|
\uE021
| Numpad 7 |
3
|
\uE022
| Numpad 8 |
3
|
\uE023
| Numpad 9 |
3
|
\uE024
| Numpad * |
3
|
\uE025
| Numpad + |
3
|
\uE026
| Numpad , |
3
|
\uE027
| Numpad - |
3
|
\uE028
| Numpad . |
3
|
\uE029
| Numpad / |
3
|
\uE03D
| Left Meta |
1
|
\uE050
| Right Shift |
2
|
\uE051
| Right Control |
2
|
\uE052
| Right Alt |
2
|
\uE053
| Right Meta |
2
|
\uE054
| Numpad PageUp |
3
|
\uE055
| Numpad PageDown |
3
|
\uE056
| Numpad End |
3
|
\uE057
| Numpad Home |
3
|
\uE058
| Numpad ArrowLeft |
3
|
\uE059
| Numpad ArrowUp |
3
|
\uE05A
| Numpad ArrowRight |
3
|
\uE05B
| Numpad ArrowDown |
3
|
\uE05C
| Numpad Insert |
3
|
\uE05D
| Numpad Delete |
3
|
To dispatch a keyDown action given action object , source , global key state , tick duration , browsing context , and actions options :
Let
raw
key
be
equal
to
the
action
object
's
value
property.
Let key be equal to the normalized key value for raw key .
If
the
source
's
pressed
property
contains
key
,
let
repeat
be
true,
otherwise
let
repeat
be
false.
Let code be the code for raw key .
Let location be the key location for raw key .
Let
charCode
,
keyCode
and
which
be
the
implementation-specific
values
of
the
charCode
,
keyCode
and
which
properties
appropriate
for
a
key
with
key
key
and
location
location
on
a
102
key
US
keyboard,
following
the
guidelines
in
[
UI-EVENTS
].
If
key
is
"Alt"
,
let
source
's
alt
property
be
true.
If
key
is
"Shift"
,
let
source
's
shift
property
be
true.
If
key
is
"Control"
,
let
source
's
ctrl
property
be
true.
If
key
is
"Meta"
,
let
source
's
meta
property
be
true.
Add
key
to
source
's
pressed
property.
Perform
implementation-specific
action
dispatch
steps
on
browsing
context
equivalent
to
pressing
a
key
on
the
keyboard
in
accordance
with
the
requirements
of
[
UI-EVENTS
],
and
producing
the
following
events,
as
appropriate,
with
the
specified
properties.
This
will
always
produce
events
including
at
least
a
keyDown
event.
keyDown
with
properties:
Attribute | Value |
---|---|
key
| key |
code
| code |
location
| location |
altKey
|
source
's
alt
property
|
shiftKey
|
source
's
shift
property
|
ctrlKey
|
source
's
ctrl
property
|
metaKey
|
source
's
meta
property
|
repeat
| repeat |
isComposing
| false |
charCode
| charCode |
keyCode
| keyCode |
which
| which |
keyPress
with
properties:
Attribute | Value |
---|---|
key
| key |
code
| code |
location
| location |
altKey
|
source
's
alt
property
|
shiftKey
|
source
's
shift
property
|
ctrlKey
|
source
's
ctrl
property
|
metaKey
|
source
's
meta
property
|
repeat
| repeat |
isComposing
| false |
charCode
| charCode |
keyCode
| keyCode |
which
| which |
To dispatch a keyUp action given, action object , source , global key state , tick duration , browsing context , and actions options :
Let
raw
key
be
equal
to
action
object
's
value
property.
Let key be equal to the normalized key value for raw key .
If
the
source
's
pressed
item
does
not
contain
key
,
return.
Let code be the code for raw key .
Let location be the key location for raw key .
Let
charCode
,
keyCode
and
which
be
the
implementation-specific
values
of
the
charCode
,
keyCode
and
which
properties
appropriate
for
a
key
with
key
key
and
location
location
on
a
102
key
US
keyboard,
following
the
guidelines
in
[
UI-EVENTS
].
If
key
is
"
Alt
",
let
source
's
alt
property
be
false.
If
key
is
"
Shift
",
let
source
's
shift
property
be
false.
If
key
is
"Control"
,
let
source
's
ctrl
property
be
false.
If
key
is
"Meta"
,
let
source
's
meta
property
be
false.
Remove
key
from
sources
's
pressed
property.
Perform implementation-specific action dispatch steps on browsing context equivalent to releasing a key on the keyboard in accordance with the requirements of [ UI-EVENTS ], and producing at least the following events with the specified properties:
keyup
,
with
properties:
Attribute | Value |
---|---|
key
| key |
code
| code |
location
| location |
altKey
|
source
's
altKey
property
|
shiftKey
|
source
's
shift
property
|
ctrlKey
|
source
's
ctrl
property
|
metaKey
|
source
's
meta
property
|
repeat
| false |
isComposing
| false |
charCode
| charCode |
keyCode
| keyCode |
which
| which |
To dispatch a pointerDown action given action object , input state , global key state , tick duration , browsing context , and actions options :
Let
pointerType
be
equal
to
action
object
's
pointerType
property.
Let
button
be
equal
to
action
object
's
button
property.
If
the
input
state
's
pressed
property
contains
button
return
success
with
data
null
.
Let
x
be
equal
to
input
state
's
x
property.
Let
y
be
equal
to
input
state
's
y
property.
Add
button
to
the
set
corresponding
to
input
state
's
pressed
property,
and
let
buttons
be
the
resulting
value
of
that
property.
Let
width
be
equal
to
action
object
's
width
property.
Let
height
be
equal
to
action
object
's
height
property.
Let
pressure
be
equal
to
action
object
's
pressure
property.
Let
tangentialPressure
be
equal
to
action
object
's
tangentialPressure
property.
Let
tiltX
be
equal
to
action
object
's
tiltX
property.
Let
tiltY
be
equal
to
action
object
's
tiltY
property.
Let
twist
be
equal
to
action
object
's
twist
property.
Let
altitudeAngle
be
equal
to
action
object
's
altitudeAngle
property.
Let
azimuthAngle
be
equal
to
action
object
's
azimuthAngle
property.
Perform
implementation-specific
action
dispatch
steps
on
browsing
context
equivalent
to
pressing
the
button
numbered
button
on
the
pointer
with
pointerId
equal
to
input
source
's
pointerId,
having
type
pointerType
at
viewport
x
coordinate
x
,
viewport
y
coordinate
y
,
width
,
height
,
pressure
,
tangentialPressure
,
tiltX
,
tiltY
,
twist
,
altitudeAngle
,
azimuthAngle
,
with
buttons
buttons
depressed
in
accordance
with
the
requirements
of
[
UI-EVENTS
]
and
[
POINTER-EVENTS
].
set
ctrlKey
,
shiftKey
,
altKey
,
and
metaKey
equal
to
the
corresponding
items
in
global
key
state
.
Type
specific
properties
for
the
pointer
that
are
not
exposed
through
the
webdriver
API
must
be
set
to
the
default
value
specified
for
hardware
that
doesn't
support
that
property.
To dispatch a pointerUp action given, action object , source , global key state , tick duration , browsing context , and actions options :
Let
pointerType
be
equal
to
action
object
's
pointerType
property.
Let
button
be
equal
to
action
object
's
button
property.
If
the
source
's
pressed
property
does
not
contain
button
,
return
success
with
data
null
.
Let
x
be
equal
to
source
's
x
property.
Let
y
be
equal
to
source
's
y
property.
Remove
button
from
the
set
corresponding
to
source
's
pressed
property,
and
let
buttons
be
the
resulting
value
of
that
property.
Perform
implementation-specific
action
dispatch
steps
on
browsing
context
equivalent
to
releasing
the
button
numbered
button
on
the
pointer
with
pointerId
equal
to
input
source
's
pointerId,
having
type
pointerType
at
viewport
x
coordinate
x
,
viewport
y
coordinate
y
,
with
buttons
buttons
depressed,
in
accordance
with
the
requirements
of
[
UI-EVENTS
]
and
[
POINTER-EVENTS
].
The
generated
events
must
set
ctrlKey
,
shiftKey
,
altKey
,
and
metaKey
equal
to
the
corresponding
items
in
global
key
state
.
Type
specific
properties
for
the
pointer
that
are
not
exposed
through
the
webdriver
API
must
be
set
to
the
default
value
specified
for
hardware
that
doesn't
support
that
property.
To dispatch a pointerMove action given action object , source , global key state , tick duration , browsing context , and actions options :
Let
x
offset
be
equal
to
the
x
property
of
action
object
.
Let
y
offset
be
equal
to
the
y
property
of
action
object
.
Let
origin
be
equal
to
the
origin
property
of
action
object
.
Let ( x , y ) be the result of trying to get coordinates relative to an origin with source , x offset , y offset , origin , browsing context , and actions options .
If x is less than 0 or greater than the width of the viewport in CSS pixels , then return error with error code move target out of bounds .
If y is less than 0 or greater than the height of the viewport in CSS pixels , then return error with error code move target out of bounds .
Let
duration
be
equal
to
action
object
's
duration
property
if
it
is
not
undefined
,
or
tick
duration
otherwise.
If duration is greater than 0 and inside any implementation-defined bounds, asynchronously wait for an implementation defined amount of time to pass.
Let
width
be
equal
to
action
object
's
width
property.
Let
height
be
equal
to
action
object
's
height
property.
Let
pressure
be
equal
to
action
object
's
pressure
property.
Let
tangentialPressure
be
equal
to
action
object
's
tangentialPressure
property.
Let
tiltX
be
equal
to
action
object
's
tiltX
property.
Let
tiltY
be
equal
to
action
object
's
tiltY
property.
Let
twist
be
equal
to
action
object
's
twist
property.
Let
altitudeAngle
be
equal
to
action
object
's
altitudeAngle
property.
Let
azimuthAngle
be
equal
to
action
object
's
azimuthAngle
property.
Perform a pointer move with arguments source , global key state , duration , start x , start y , x , y , width , height , pressure , tangentialPressure , tiltX , tiltY , twist , altitudeAngle , azimuthAngle .
To perform a pointer move given source , global key state , duration , start x , start y , target x , target y , width , height , pressure , tangentialPressure , tiltX , tiltY , twist , altitudeAngle , and azimuthAngle :
Let time delta be the time since the beginning of the current tick , measured in milliseconds on a monotonic clock.
Let duration ratio be the ratio of time delta and duration , if duration is greater than 0, or 1 otherwise.
If
duration
ratio
is
1,
or
close
enough
to
1
that
the
implementation
will
not
further
subdivide
the
move
action,
let
last
be
true.
Otherwise
let
last
be
false
.
If last is true, let x equal target x and y equal target y .
Otherwise let x equal an approximation to duration ratio × ( target x - start x ) + start x , and y equal an approximation to duration ratio × ( target y - start y ) + start y .
Let
current
x
equal
the
x
property
of
input
state
.
Let
current
y
equal
the
y
property
of
input
state
.
If x is not equal to current x or y is not equal to current y , run the following steps:
Let
buttons
be
equal
to
input
state's
buttons
property.
Perform
implementation-specific
action
dispatch
steps
on
browsing
context
equivalent
to
moving
the
pointer
with
pointerId
equal
to
input
source
's
pointerId,
having
type
pointerType
from
viewport
x
coordinate
current
x
,
viewport
y
coordinate
current
y
to
viewport
x
coordinate
x
and
viewport
y
coordinate
y
,
width
,
height
,
pressure
,
tangentialPressure
,
tiltX
,
tiltY
,
twist
,
altitudeAngle
,
azimuthAngle
,
with
buttons
buttons
depressed,
in
accordance
with
the
requirements
of
[
UI-EVENTS
]
and
[
POINTER-EVENTS
].
The
generated
events
must
set
ctrlKey
,
shiftKey
,
altKey
,
and
metaKey
equal
to
the
corresponding
items
in
global
key
state
.
Type
specific
properties
for
the
pointer
that
are
not
exposed
through
the
WebDriver
API
must
be
set
to
the
default
value
specified
for
hardware
that
doesn't
support
that
property.
In
the
case
where
the
pointerType
is
"
pen
"
or
"
touch
",
and
buttons
is
empty,
this
may
be
a
no-op.
For
a
pointer
of
type
"
mouse
"
this
will
always
produce
events
including
at
least
a
pointerMove
event.
Let
input
state
's
x
property
equal
x
and
y
property
equal
y
.
If last is true, return.
Run the following substeps in parallel :
Asynchronously wait for an implementation defined amount of time to pass.
Perform a pointer move with arguments input state , duration , start x , start y , target x , target y .
To dispatch a pointerCancel action given action object , source , global key state , tick duration , browsing context , and actions options :
Perform implementation-specific action dispatch steps on browsing context equivalent to cancelling the any action of the pointer with pointerId equal to source 's pointerId item. having type pointerType , in accordance with the requirements of [ UI-EVENTS ] and [ POINTER-EVENTS ].
To dispatch a scroll action given action object , source , global key state , tick duration , browsing context , and actions options :
Let
x
offset
be
equal
to
the
x
property
of
action
object
.
Let
y
offset
be
equal
to
the
y
property
of
action
object
.
Let
origin
be
equal
to
the
origin
property
of
action
object
.
Let ( x , y ) be the result of trying to get coordinates relative to an origin with source , x offset , y offset , origin , browsing context , and actions options .
If x is less than 0 or greater than the width of the viewport in CSS pixels , then return error with error code move target out of bounds .
If y is less than 0 or greater than the height of the viewport in CSS pixels , then return error with error code move target out of bounds .
Let
delta
x
be
equal
to
the
deltaX
property
of
action
object
.
Let
delta
y
be
equal
to
the
deltaY
property
of
action
object
.
Let
duration
be
equal
to
action
object
's
duration
property
if
it
is
not
undefined
,
or
tick
duration
otherwise.
If duration is greater than 0 and inside any implementation-defined bounds, asynchronously wait for an implementation defined amount of time to pass.
Perform a scroll with arguments global key state , duration , x , y , delta x , delta y , 0 , 0 .
To perform a scroll given duration , x , y , target delta x , target delta y , current delta x and current delta y :
Let time delta be the time since the beginning of the current tick , measured in milliseconds on a monotonic clock.
Let duration ratio be the ratio of time delta and duration , if duration is greater than 0, or 1 otherwise.
If
duration
ratio
is
1,
or
close
enough
to
1
that
the
implementation
will
not
further
subdivide
the
move
action,
let
last
be
true.
Otherwise
let
last
be
false
.
If last is true, let delta x equal target delta x - current delta x and delta y equal target delta y - current delta y .
Otherwise let delta x equal an approximation to duration ratio × target delta x - current delta x , and delta y equal an approximation to duration ratio × target delta y - current delta y .
If delta x is not equal to 0 or delta y is not equal to 0 , run the following steps:
Perform
implementation-specific
action
dispatch
steps
on
browsing
context
equivalent
to
wheel
scroll
at
viewport
x
coordinate
x
,
viewport
y
coordinate
y
,
deltaX
value
delta
x
,
deltaY
value
delta
y
,
in
accordance
with
the
requirements
of
[
UI-EVENTS
].
The
generated
events
must
set
ctrlKey
,
shiftKey
,
altKey
,
and
metaKey
equal
to
the
corresponding
items
in
global
key
state
.
Let
current
delta
x
property
equal
delta
x
+
current
delta
x
and
current
delta
y
property
equal
delta
y
+
current
delta
y
.
If last is true, return.
Run the following substeps in parallel :
Asynchronously wait for an implementation defined amount of time to pass.
Perform a scroll with arguments duration , x , y , target delta x , target delta y , current delta x , current delta y .
HTTP Method | URI Template |
---|---|
POST | /session/{ session id }/actions |
The remote end steps , given session , URL variables and parameters are:
Let input state be the result of get the input state with session and session 's current top-level browsing context .
Let actions options be a new actions options with the is element origin steps set to represents a web element , and the get element origin steps set to get a WebElement origin .
Let actions by tick be the result of trying to extract an action sequence with input state , parameters , and actions options .
If session 's current browsing context is no longer open , return error with error code no such window .
Try to handle any user prompts with session .
Dispatch actions with input state , actions by tick , current browsing context , and actions options . If this results in an error return that error.
HTTP Method | URI Template |
---|---|
DELETE | /session/{ session id }/actions |
The Release Actions command is used to release all the keys and pointer buttons that are currently depressed. This causes events to be fired as if the state was released by an explicit series of actions. It also clears all the internal state of the virtual devices.
The remote end steps , given session , URL variables and parameters are:
If session 's current browsing context is no longer open , return error with error code no such window .
Let input state be the result of get the input state with session and current top-level browsing context .
Let actions options be a new actions options with the is element origin steps set to represents a web element , and the get element origin steps set to get a WebElement origin .
Let undo actions be input state 's input cancel list in reverse order.
Try
to
dispatch
tick
actions
with
arguments
undo
actions
,
0
,
session
's
current
browsing
context
,
and
actions
options
.
Reset the input state with session and session 's current top-level browsing context .
This chapter describes interaction with various types of user prompts . The common denominator for user prompts is that they are modal windows requiring users to interact with them before the event loop is unpaused and control is returned to session 's current top-level browsing context .
By default user prompts are not handled automatically unless a user prompt handler has been defined. When a user prompt appears, it is the task of the subsequent command to handle it. If the subsequent requested command is not one listed in this chapter, an unexpected alert open error will be returned.
Whenever active sessions is a list containing exactly one item, and that item is a HTTP session , but is not a BiDi session , then in the steps to fire beforeunload , implementations must act as if showing an unload prompt is likely to be annoying, deceptive, or pointless.
This means that beforeunload prompts are never shown when there's an active HTTP-only session.
A
user
prompt
has
an
associated
user
prompt
message
that
is
the
string
message
shown
to
the
user,
or
null
if
the
message
length
is
0
.
To get the active user prompt given browsing context:
Let agent be browsing context 's active document 's relevant agent .
If agent 's event loop is not currently paused , return null.
Return the user prompt which handles the input required to meet the condition passed when event loop was paused .
The current user prompt is the result of get the active user prompt with current browsing context .
To dismiss a user prompt , act as if the user clicked the Cancel button on that prompt, if present, or otherwise accept the prompt.
To accept a user prompt , act as if the user clicked the OK button on that prompt.
A remote end has a user prompt handler which defines how a WebDriver session will react when a user prompt is displayed. It is either null or a map between strings and prompt handler configuration values. Initially it is null.
A prompt handler configuration is a struct with two items; a handler , which is a string, and a notify , which is a boolean.
To serialize a prompt handler configuration given configuration :
Let serialized be configuration 's handler .
If
«"
dismiss
",
"
accept
"»
contains
serialized
,
and
configuration
's
notify
is
true,
append
"
and
notify
"
to
serialized
.
Return serialized .
Handler key | Description (non-normative). |
---|---|
"
dismiss
"
| All simple dialogs encountered should be dismissed . |
"
accept
"
| All simple dialogs encountered should be accepted . |
"
dismiss
and
notify
"
| All simple dialogs encountered should be dismissed , and an error returned that the dialog was handled. |
"
accept
and
notify
"
| All simple dialogs encountered should be accepted , and an error returned that the dialog was handled. |
"
ignore
"
| All simple dialogs encountered should be left to the user to handle. |
The
valid
prompt
types
are
«"
alert
",
"
beforeUnload
",
"
confirm
",
"
default
",
"
prompt
"».
The
"
default
"
type
represents
a
fallback
when
no
specific
handler
is
defined
for
a
given
prompt
type.
The
"
beforeUnload
"
prompt
type
does
not
use
this
default
handler,
but
instead
falls
back
to
the
"
accept
"
handler
if
no
more
specific
handler
is
defined.
This
is
because
HTTP-only
sessions
do
not
allow
the
"
beforeUnload
"
handler
to
be
customized,
and
enabling
other
protcols
isn't
expected
to
change
the
user
prompt
handling
as
a
side
effect.
To deserialize as an unhandled prompt behavior given argument value :
Set value to the result of converting a JSON-derived JavaScript value to an Infra value with value .
If value is not a string, an implementation that does not also support [ WebDriver-BiDi ] may return error with error code invalid argument .
This is to avoid [ WebDriver-BiDi ] monkey-patching the current spec.
If
value
is
a
string
set
value
to
the
map
«["
default
"
→
value
]».
If value is not a map return error with error code invalid argument .
For each prompt type → handler in value :
If valid prompt types does not contain prompt type return error with error code invalid argument .
If known prompt handlers does not contain an entry with handler key handler return error with error code invalid argument .
Let notify be false.
If
handler
is
"
accept
and
notify
",
set
handler
to
"
accept
"
and
notify
to
true.
If
handler
is
"
dismiss
and
notify
",
set
handler
to
"
dismiss
"
and
notify
to
true.
If
handler
is
"
ignore
",
set
notify
to
true.
Let configuration be a prompt handler configuration with handler handler and notify notify .
Set
user
prompt
handler
[
handler
prompt
type
]
to
configuration
.
Return success with data user prompt handler .
To check user prompt handler matches given requested prompt handler :
If the user prompt handler is null, return true.
For
each
request
key
prompt
type
→
request
handler
in
requested
prompt
handler
:
If
the
user
prompt
handler
contains
key
request
prompt
type
:
If the requested prompt handler 's handler is not equal to the user prompt handler 's handler , or the requested prompt handler 's notify is not equal to the user prompt handler 's handler , return false.
To update the user prompt handler given requested prompt handler :
If the user prompt handler is null, set the user prompt handler to an empty map.
For
each
request
key
prompt
type
→
request
handler
in
requested
prompt
handler
:
Set
user
prompt
handler
[
key
request
prompt
type
]
to
value
request
handler
.
To serialize the user prompt handler :
If the user prompt handler is null, return null.
If
the
user
prompt
handler
has
size
1,
and
user
prompt
handler
contains
"
default
",
return
the
result
of
serialize
a
prompt
handler
configuration
with
user
prompt
handler
["
default
"].
Let serialized be an empty map .
For
each
key
→
value
of
user
prompt
handler
:
Set serialized [ key ] to serialize a prompt handler configuration with value .
Return convert an Infra value to a JSON-compatible JavaScript value with serialized .
An annotated unexpected alert open error is an error with error code unexpected alert open and an optional error data dictionary with the following entries:
text
"
To get the prompt handler type :
If the user prompt handler is null, let handlers be an empty map. Otherwise let handlers be user prompt handler .
If handlers contains type return handlers [ type ].
If
type
is
"
beforeUnload
",
return
a
prompt
handler
configuration
with
handler
"
accept
"
and
notify
false.
If
handlers
contains
"
default
"
return
handlers
["
default
"].
Return
a
prompt
handler
configuration
with
handler
"
dismiss
"
and
notify
true.
To handle any user prompts :
If the current browsing context is not blocked by a dialog return success .
Let
type
be
"
default
".
If
the
current
user
prompt
is
an
alert
dialog,
set
type
to
"
alert
".
Otherwise,
if
the
current
user
prompt
is
a
confirm
dialog,
set
type
to
"
confirm
".
Otherwise,
if
the
current
user
prompt
is
a
prompt
dialog,
set
type
to
"
prompt
".
Let handler be get the prompt handler with type .
Perform the following substeps based on handler 's handler :
accept
"
Accept the current user prompt .
dismiss
"
Dismiss the current user prompt .
ignore
"
Do nothing.
If handler 's notify is true, return annotated unexpected alert open error .
Return success .
HTTP Method | URI Template |
---|---|
POST | /session/{ session id }/alert/dismiss |
The Dismiss Alert command dismisses a simple dialog if present . A request to dismiss an alert user prompt , which may not necessarily have a dismiss button, has the same effect as accepting it.
The remote end steps , given session , URL variables and parameters are:
If session 's current top-level browsing context is no longer open , return error with error code no such window .
If the current user prompt is null, return error with error code no such alert .
Dismiss the current user prompt .
HTTP Method | URI Template |
---|---|
POST | /session/{ session id }/alert/accept |
The remote end steps , given session , URL variables and parameters are:
If session 's current top-level browsing context is no longer open , return error with error code no such window .
If the current user prompt is null, return error with error code no such alert .
Accept the current user prompt .
HTTP Method | URI Template |
---|---|
GET | /session/{ session id }/alert/text |
The remote end steps , given session , URL variables and parameters are:
If session 's current top-level browsing context is no longer open , return error with error code no such window .
If the current user prompt is null, return error with error code no such alert .
Let
message
be
the
text
message
associated
with
the
current
user
prompt
,
or
otherwise
be
null
.
Return success with data message .
HTTP Method | URI Template |
---|---|
POST | /session/{ session id }/alert/text |
The
Send
Alert
Text
command
sets
the
text
field
of
a
window.
prompt
user
prompt
to
the
given
value.
The remote end steps , given session , URL variables and parameters are:
Let
text
be
the
result
of
getting
the
property
"
text
"
from
parameters
.
If text is not a String , return error with error code invalid argument .
If session 's current top-level browsing context is no longer open , return error with error code no such window .
If the current user prompt is null, return error with error code no such alert .
Run the substeps for the API that created the current user prompt :
window.alert
window.confirm
Return error with error code element not interactable .
window.prompt
Do nothing.
Return error with error code unsupported operation .
Perform user agent dependent steps to set the value of current user prompt 's text field to text .
Screenshots are a mechanism for providing additional visual diagnostic information. They work by dumping a snapshot of the initial viewport 's framebuffer as a lossless PNG image. It is returned to the local end as a Base64 encoded string.
WebDriver provides the Take Screenshot command to capture the top-level browsing context 's initial viewport , and a command Take Element Screenshot for doing the same with the visible region of an element 's bounding rectangle after it has been scrolled into view .
In order to draw a bounding box from the framebuffer , given a rectangle :
If either the initial viewport 's width or height is 0 CSS pixels , return error with error code unable to capture screen .
Let paint width be the initial viewport 's width – min ( rectangle x coordinate , rectangle x coordinate + rectangle width dimension ).
Let paint height be the initial viewport 's height – min ( rectangle y coordinate , rectangle y coordinate + rectangle height dimension ).
Let
canvas
be
a
new
canvas
element,
and
set
its
width
and
height
to
paint
width
and
paint
height
,
respectively.
Let context , a canvas context mode , be the result of invoking the 2D context creation algorithm given canvas as the target.
Complete implementation specific steps equivalent to drawing the region of the framebuffer specified by the following coordinates onto context :
Return success with canvas .
To
encode
a
canvas
as
Base64
a
canvas
element
:
If
the
canvas
element's
bitmap's
origin-clean
flag
is
set
to
false,
return
error
with
error
code
unable
to
capture
screen
.
If
the
canvas
element's
bitmap
has
no
pixels
(i.e.
either
its
horizontal
dimension
or
vertical
dimension
is
zero)
then
return
error
with
error
code
unable
to
capture
screen
.
Let
file
be
a
serialization
of
the
canvas
element's
bitmap
as
a
file
,
using
"
image/png
"
as
an
argument.
Let
index
be
the
index
of
"
,
"
in
data
URL
.
Let encoded string be a substring of data URL using ( index + 1) as the start argument.
Return success with data encoded string .
HTTP Method | URI Template |
---|---|
GET | /session/{ session id }/screenshot |
The remote end steps , given session , URL variables and parameters are:
If session 's current top-level browsing context is no longer open , return error with error code no such window .
When the user agent is next to run the animation frame callbacks :
Let root rect be session 's current top-level browsing context 's document element 's rectangle .
Let screenshot result be the result of trying to call draw a bounding box from the framebuffer , given root rect as an argument.
Let
canvas
be
a
canvas
element
of
screenshot
result
's
data.
Let encoding result be the result of trying encoding a canvas as Base64 canvas .
Let encoded string be encoding result 's data.
Return success with data encoded string .
HTTP Method | URI Template |
---|---|
GET | /session/{ session id }/element/{ element id }/screenshot |
The Take Element Screenshot command takes a screenshot of the visible region encompassed by the bounding rectangle of an element .
The remote end steps , given session , URL variables and parameters are:
If session 's current browsing context is no longer open , return error with error code no such window .
Try to handle any user prompts with session .
Let
element
be
the
result
of
trying
to
get
a
known
element
with
session
and
URL
variables
["
element
id
"].
Scroll into view the element .
When the user agent is next to run the animation frame callbacks :
Let element rect be element 's rectangle .
Let screenshot result be the result of trying to call draw a bounding box from the framebuffer , given element rect as an argument.
Let
canvas
be
a
canvas
element
of
screenshot
result
's
data.
Let encoding result be the result of trying encoding a canvas as Base64 canvas .
Let encoded string be encoding result 's data.
Return success with data encoded string .
The print functions are a mechanism to render the document to a paginated format. It is returned to the local end as a Base64 encoded string containing a PDF representation of the paginated document.
When required to parse a page range with arguments pageRanges and totalPages , an implementation must:
If range is a Number :
Otherwise:
-
"
character.
Otherwise:
1
.
Otherwise
let
lowerBound
be
the
result
of
trying
to
parse
as
an
integer
the
first
element
of
rangeParts
.
A String is equivalent to an empty string if it has zero length after removing all whitespace characters.
When required to parse as an integer with argument input an implementation must:
U+0030
-
U+0039
(i.e.
0
-
9)
inclusive,
return
error
with
status
invalid
argument
.
10
.
HTTP Method | URI Template |
---|---|
POST | /session/{ session id }/print |
The remote end steps , given session , URL variables and parameters are:
If session 's current top-level browsing context is no longer open , return error with error code no such window .
Try to handle any user prompts with session .
Let
orientation
be
the
result
of
getting
a
property
with
default
named
"
orientation
"
and
with
default
"
portrait
"
from
parameters
.
If
orientation
is
not
a
String
or
does
not
have
one
of
the
values
"
landscape
"
or
"
portrait
",
return
error
with
error
code
invalid
argument
.
Let
scale
be
the
result
of
getting
a
property
with
default
named
"
scale
"
and
with
default
1
from
parameters
.
If
scale
is
not
a
Number
,
or
is
less
than
0.1
or
greater
than
2
return
error
with
error
code
invalid
argument
.
Let
background
be
the
result
of
getting
a
property
with
default
named
"
background
"
and
with
default
false
from
parameters
.
If background is not a Boolean return error with error code invalid argument .
Let
page
be
the
result
of
getting
a
property
with
default
named
"
page
"
and
with
a
default
of
an
empty
Object
from
parameters
.
Let
pageWidth
be
the
result
of
getting
a
property
with
default
named
"
width
"
and
with
a
default
of
21.59
from
page
.
Let
pageHeight
be
the
result
of
getting
a
property
with
default
named
"
height
"
and
with
a
default
of
27.94
from
page
.
If either of pageWidth or pageHeight is not a Number , or is less then 0, return error with error code invalid argument .
Let
margin
be
the
result
of
getting
a
property
with
default
named
"
margin
"
and
with
a
default
of
an
empty
Object
from
parameters
.
Let
marginTop
be
the
result
of
getting
a
property
with
default
named
"
top
"
and
with
a
default
of
1
from
margin
.
Let
marginBottom
be
the
result
of
getting
a
property
with
default
named
"
bottom
"
and
with
a
default
of
1
from
margin
.
Let
marginLeft
be
the
result
of
getting
a
property
with
default
named
"
left
"
and
with
a
default
of
1
from
margin
.
Let
marginRight
be
the
result
of
getting
a
property
with
default
named
"
right
"
and
with
a
default
of
1
from
margin
.
If any of marginTop , marginBottom , marginLeft , or marginRight is not a Number , or is less then 0, return error with error code invalid argument .
Let
shrinkToFit
be
the
result
of
getting
a
property
with
default
named
"
shrinkToFit
"
and
with
default
true
from
parameters
.
If shrinkToFit is not a Boolean return error with error code invalid argument .
Let
pageRanges
be
the
result
of
getting
a
property
with
default
named
"
pageRanges
"
from
parameters
with
default
of
an
empty
Array
.
If pageRanges is not an Array return error with error code invalid argument .
When
the
user
agent
is
next
to
run
the
animation
frame
callbacks
,
let
pdfData
be
the
result
of
trying
to
take
UA-specific
steps
to
generate
a
paginated
representation
of
session
's
current
browsing
context
,
with
the
CSS
media
type
set
to
print
,
encoded
as
a
PDF,
with
the
following
paper
settings:
Property | Value |
---|---|
Width in cm |
pageWidth
if
orientation
is
"
portrait
"
otherwise
pageHeight
|
Height in cm |
pageHeight
if
orientation
is
"
portrait
"
otherwise
pageWidth
|
Top margin, in cm | marginTop |
Bottom margin, in cm | marginBottom |
Left margin, in cm | marginLeft |
Right margin, in cm | marginRight |
In addition, the following formatting hints should be applied by the UA:
1
false
true
If pageRanges is not an empty Array , Let pages be the result of trying to parse a page range with arguments pageRanges and the number of pages contained in pdfData , then remove any pages from pdfData whose one-based index is not contained in pages
Let encoding result be the result of calling Base64 Encode on pdfData .
Let encoded string be encoding result 's data.
Return success with data encoded string
It is advisable that remote ends create a new profile when creating a new session . This prevents potentially sensitive session data from being accessible to new sessions , ensuring both privacy and preventing state from bleeding through to the next session.
A user agent can rely on a command-line flag or a configuration option to test whether to enable WebDriver, or alternatively make the user agent initiate or confirm the connection through a privileged content document or control widget, in case the user agent does not directly implement the HTTP endpoints.
It is strongly suggested that user agents require users to take explicit action to enable WebDriver, and that WebDriver remains disabled in publicly consumed versions of the user agent.
To prevent arbitrary machines on the network from connecting and creating sessions , it is suggested that only connections from loopback devices are allowed by default.
The
remote
end
can
include
a
configuration
option
to
limit
the
accepted
IP
range
allowed
to
connect
and
make
requests.
The
default
setting
for
this
might
be
to
limit
connections
to
the
IPv4
localhost
CIDR
range
127.0.0.0/8
and
the
IPv6
localhost
address
::1
.
[
RFC4632
]
It is also suggested that user agents make an effort to visually distinguish a user agent session that is under control of WebDriver from those used for normal browsing sessions. This can be done through a browser chrome element such as a “door hanger”, colorful decoration of the OS window, or some widget element that is prevalent in the window so that it easy to identify automation windows.
Although WebDriver does not define a primitive to ascertain the visibility of an element in the viewport , we acknowledge that it is an important feature for many users. Here we include a recommended approach which will give a simplified approximation of an element 's visibility, but please note that it relies only on tree-traversal, and only covers a subset of visibility checks.
The
visibility
of
an
element
is
guided
by
what
is
perceptually
visible
to
the
human
eye.
In
this
context,
an
element
's
displayedness
does
not
relate
to
the
visibility
or
display
style
properties.
The approach recommended to implementors to ascertain an element 's visibility was originally developed by the Selenium project, and is based on crude approximations about an element 's nature and relationship in the tree. An element is in general to be considered visible if any part of it is drawn on the canvas within the boundaries of the viewport.
The element displayed state is a boolean representing whether an element is currently visible.
To
get
the
element
displayed
state
using
the
bot.dom.isShown
Selenium
atoms,
given
element
:
Let
function
be
the
bot.dom.isShown
function.
Let result be the result of calling function 's [[Call]] internal method with arguments null and element . If this raises an exception, return an error with error code unknown error .
Return success with data result .
The
element
displayed
state
is
typically
exposed
as
an
endpoint
for
GET
requests
with
a
URI
Template
of
/session/{session
id}/element/{element
id}/displayed
.
There have been a lot of people that have helped make browser automation possible over the years and thereby furthered the goals of this standard. In particular, thanks goes to the Selenium Open Source community, without which this standard would never have been possible.
This standard is authored by Aleksey Chemakin, Andreas Tolfsen , Andrey Botalov, Brian Burg, Christian Bromann, Clayton Martin, Daniel Wagner-Hall, David Burns , Dominique Hazael-Massieux, Eran Messeri, Erik Wilde, Gábor Csárdi, Henrik Skupin, James Graham, Jason Juang, Jason Leyba, Jim Evans, John Chen, John Jansen, Jonathan Lipps, Jonathon Kereliuk, Luke Inman-Semerau, Maja Frydrychowicz , Malini Das, Manoj Kumar, Marc Fisher, Mike Pennisi, Ondřej Machulda, Randall Kent, Sam Sneddon, Seva Lotoshnikov, Simon Stewart , Sri Harsha, Titus Fortner, and Vangelis Katsikaros. The work is coordinated and edited by David Burns and Simon Stewart .
Thanks to Berge Schwebs Bjørlo, Lukas Tetzlaff, Malcolm Rowe, Michael[tm] Smith, Nathan Bloomfield, Philippe Le Hégaret, Robin Berjon, Ross Patterson, and Wilhelm Joys Andersen for proofreading and suggesting areas for improvement.
This specification relies on several other underlying specifications.
The following terms are defined in the Accessible Rich Internet Applications (WAI-ARIA) 1.2 specification: [ wai-aria-1.2 ]
The following terms are defined in the Accessible Name and Description Computation 1.1 specification: [ accname-1.1 ]
The following terms are defined in the Content Security Policy Level 3 specification: [ CSP3 ]
The following terms are defined in The Base16, Base32, and Base64 Data Encodings specification: [ RFC4648 ]
The following terms are defined in the DOM Parsing and Serialization specification: [ DOM-PARSING ]
The following attributes are defined in the UI Events specification: [ UI-EVENTS ]
The following attributes are defined in the UI Events Code specification: [ UIEVENTS-KEY ]
The following terms are defined in the ECMAScript Language Specification: [ ECMA-262 ]
The following terms are defined in the WHATWG Encoding specification: [ ENCODING ]
The following terms are defined in the WHATWG Fetch specification: [ FETCH ]
The following terms are defined in the WHATWG Fullscreen specification: [ FULLSCREEN ]
The following terms are defined in the HTML specification: [ HTML ]
activeElement
attribute
on
Document
Document
object
[[GetOwnProperty]]
of
a
Window
object
Window
object
WindowProxy
exotic
object
setSelectionRange
confirm
alert
prompt
The
HTML
specification
also
defines
states
of
the
input
element:
The HTML specification also defines a range of different attributes:
The HTML Editing APIs specification defines the following terms: [ EDITING ]
The following events are also defined in the HTML specification:
The “data” URL scheme specification defines the following terms: [ RFC2397 ]
To be HTTP compliant , it is supposed that the implementation supports the relevant subsets of [ RFC7230 ], [ RFC7231 ], [ RFC7232 ], [ RFC7234 ], and [ RFC7235 ].
The following terms are defined in the Cookie specification: [ RFC6265 ]
The following terms are defined in the Same Site Cookie specification: [ RFC6265bis ]
The following terms are defined in the Hypertext Transfer Protocol (HTTP) Status Code Registry:
The following terms are defined in the Infra specification: [ INFRA ]
The specification uses URI Templates . [ URI-TEMPLATE ]
hidden
visibilityState
attribute
on
Document
visible
33c6b7841a59aaaad55744909c0600f066fd5593
.
visibility
property
display
property
The following terms are defined in the standard: [ RFC1928 ]
The IDL fragments in this specification must be interpreted as required for conforming IDL fragments, as described in the Web IDL specification. [ WEBIDL ]
The following terms are defined in the Promises Guide. [ PROMISES-GUIDE ]
The following terms are defined in the Document Object Model XPath standard [ XPATH ]
[[Call]]
internal
slot
for
Function
§E.
[[GetOwnProperty]]
internal
slot
for
Object
§E.
§E.
[[GetProperty]]
internal
slot
for
Object
§E.
NavigatorAutomationInformation
interface
§4.
[[Put]]
internal
slot
for
Object
§E.
getBoundingClientRect()
(for
Element
)
getClientRects()
(for
Element
)
compareDocumentPosition()
(for
Node
)
tree
)
Node
)
DOMTokenList
interface
Element
interface
getAttribute()
(for
Element
)
getElementsByTagName()
(for
Element
)
hasAttribute()
(for
Element
)
HTMLCollection
interface
tree
)
tree
)
isTrusted
attribute
(for
Event
)
Node
)
NodeList
interface
querySelectorAll()
(for
ParentNode
)
ShadowRoot
interface
tagName
attribute
(for
Element
)
textContent
attribute
(for
Node
)
Document
)
FileList
interface
DOMRect
interface
a
element
address
element
canvas
element
datalist
element
frame
element
height
attribute
(for
canvas
element)
HTMLAllCollection
interface
HTMLFormControlsCollection
interface
HTMLOptionsCollection
interface
iframe
element
optgroup
element
option
element
output
element
readonly
attribute
(for
input
element)
select
element
source
element
textarea
element
title
attribute
(for
Document
)
type
attribute
(for
input
element)
width
attribute
(for
canvas
element)
list
)
map
)
iteration
)
map
)
map
)
struct
)
string
)
map
)
map
)
iteration
)
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in: