diff --git a/.gitignore b/.gitignore index e43b0f988..e90722f8a 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -.DS_Store +/index.html diff --git a/index.html b/index.bs similarity index 91% rename from index.html rename to index.bs index 207184c6e..2daf56414 100644 --- a/index.html +++ b/index.bs @@ -1,60 +1,47 @@ - - - -WebDriver - - - +
+Title: WebDriver
+Level: 2
+Shortname: webdriver
+Status: ED
+TR: https://www.w3.org/TR/webdriver/
+Group: browser-testing-tools
+URL: https://w3c.github.io/webdriver/
+Repository: w3c/webdriver
+Editor: Simon Stewart, Apple https://www.apple.com/, http://www.rocketpoweredjetpants.com/, w3cid 50228
+Editor: David Burns, BrowserStack https://www.browserstack.com/, http://www.theautomatedtester.co.uk/, w3cid 50184
+!Channel: #webdriver on irc.w3.org
+Abstract: WebDriver is a remote control interface
+Abstract: that enables introspection and control of user agents.
+Abstract: It provides a platform- and language-neutral wire protocol
+Abstract: as a way for out-of-process programs
+Abstract: to remotely instruct the behavior of web browsers.
+Abstract:
+Abstract: Provided is a set of interfaces
+Abstract: to discover and manipulate DOM elements in web documents
+Abstract: and to control the behavior of a user agent.
+Abstract: It is primarily intended to allow web authors to write tests
+Abstract: that automate a user agent from a separate controlling process,
+Abstract: but may also be used in such a way as to allow in-browser scripts
+Abstract: to control a — possibly separate — browser.
+Boilerplate: conformance no, index no, idl-index no, issues-index no
+Indent: 2
+
+ +
+{
+  "RFC6265bis": {
+    "authors": [
+      "M. West",
+      "J. Wilander"
+    ],
+    "href": "https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-05",
+    "title": "Cookies: HTTP State Management Mechanism",
+    "status": "Draft",
+    "publisher": "IETF"
+  }
+}
+
+ -
-

-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. +

+

Design

-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. -

- - - -
- - -
-

Design

+This section is non-normative.

The WebDriver standard attempts to follow a number of design goals:

-

Compatibility

+

Compatibility

This specification is derived from the popular @@ -116,7 +114,7 @@

Compatibility

-

Simplicity

+

Simplicity

The largest intended group of users of this specification @@ -124,12 +122,12 @@

Simplicity

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. +that simplify common tasks such as typing into +and clicking elements.
-

Extensions

+

Extensions

WebDriver provides a mechanism for others to define extensions to the protocol @@ -141,7 +139,13 @@

Extensions

-
+
+

Conformance

+

+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, @@ -152,7 +156,7 @@

Extensions

-

Terminology

+

Terminology

In equations, all numbers are integers, @@ -176,7 +180,7 @@

Terminology

that is not larger than value.

-A Universally Unique IDentifier (UUID) +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, @@ -184,7 +188,7 @@

Terminology

[[RFC4122]]

-The Unix Epoch +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 @@ -209,7 +213,7 @@

Terminology

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 +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), @@ -220,7 +224,7 @@

Terminology

-

Interface

+

Interface

The webdriver-active flag @@ -262,38 +266,38 @@

Interface

-

Nodes

+

Nodes

The WebDriver protocol consists of communication between:

-
Local end +
Local end

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. -

Remote end +
Remote end
The remote end hosts the server side of the protocol. Defining the behavior of a remote end in response to the WebDriver protocol forms the largest part of this specification.

For remote ends the standard defines two broad conformance - classes, known as node types: + classes, known as node types:

-
Intermediary node +
Intermediary node
Intermediary nodes are those that act as proxies, implementing both the local end and remote end of the protocol. However they are not expected to implement remote end steps directly. All nodes between a specific intermediary node and a local end are said to - be downstream of that + be downstream of that node. Conversely, any nodes between a specific intermediary node and an endpoint node are said to - be upstream. + be upstream.
Endpoint node
An endpoint node is the final remote end @@ -317,13 +321,13 @@

Nodes

If the intermediary node is a multiplexer that manages - multiple endpoint nodes, + multiple endpoint nodes, this might indicate its ability to purvey more sessions, for example if it has hit its maximum capacity.

-

Protocol

+

Protocol

WebDriver remote ends must provide an HTTP compliant wire protocol @@ -336,7 +340,7 @@

Protocol

no requirements are made upon their exposed user-facing API.
-

Algorithms

+

Algorithms

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; @@ -347,14 +351,14 @@

Algorithms

Where algorithms that return values are fallible, they are written in terms of returning either - success or error. + success or error. A success value has an associated data field which encapsulates the value returned, whereas an error response has an associated error code.

When calling a fallible algorithm, the construct “Let result be the result - of trying to call algorithm” + of trying to call algorithm” is equivalent to

    @@ -364,40 +368,40 @@

    Algorithms

    otherwise let result be temp’s data field.
-

The result of getting a property with argument name is +

The result of getting a property with argument name is defined as being the same as the result of calling - Object.[[\GetOwnProperty]](name). + Object.\[[GetOwnProperty]](name). -

The result of getting a property with default with +

The result of getting a property with default with arguments name and default is defined as being the same as the result of calling - Object.[[\GetOwnProperty]](name) if that + Object.\[[GetOwnProperty]](name) if that results in a value other than undefined and default otherwise. -

Setting a property with +

Setting a property with arguments name and value is defined as being the same as calling - Object.[[\Put]](name, value). + Object.\[[Put]](name, value).

The result of JSON serialization with object of type JSON Object is defined as the result of - calling JSON.[[\Stringify]](object). + calling JSON.\[[Stringify]](object). -

The result of JSON deserialization with text is defined as - the result of calling JSON.[[\Parse]](text). +

The result of JSON deserialization with text is defined as + the result of calling JSON.\[[Parse]](text).

-

Commands

+

Commands

The WebDriver protocol is organised into commands. Each HTTP request with a method and template defined in this specification -represents a single command, +represents a single command, and therefore each command produces a single HTTP response.

@@ -410,7 +414,7 @@

Commands

-

Processing model

+

Processing model

The remote end is an HTTP server reading requests from the client and writing responses, @@ -457,7 +461,7 @@

Processing model

from command parameters.
  • Let the current session be the session - with ID session id + with ID session id in the list of active sessions, or null if there is no such matching session. @@ -501,7 +505,7 @@

    Processing model

    Otherwise, let parameters be null.

  • Wait for navigation to complete. If this returns - an error return its value and + an error return its value and jump to step 1 in this overall algorithm, otherwise continue.

  • Let response result be the return value @@ -526,7 +530,7 @@

    Processing model

    When required to send an error, with error code - and an optional error data dictionary, + and an optional error data dictionary, a remote end must run the following steps:

      @@ -573,9 +577,9 @@

      Processing model

      and status message to the string corresponding to the description of status in the status code registry. -
    1. Set the response’s header - with name - and value +

    2. Set the response’s header + with name + and value with the following values:

      @@ -587,27 +591,27 @@

      Processing model

    3. Let response’s body be - the UTF-8 encoded JSON + the UTF-8 encoded JSON serialization of a JSON Object with a key "value" set to data.

    4. Let response bytes be the byte sequence resulting from serializing response according to the rules in [[RFC7230]]. -

    5. Write response bytes +

    6. Write response bytes to the connection.

    -

    A url variable dictionary is defined +

    A url variable dictionary is defined as the mapping of a command’s URI template variable names to their corresponding values.

  • -

    Routing requests

    +

    Routing requests

    -

    Request routing +

    Request routing is the process of going from a HTTP request - to the series of steps needed + to the series of steps needed to implement the command represented by that request.

    A remote end has an associated URL prefix, @@ -660,9 +664,9 @@

    Routing requests

    -

    Endpoints

    +

    Endpoints

    -

    The following table of endpoints lists +

    The following table of endpoints lists the method and URI template for each endpoint node command. Extension commands are implicitly appended to this table. @@ -1025,7 +1029,7 @@

    Endpoints

    -

    Errors

    +

    Errors

    Errors are represented in the WebDriver protocol by an HTTP response with an HTTP status in the 4xx or 5xx range, @@ -1106,8 +1110,8 @@

    Errors

    element not interactable A command could not be completed because the element is not - pointer- or - keyboard interactable. + pointer- or + keyboard interactable. @@ -1140,7 +1144,7 @@

    Errors

    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 + clear an element that isn’t both editable and resettable. @@ -1305,7 +1309,7 @@

    Errors

    -

    Extensions

    +

    Extensions

    Using the terminology defined in this section, others may define additional commands that seamlessly integrate with the standard protocol. This allows @@ -1314,7 +1318,7 @@

    Extensions

    features.

    Commands defined in this way - are called extension commands + are called extension commands and behave no differently than other commands; each has a dedicated HTTP endpoint and a set of remote end steps. @@ -1329,7 +1333,7 @@

    Extensions

    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 + 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]], @@ -1356,9 +1360,9 @@

    Extensions

    remote end steps. -

    Other specifications may define additional WebDriver capabilities. Each defined -capability must have a capability name which is a string +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 @@ -1376,20 +1380,20 @@

    Extensions

    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 -capabilites, the capabilities object that will be returned +capabilites, 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 + extension capabilities that are extra capabilities used to provide configuration or fulfill other vendor-specific needs. Extension capabilities’ key @@ -1429,9 +1433,9 @@

    Extensions

    -

    Capabilities

    +

    Capabilities

    -

    WebDriver capabilities +

    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 @@ -1465,28 +1469,28 @@

    Capabilities

    - Browser name + Browser name "browserName" string Identifies the user agent. - Browser version + Browser version "browserVersion" string Identifies the version of the user agent. - Platform name + Platform name "platformName" string Identifies the operating system of the endpoint node. - Accept insecure TLS certificates + Accept insecure TLS certificates "acceptInsecureCerts" boolean Indicates whether untrusted and self-signed TLS certificates @@ -1539,7 +1543,7 @@

    Capabilities

    -

    Proxy

    +

    Proxy

    The proxy configuration capability is a JSON Object nested @@ -1558,7 +1562,7 @@

    Proxy

    - proxyType + proxyType string Indicates the type of proxy configuration. "pac", @@ -1569,7 +1573,7 @@

    Proxy

    - proxyAutoconfigUrl + proxyAutoconfigUrl string Defines the URL for a proxy auto-config file if proxyType @@ -1578,7 +1582,7 @@

    Proxy

    - ftpProxy + ftpProxy string Defines the proxy host for FTP traffic when the proxyType is "manual". @@ -1587,7 +1591,7 @@

    Proxy

    - httpProxy + httpProxy string Defines the proxy host for HTTP traffic when the proxyType is "manual". @@ -1596,7 +1600,7 @@

    Proxy

    - noProxy + noProxy array Lists the address for which the proxy should be bypassed when the proxyType is "manual". @@ -1604,7 +1608,7 @@

    Proxy

    - sslProxy + sslProxy string Defines the proxy host for encrypted TLS traffic when the proxyType is "manual". @@ -1613,7 +1617,7 @@

    Proxy

    - socksProxy + socksProxy string Defines the proxy host for a SOCKS proxy when the proxyType is "manual". @@ -1621,7 +1625,7 @@

    Proxy

    - socksVersion + socksVersion number Defines the SOCKS proxy version when the proxyType is "manual". @@ -1633,7 +1637,7 @@

    Proxy

    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 + include credentials. If the port is omitted and scheme has a default port, this is the implied port. Otherwise, the port is left undefined. @@ -1704,9 +1708,9 @@

    Proxy

    -

    Processing capabilities

    +

    Processing capabilities

    -

    To process capabilities +

    To process capabilities with argument parameters, the endpoint node must take the following steps: @@ -1764,7 +1768,7 @@

    Processing capabilities

    to an indexed property in validated first match capabilities:
    1. Let merged be the result of - trying to merge + trying to merge capabilities with required capabilities and first match capabilities as arguments. @@ -1775,7 +1779,7 @@

      Processing capabilities

      to an indexed property in merged capabilities:
      1. Let matched capabilities be the result of - trying to match + trying to match capabilities with capabilities as an argument. @@ -2105,7 +2109,7 @@

        Processing capabilities

    -

    Sessions

    +

    Sessions

    A session is equivalent to a single instantiation of a particular user agent, including all its child browsers. @@ -2115,7 +2119,7 @@

    Sessions

    and allowing sessions to be routed via a multiplexer (known as an intermediary node). -

    A WebDriver session represents +

    A WebDriver session represents the connection between a local end and a specific remote end.

    A session is started when @@ -2144,7 +2148,7 @@

    Sessions

    which is the session in which that command will run.

    A remote end has an associated list of - active sessions, + active sessions, which is a list of all sessions that are currently started. A remote end that is not an intermediary node has at most one active session at a given time. @@ -2170,7 +2174,7 @@

    Sessions

    context.

    -A session has an associated session timeouts +A session has an associated session timeouts that records the timeout duration values used to control the behavior of script evaluation, navigation, @@ -2203,7 +2207,7 @@

    Sessions

    A session has an associated input cancel list.

    A session has an associated request queue which is a - queue of requests that are currently awaiting + queue of requests that are currently awaiting processing.

    When asked to close the session, @@ -2246,7 +2250,7 @@

    Sessions

    so that the connection is not prematurely closed.
    -

    New Session

    +

    New Session

    @@ -2309,7 +2313,7 @@

    New Sessio } } -

    Once all capabilities are merged from this example, +

    Once all capabilities are merged from this example, an endpoint node would receive New Session capabilities identical to:

    [
    @@ -2451,7 +2455,7 @@ 

    New Sessio
    -

    Delete Session

    +

    Delete Session

    @@ -2475,7 +2479,7 @@

    Delete Session

    -

    Status

    +

    Status

    @@ -2491,13 +2495,13 @@

    Status

    @@ -2673,7 +2677,7 @@

    Timeouts

    -

    Get Timeouts

    +

    Get Timeouts

    Provides the timeout limit used to interrupt -an explicit navigation attempt. +an explicit navigation attempt.

    @@ -2694,7 +2698,7 @@

    Get Timeouts

    -

    Set Timeouts

    +

    Set Timeouts

    @@ -2728,7 +2732,7 @@

    Set Timeouts

    -

    Navigation

    +

    The commands in this section allow navigation of the current top-level browsing context to new URLs @@ -2763,19 +2767,19 @@

    Navigation

    "none" - none + none
    "eager" - eager + eager "interactive"
    "normal" - normal + normal "complete"
    @@ -2794,7 +2798,7 @@

    Navigation

  • Return success with data value. -

    When asked to wait for navigation to complete, +

    When asked to wait for navigation to complete, run the following steps:

      @@ -2862,7 +2866,7 @@

      Navigation

      -

      Navigate To

      + @@ -2936,7 +2940,7 @@

      Navigate To

      to the current top-level browsing context.
    1. If the current top-level browsing context contains - a refresh state pragma directive of time 1 second + a refresh state pragma directive of time 1 second or less, wait until the refresh timeout has elapsed, a new navigate has begun, and return to the first step of this algorithm. @@ -2946,7 +2950,7 @@

      Navigate To

      -

      Get Current URL

      +

      Get Current URL

    2. @@ -2967,7 +2971,7 @@

      Get Current URL

    3. Handle any user prompts and return its value if it is an error. -

    4. Let url be the serialization +

    5. Let url be the serialization of the current top-level browsing context’s active document’s document URL. @@ -2976,7 +2980,7 @@

      Get Current URL

      -

      Back

      +

      Back

    6. @@ -3012,7 +3016,7 @@

      Back

      whichever occurs sooner.
    7. If the previous step completed by the session page load - timeout being reached, and user prompts have been handled, return error with error code timeout. @@ -3021,7 +3025,7 @@

      Back

      -

      Forward

      +

      Forward

    8. @@ -3057,7 +3061,7 @@

      Forward

      whichever occurs sooner.
    9. If the previous step completed by the session page load - timeout being reached, and user prompts have been handled, return error with error code timeout. @@ -3066,7 +3070,7 @@

      Forward

      -

      Refresh

      +

      Refresh

    10. @@ -3109,7 +3113,7 @@

      Refresh

      -

      Get Title

      +

      Get Title

      @@ -3144,7 +3148,7 @@

      Get Title

      -

      Contexts

      +

      Contexts

      Many WebDriver commands happen in the context of either the current browsing context or current top-level browsing context. @@ -3165,7 +3169,7 @@

      Contexts

      if it has been discarded.

      Each browsing context has an associated - window handle which uniquely + window handle which uniquely identifies it. This must be a String and must not be "current". @@ -3202,7 +3206,7 @@

      Contexts

      commands are unaffected by whether the operating system window has focus or not.
      -

      Get Window Handle

      +

      Get Window Handle

      @@ -3227,7 +3231,7 @@

      Get Window Handle

      -

      Close Window

      +

      Close Window

      @@ -3259,7 +3263,7 @@

      Close Window

      -

      Switch To Window

      +

      Switch To Window

      @@ -3308,7 +3312,7 @@

      Switch To Window

      -

      Get Window Handles

      +

      Get Window Handles

      @@ -3343,7 +3347,7 @@

      Get Window Handles

      -

      New Window

      +

      New Window

      @@ -3374,9 +3378,9 @@

      New Window

      "type" from the parameters argument.
    11. 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 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", @@ -3413,7 +3417,7 @@

      New Window

      -

      Switch To Frame

      +

      Switch To Frame

    12. @@ -3475,7 +3479,7 @@

      Switch To Frame

    13. Let child window be the WindowProxy object obtained by calling - window.[[\GetOwnProperty]] + window.\[[GetOwnProperty]] (id).

    14. Set the current browsing context to @@ -3514,7 +3518,7 @@

      Switch To Frame

      -

      Switch To Parent Frame

      +

      Switch To Parent Frame

    15. @@ -3553,7 +3557,7 @@

      Switch To Parent Frame

      -

      Resizing and positioning windows

      +

      Resizing and positioning windows

      WebDriver provides commands for interacting with the operating system window @@ -3566,7 +3570,7 @@

      Resizing and positioning windows

      an unsupported operation error is returned.

      The top-level browsing context - has an associated window state + 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: @@ -3586,7 +3590,7 @@

      Resizing and positioning windows

      - -
      Minimized window state + Minimized window state "minimized" The window is iconified. @@ -3600,7 +3604,7 @@

      Resizing and positioning windows

      Fullscreen window state + Fullscreen window state "fullscreen" The window is in full screen mode. @@ -3611,13 +3615,13 @@

      Resizing and positioning windows

      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 default state must be normal.

      A top-level browsing context’s window rect is defined as a dictionary of the screenX, screenY, outerWidth and outerHeight attributes of the WindowProxy. - Its JSON representation is the following: + Its JSON representation is the following:

      "x" @@ -3657,7 +3661,7 @@

      Resizing and positioning windows

      Do not return from this operation until the visibility state of the top-level browsing context’s active document - has reached the hidden state, + has reached the hidden state, or until the operation times out.

      To restore the window, @@ -3669,11 +3673,11 @@

      Resizing and positioning windows

      Do not return from this operation until the visibility state of the top-level browsing context’s active document - has reached the visible state, + has reached the visible state, or until the operation times out.
      -

      Get Window Rect

      +

      Get Window Rect

      @@ -3700,14 +3704,14 @@

      Get Window Rect

    16. Handle any user prompts and return its value if it is an error.

    17. Return success - with the JSON serialization + with the JSON serialization of the current top-level browsing context’s window rect.

      -

      Set Window Rect

      +

      Set Window Rect

    18. @@ -3827,13 +3831,13 @@

      Set Window Rect

    19. Return success - with the JSON serialization + with the JSON serialization of the current top-level browsing context’s window rect.

      -

      Maximize Window

      +

      Maximize Window

    20. @@ -3873,14 +3877,14 @@

      Maximize Window

      of the current top-level browsing context.
    21. Return success - with the JSON serialization + with the JSON serialization of the current top-level browsing context’s window rect.

      -

      Minimize Window

      +

      Minimize Window

    22. @@ -3916,14 +3920,14 @@

      Minimize Window

    23. Iconify the window.

    24. Return success - with the JSON serialization + with the JSON serialization of the current top-level browsing context’s window rect.

      -

      Fullscreen Window

      +

      Fullscreen Window

    25. @@ -3954,7 +3958,7 @@

      Fullscreen Window

      active document’s document element.
    26. Return success - with the JSON serialization + with the JSON serialization of the current top-level browsing context’s window rect. @@ -3964,9 +3968,9 @@

      Fullscreen Window

      -

      Elements

      +

      Elements

      -

      A web element +

      A web element is an abstraction used to identify an element when it is transported via the protocol, between remote- and local ends. @@ -4014,7 +4018,7 @@

      Elements

    27. Return success with element. -

      To create a web element reference +

      To create a web element reference for an element:

        @@ -4045,7 +4049,7 @@

        Elements

        return error with error code invalid argument.
      1. Let reference be the result of - getting + getting the web element identifier property from object. @@ -4060,7 +4064,7 @@

        Elements

        if its node document is not the active document or if its context object is not connected. -

        To scroll into view +

        To scroll into view an element perform the following steps only if the element is not already in view: @@ -4082,42 +4086,42 @@

        Elements

      Editable elements - are those that can be used for typing - and clearing, + are those that can be used for typing + and clearing, and they fall into two subcategories:

      -
      Mutable form control elements +
      Mutable form control elements

      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. -

      Mutable elements +
      Mutable elements

      Denotes elements that are editing hosts or content editable.

      An element is said to have - pointer events disabled + pointer events disabled if the resolved value of its "pointer-events" style property is "none". @@ -4127,29 +4131,29 @@

      Elements

      -

      Interactability

      +

      Interactability

      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 +

      An interactable element is an element which is either pointer-interactable or keyboard-interactable. -

      A pointer-interactable element +

      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 +

      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 +

      An element’s in-view center point is the origin position of the rectangle that is the intersection between the element’s first DOM client rectangle @@ -4158,7 +4162,7 @@

      Interactability

      it can be calculated this way:
        -
      1. Let rectangle be +

      2. Let rectangle be the first element of the DOMRect sequence returned by calling getClientRects on element. @@ -4191,7 +4195,7 @@

        Interactability

        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 +

        An element is obscured if the pointer-interactable paint tree at its center point is empty, or the first element in this tree @@ -4199,7 +4203,7 @@

        Interactability

      -

      Locator strategies

      +

      Locator strategies

      -

      An element location strategy +

      An element location strategy is an enumerated attribute deciding what technique should be used to search for elements in the current browsing context. @@ -4358,7 +4362,7 @@

      Locator strategies

    28. -
      CSS selectors
      +
      CSS selectors

      To find a web element with the CSS Selector strategy @@ -4376,10 +4380,10 @@

      CSS selectors
      -
      Link text
      +

      To find a web element - with the Link Text strategy + with the Link Text strategy the following steps need to be completed:

        @@ -4411,9 +4415,9 @@
        Link text
      -
      Partial link text
      + -

      The Partial link text strategy +

      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. @@ -4449,7 +4453,7 @@

      Partial link text
      -
      Tag name
      +
      Tag name

      To find a web element with the Tag Name strategy return success with data set to the @@ -4461,7 +4465,7 @@

      Tag name
      -
      XPath
      +
      XPath

      To find a web element with the XPath Selector strategy @@ -4512,7 +4516,7 @@

      XPath
      -

      Find Element

      +

      Find Element

      @@ -4582,7 +4586,7 @@

      Find Element

      -

      Find Elements

      +

      Find Elements

      @@ -4629,7 +4633,7 @@

      Find Elements

      -

      Find Element From Element

      +

      Find Element From Element

      @@ -4679,7 +4683,7 @@

      Find Element From Element

      -

      Find Elements From Element

      +

      Find Elements From Element

      @@ -4724,7 +4728,7 @@

      Find Elements From Element

      -

      Get Active Element

      +

      Get Active Element

      @@ -4750,7 +4754,7 @@

      Get Active Element

      of the current browsing context’s document element.
    29. If active element is a non-null element, - return success with its JSON serialization. + return success with its JSON serialization.

      Otherwise, return error with error code no such element. @@ -4758,7 +4762,7 @@

      Get Active Element

      -

      State

      +

      State

      To calculate the absolute position of element: @@ -4827,7 +4831,7 @@

      State

      -

      Is Element Selected

      +

      Is Element Selected

    30. @@ -4843,7 +4847,7 @@

      Is Element Selected

      The Is Element Selected command determines if the referenced element is selected or not. -This operation only makes sense on input elements +This operation only makes sense on input elements of the Checkbox- and Radio Button states, or on option elements. @@ -4881,7 +4885,7 @@

      Is Element Selected

      -

      Get Element Attribute

      +

      Get Element Attribute

      @@ -4933,7 +4937,7 @@

      Get Element Attribute

      -

      Get Element Property

      +

      Get Element Property

      @@ -4960,7 +4964,7 @@

      Get Element Property

      with url variableelement id.
    31. Let property be the result of calling - the element.[[\GetProperty]](name). + the element.\[[GetProperty]](name).

    32. Let result be the value of property if not undefined, or null. @@ -4970,7 +4974,7 @@

      Get Element Property

      -

      Get Element CSS Value

      +

      Get Element CSS Value

    33. @@ -4999,7 +5003,7 @@

      Get Element CSS Value

    34. Let computed value be the result of the first matching condition:

      current browsing context’s document - type is not "xml" + type is not "xml"
      computed value of parameter property name from element’s style declarations. property name is obtained from url variables. @@ -5013,7 +5017,7 @@

      Get Element CSS Value

      -

      Get Element Text

      +

      Get Element Text

    35. @@ -5073,7 +5077,7 @@

      Get Element Text

      -

      Get Element Tag Name

      +

      Get Element Tag Name

      @@ -5106,7 +5110,7 @@

      Get Element Tag Name

      -

      Get Element Rect

      +

      Get Element Rect

      @@ -5126,24 +5130,24 @@

      Get Element Rect

      The returned value is a dictionary with the following members:
      -
      x +
      x
      X axis position of the top-left corner of the web element relative to the current browsing context’s document element in CSS pixels. -
      y +
      y
      Y axis position of the top-left corner of the web element relative to the current browsing context’s document element in CSS pixels. -
      height +
      height
      Height of the web element’s bounding rectangle in CSS pixels. -
      width +
      width
      Width of the web element’s bounding rectangle in CSS pixels. @@ -5189,7 +5193,7 @@

      Get Element Rect

      -

      Is Element Enabled

      +

      Is Element Enabled

      @@ -5217,7 +5221,7 @@

      Is Element Enabled

    36. Let enabled be a boolean initially set to true if the current browsing context’s - document type + document type is not "xml".

      Otherwise, let enabled to false @@ -5230,7 +5234,7 @@

      Is Element Enabled

      -

      Get Computed Role

      +

      Get Computed Role

    37. @@ -5263,7 +5267,7 @@

      Get Computed Role

      -

      Get Computed Label

      +

      Get Computed Label

      @@ -5303,7 +5307,7 @@

      Interaction

      The element interaction commands provide a high-level instruction set for manipulating form controls. Unlike Actions, - they will implicitly scroll elements into view + they will implicitly scroll elements into view and check that it is an interactable element.

      Some resettable elements define their own clear algorithm. @@ -5334,7 +5338,7 @@

      Interaction

      to an empty string (thus clearing the element’s child nodes).
      -

      Element Click

      +

      Element Click

      @@ -5433,7 +5437,7 @@

      Element Click

      1. Let mouse be a new pointer input source. -

      2. Let click point be +

      3. Let click point be the element’s in-view center point.

      4. Let pointer move action be an action object @@ -5493,7 +5497,7 @@

        Element Click

        process the DOM events generated by the previous step.
      5. Perform implementation-defined steps to allow - any navigations triggered by the click + any navigations triggered by the click to start.

        It is not always clear how long this will cause the @@ -5514,7 +5518,7 @@

        Element Click

        -

        Element Clear

        +

        Element Clear

      @@ -5611,7 +5615,7 @@

      Element Clear

      -

      Element Send Keys

      +

      Element Send Keys

      @@ -5646,7 +5650,7 @@

      Element Send Keys

      When targetting an input element in the color state being presented as a color wheel, -interaction with it will be simulated, +interaction with it will be simulated, rather than typed using key emulation with actions.

      @@ -6005,10 +6009,10 @@

      Element Send Keys

      -

      Document

      +

      Document

      -

      Get Page Source

      +

      Get Page Source

      @@ -6050,7 +6054,7 @@

      Get Page Source

      -

      Executing Script

      +

      Executing Script

      A collection is an Object @@ -6091,7 +6095,7 @@

      Executing Script

      Return success with data value.

      Object that represents a web element -

      Return the deserialized +

      Return the deserialized web element of value.

      instance of Array @@ -6140,7 +6144,7 @@

      Executing Script

      return error with error code stale element reference.

      Otherwise return success - with the JSON serialization + with the JSON serialization of value.

      a WindowProxy object @@ -6150,7 +6154,7 @@

      Executing Script

      return error with error code stale element reference.

      Otherwise return success - with the JSON serialization + with the JSON serialization of value.

      has an own property named "toJSON" that is @@ -6246,11 +6250,11 @@

      Executing Script

      The rules to execute a function body are as follows. - The algorithm returns an ECMASCript completion record. + The algorithm returns an ECMASCript completion record.

      If at any point during the algorithm a user prompt appears, abort all subsequent substeps of this algorithm, and return - Completion { [[\Type]]: normal, [[\Value]]: null, [[\Target]]: empty }. + Completion { \[[Type]]: normal, \[[Value]]: null, \[[Target]]: empty }.

      1. Let window be the associated window @@ -6266,7 +6270,7 @@

        Executing Script

      2. If body is not parsable as a FunctionBody or if parsing detects an early error, return - Completion { [[\Type]]: normal, [[\Value]]: null, [[\Target]]: empty }. + Completion { \[[Type]]: normal, \[[Value]]: null, \[[Target]]: empty }.

      3. If body begins with a directive prologue that contains a use strict directive @@ -6281,19 +6285,19 @@

        Executing Script

        calling FunctionCreate, with arguments:
        -
        kind +
        kind
        Normal. -
        list +
        list
        An empty List. -
        body +
        body
        The result of parsing body above. -
        global scope +
        global scope
        The result of parsing global scope above. -
        strict +
        strict
        The result of parsing strict above.
        @@ -6316,7 +6320,7 @@

        Executing Script

        and is therefore not subject to the document CSP directives.
        -

        Execute Script

        +

        Execute Script

      @@ -6358,7 +6362,7 @@

      Execute Script

    38. If promise is still pending and the session script timeout is reached, - return error with error code script timeout. + return error with error code script timeout.

    39. Upon fulfillment of promise with value v, let result be a JSON clone of v, and @@ -6372,7 +6376,7 @@

      Execute Script

      -

      Execute Async Script

      +

      Execute Async Script

    40. @@ -6410,34 +6414,34 @@

      Execute Async Script

      1. Let resolvingFunctions be CreateResolvingFunctions(promise). -

      2. Append resolvingFunctions.[[\Resolve]] to +

      3. Append resolvingFunctions.\[[Resolve]] to arguments.

      4. Let result be the result of calling execute a function body, with arguments body and arguments. -

      5. If scriptResult.[[\Type]] is not normal, then reject - promise with value scriptResult.[[\Value]], and abort these steps. +

      6. 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. -

      7. If Type(scriptResult.[[\Value]]) +

      8. If Type(scriptResult.\[[Value]]) is not Object, then abort these steps. -

      9. Let then be Get(scriptResult.[[\Value]], "then"). +

      10. Let then be Get(scriptResult.\[[Value]], "then"). -

      11. If then.[[\Type]] is not normal, then reject - promise with value then.[[\Value]], and abort these steps. +

      12. If then.\[[Type]] is not normal, then reject + promise with value then.\[[Value]], and abort these steps. -

      13. If IsCallable(then.[[\Type]]) is false, +

      14. If IsCallable(then.\[[Type]]) is false, then abort these steps.

      15. Let scriptPromise be PromiseResolve(Promise, - scriptResult.[[\Value]]). + scriptResult.\[[Value]]).

      16. Upon fulfillment of scriptPromise with value v, resolve promise with value v. @@ -6448,7 +6452,7 @@

        Execute Async Script

      17. If promise is still pending and session script timeout milliseconds is reached, - return error with error code script timeout. + return error with error code script timeout.

      18. Upon fulfillment of promise with value v, let result be a JSON clone of v, and @@ -6465,7 +6469,7 @@

        Execute Async Script

        -

        Cookies

        +

        Cookies

        This section describes the interaction with cookies as described in [[RFC6265]]. @@ -6589,16 +6593,16 @@

        Cookies

        and the associated field’s value from the cookie store. The optional fields may be omitted. -

        To get all associated cookies to a document, +

        To get all associated cookies to a document, the user agent must return the enumerated set of cookies that meet the requirements set out in the first step of the algorithm in [[RFC6265]] to compute cookie-string for an ‘HTTP API’, from the cookie store of the given document’s address. The returned cookies must - include HttpOnly cookies. + include HttpOnly cookies.

        When the remote end is instructed - to create a cookie, + to create a cookie, this is synonymous to carrying out the steps described in [[RFC6265]] section 5.3, under receiving a cookie, @@ -6625,7 +6629,7 @@

        Cookies

      -

      Get All Cookies

      +

      Get All Cookies

      @@ -6653,7 +6657,7 @@

      Get All Cookies

      1. Let serialized cookie be the result - of serializing cookie. + of serializing cookie.

      2. Append serialized cookie to cookies

      @@ -6663,7 +6667,7 @@

      Get All Cookies

      -

      Get Named Cookie

      +
      @@ -6696,7 +6700,7 @@

      Get Named Cookie

      -

      Add Cookie

      +
      @@ -6779,7 +6783,7 @@

      Add Cookie

      -

      Delete Cookie

      +
      @@ -6809,7 +6813,7 @@

      Delete Cookie

      -

      Delete All Cookies

      +

      Delete All Cookies

      @@ -6838,7 +6842,7 @@

      Delete All Cookies

      -

      Actions

      +

      Actions

      The Actions API provides a low-level interface for providing virtualised device input to the web browser. @@ -6923,14 +6927,14 @@

      Actions

      -

      Input sources

      +

      Input sources

      The objects and properties defined in this section are spec-internal constructs and do not correspond to ECMAScript objects. For convenience the same terminology is used for their manipulation. -

      An input source is a virtual device providing input events. +

      An input source is a virtual device providing input events. Each input source has an associated input id, which is a string that identifies the particular device, and a source type which determines @@ -7010,7 +7014,7 @@

      Sources

      move to, either in its active (pressed) or inactive state.
      - +
      pointerCancelpointerCancel Used to cancel a pointer action.
      @@ -7036,12 +7040,12 @@

      State

      describe the state associated with each input source.

      The corresponding input source state type - for a label action type is given by the following table: + for a label action type is given by the following table: - @@ -7072,7 +7076,7 @@

      State

      properties alt, shift, ctrl, and meta, which are Booleans. -

      When required to create a new key input state object, an +

      When required to create a new key input state object, an implementation must return a key input state object with the pressed property set to the empty set and alt, shift, ctrl, @@ -7090,7 +7094,7 @@

      State

      an x property which is an unsigned integer, and a y property which is an unsigned integer. -

      When required to create a new pointer input state object +

      When required to create a new pointer input state object with arguments subtype an implementation must return a pointer input state object with subtype set to subtype, pressed set to an empty set and @@ -7174,9 +7178,9 @@

      State

      -

      Ticks

      +

      Ticks

      -

      A tick is the basic unit of time over +

      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 @@ -7184,7 +7188,7 @@

      Ticks

      after the user agent has had a chance to process all DOM events generated in the current tick. -

      Waiting +

      Waiting asynchronously means waiting for something to occur whilst allowing the browser to continue processing the event @@ -7237,9 +7241,9 @@

      Ticks

      -

      Processing actions

      +

      Processing actions

      -

      The algorithm for +

      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 @@ -7682,7 +7686,7 @@

      Processing actions

      -

      Dispatching actions

      +

      Dispatching actions

      The algorithm to dispatch actions takes a list of actions grouped by tick, and then causes each action to be run at the @@ -7724,7 +7728,7 @@

      Dispatching actions

      When required to - compute the tick duration + compute the tick duration with argument tick actions, a remote end must take the following steps:

      @@ -7781,7 +7785,7 @@

      Dispatching actions

    41. Let algorithm be the value of the column dispatch action algorithm from the following table of - dispatch action algorithms that is equal to the + dispatch action algorithms that is equal to the source type and the action object’s subtype property, to a dispatch action algorithm. @@ -7808,7 +7812,7 @@

      Dispatching actions

      -

      General actions

      +

      General actions

      When required to dispatch a pause action with arguments source id, action object, @@ -7822,7 +7826,7 @@

      General actions

      -

      Keyboard actions

      +

      Keyboard actions

      The normalised key value for a raw key key is, if key appears in the table below, the string value in @@ -8263,7 +8267,7 @@

      Keyboard actions

      -

      Pointer actions

      +

      Pointer actions

      When required to dispatch a pointerDown action with arguments source id, action object, @@ -8471,8 +8475,8 @@

      Pointer actions

      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 + to duration ratio × (target x - + start x) + start x, and y equal an approximation to duration ratio × (target y - start y) + start y. @@ -8568,7 +8572,7 @@

      Pointer actions

      -

      Perform Actions

      +

      Perform Actions

    42. Action type + Action type Input state
      @@ -8605,7 +8609,7 @@

      Perform Actions

      -

      Release Actions

      +

      Release Actions

      @@ -8654,7 +8658,7 @@

      Release Actions

      -

      User prompts

      +

      User prompts

      This chapter describes interaction with various types of user prompts. The common denominator for user prompts is that they are @@ -8723,12 +8727,12 @@

      User prompts

      The current user prompt is said to be the active user prompt, which can be one of the entries on the table of simple dialogs. -

      To dismiss +

      To dismiss the current user prompt, do so as if the user would click the Cancel or OK button, whichever is present, in that order. -

      To accept the current user prompt, +

      To accept the current user prompt, do so as if the user would click the OK button.

      @@ -8800,7 +8804,7 @@

      User prompts

      "text"
      The current user prompt’s - message. + message.

      In order to handle any user prompts @@ -8848,7 +8852,7 @@

      User prompts

      When returning an error with unexpected alert open, a remote end may choose to return the user prompt message as part of an additional "data" Object -on the error representation: +on the error representation:
      
       {
      @@ -8863,7 +8867,7 @@ 

      User prompts

      -

      Dismiss Alert

      +

      Dismiss Alert

      @@ -8879,7 +8883,7 @@

      Dismiss Alert

      The Dismiss Alert command dismisses a simple dialog -if present. +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. @@ -8900,7 +8904,7 @@

      Dismiss Alert

      -

      Accept Alert

      +

      Accept Alert

      @@ -8929,7 +8933,7 @@

      Accept Alert

      -

      Get Alert Text

      +

      Get Alert Text

      @@ -8960,7 +8964,7 @@

      Get Alert Text

      -

      Send Alert Text

      +

      Send Alert Text

      @@ -9022,7 +9026,7 @@

      Send Alert Text

      -

      Screen capture

      +

      Screen capture

      Screenshots are a mechanism for providing additional visual diagnostic information. @@ -9053,8 +9057,8 @@

      Screen capture

      rectangle y coordinate + rectangle height dimension).
    43. Let canvas be a new canvas element, - and set its width - and height + and set its width + and height to paint width and paint height, respectively.

    44. Let context, a canvas context mode, @@ -9082,7 +9086,7 @@

      Screen capture

    45. Return success with canvas. -

      To encode a canvas as +

      To encode a canvas as Base64 a canvas element:

        @@ -9111,7 +9115,7 @@

        Screen capture

      -

      Take Screenshot

      +

      Take Screenshot

    46. @@ -9153,7 +9157,7 @@

      Take Screenshot

      -

      Take Element Screenshot

      +

      Take Element Screenshot

      @@ -9176,7 +9180,7 @@

      Take Element Screenshot

      The remote end steps are:

        -
      1. Let scroll be the result +

      2. Let scroll be the result of getting the property scroll from parameters if it is not undefined. Otherwise let it be true. @@ -9218,7 +9222,7 @@

        Take Element Screenshot

        -

        Print

        +

        Print

        The print functions are a mechanism to render the document to a paginated format. It is returned to the local end as a Base64 @@ -9314,7 +9318,7 @@

        Print

      -

      Print Page

      +
      @@ -9476,11 +9480,11 @@

      Print Page

      -

      Privacy

      +

      Privacy

      It is advisable that remote ends -create a new profile when creating a new session. +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. @@ -9488,7 +9492,7 @@

      Privacy

      -

      Security

      +

      Security

      A user agent can rely on a command-line flag or a configuration option @@ -9530,7 +9534,7 @@

      Security

      -

      Element displayedness

      +

      Element displayedness

      Although WebDriver does not define a primitive to ascertain the visibility of an element in the viewport, @@ -9554,7 +9558,7 @@

      Element displayedness

      considered visible if any part of it is drawn on the canvas within the boundaries of the viewport. -

      The element displayed algorithm +

      The element displayed algorithm is a boolean state where true signifies that the element is displayed and false signifies that the element is not displayed. To compute the state on element, @@ -9571,7 +9575,7 @@

      Element displayedness

      -

      Acknowledgements

      +

      Acknowledgements

      There have been a lot of people that have helped make @@ -9641,8 +9645,8 @@

      Acknowledgements

      for proofreading and suggesting areas for improvement.
      -
      -

      Index

      +
      +

      Index

      This specification relies on several other underlying specifications. @@ -9677,7 +9681,7 @@

      Index

      in the Content Security Policy Level 3 specification: [[CSP3]]
      Base16, Base32, and Base64 Data Encodings @@ -9702,17 +9706,17 @@

      Index

    47. DOCUMENT_POSITION_DISCONNECTED (1)
    48. Document type
    49. Document URL -
    50. Element +
    51. Element
    52. Equals
    53. Event -
    54. Fire an event -
    55. Get an attribute by name +
    56. Fire an event +
    57. Get an attribute by name
    58. getAttribute
    59. getElementsByTagName -
    60. hasAttribute +
    61. hasAttribute
    62. HTMLCollection
    63. Inclusive descendant -
    64. isTrusted +
    65. isTrusted
    66. Node document
    67. Node Length
    68. Node @@ -9726,7 +9730,7 @@

      Index

      The following attributes are defined in the Document Object Model specification: [[DOM]]

      The following terms are defined in @@ -9735,7 +9739,7 @@

      Index

    69. fragment serializing algorithm
    70. innerHTML IDL attribute
    71. outerHTML IDL attribute -
    72. serializeToString method +
    73. serializeToString method

      The following attributes are defined @@ -9745,9 +9749,9 @@

      Index

    74. click event
    75. Keyboard event
    76. Keyboard event order -
    77. keyDown event -
    78. keyPress event -
    79. keyUp event +
    80. keyDown event +
    81. keyPress event +
    82. keyUp event
    83. mouseDown event
    84. Mouse event
    85. Mouse event order @@ -9759,13 +9763,13 @@

      Index

      The following attributes are defined in the UI Events Code specification: [[UIEVENTS-CODE]]

      The following attributes are defined in the UI Events Code specification: [[UIEVENTS-KEY]]

      ECMAScript @@ -9782,10 +9786,10 @@

      Index

    86. Get
    87. Global environment
    88. IsCallable -
    89. Own property +
    90. Own property
    91. Promise
    92. PromiseResolve -
    93. Type +
    94. Type
    95. Use strict directive
    96. parseInt
    97. parseFloat @@ -9793,15 +9797,15 @@

      Index

      This specification also presumes that you are able to call - some of the internal methods + some of the internal methods from the ECMAScript Language Specification: @@ -9816,9 +9820,9 @@

      Index

    98. null
    99. Number
    100. Object -
    101. [[\Parse]] +
    102. \[[Parse]]
    103. String -
    104. [[\Stringify]] +
    105. \[[Stringify]]
    106. ToInteger
    107. Undefined @@ -9838,8 +9842,8 @@

      Index

    108. Header Value
    109. Local scheme
    110. Method -
    111. Response -
    112. Request +
    113. Response +
    114. Request
    115. Set Header
    116. HTTP Status
    117. Status message @@ -9856,7 +9860,7 @@

      Index

      @@ -9865,15 +9869,15 @@

      Index

      The following terms are defined in the HTML specification: [[HTML]]

      The specification uses - URI Templates. [[URI-TEMPLATE]] + URI Templates. [[URI-TEMPLATE]]

      Infra
      The following terms are defined in the Infra standard: [[INFRA]]