Title: [288871] trunk/WebDriverTests
Revision
288871
Author
[email protected]
Date
2022-02-01 02:32:27 -0800 (Tue, 01 Feb 2022)

Log Message

Unreviewed. Update W3C WebDriver imported tests.

* imported/w3c/importer.json:
* imported/w3c/tools/webdriver/webdriver/bidi/client.py:
* imported/w3c/tools/webdriver/webdriver/client.py:
* imported/w3c/tools/wptrunner/wptrunner/browsers/firefox_android.py:
* imported/w3c/webdriver/tests/conftest.py:
* imported/w3c/webdriver/tests/find_element_from_shadow_root/find.py:
* imported/w3c/webdriver/tests/find_element_from_shadow_root/user_prompts.py:
* imported/w3c/webdriver/tests/find_elements_from_shadow_root/find.py:
* imported/w3c/webdriver/tests/find_elements_from_shadow_root/user_prompts.py:
* imported/w3c/webdriver/tests/print/printcmd.py:
* imported/w3c/webdriver/tests/support/asserts.py:
* imported/w3c/webdriver/tests/support/fixtures.py:
* imported/w3c/webdriver/tests/support/fixtures_bidi.py: Added.
* imported/w3c/webdriver/tests/support/fixtures_http.py: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/WebDriverTests/ChangeLog (288870 => 288871)


--- trunk/WebDriverTests/ChangeLog	2022-02-01 10:26:28 UTC (rev 288870)
+++ trunk/WebDriverTests/ChangeLog	2022-02-01 10:32:27 UTC (rev 288871)
@@ -1,3 +1,22 @@
+2022-02-01  Carlos Garcia Campos  <[email protected]>
+
+        Unreviewed. Update W3C WebDriver imported tests.
+
+        * imported/w3c/importer.json:
+        * imported/w3c/tools/webdriver/webdriver/bidi/client.py:
+        * imported/w3c/tools/webdriver/webdriver/client.py:
+        * imported/w3c/tools/wptrunner/wptrunner/browsers/firefox_android.py:
+        * imported/w3c/webdriver/tests/conftest.py:
+        * imported/w3c/webdriver/tests/find_element_from_shadow_root/find.py:
+        * imported/w3c/webdriver/tests/find_element_from_shadow_root/user_prompts.py:
+        * imported/w3c/webdriver/tests/find_elements_from_shadow_root/find.py:
+        * imported/w3c/webdriver/tests/find_elements_from_shadow_root/user_prompts.py:
+        * imported/w3c/webdriver/tests/print/printcmd.py:
+        * imported/w3c/webdriver/tests/support/asserts.py:
+        * imported/w3c/webdriver/tests/support/fixtures.py:
+        * imported/w3c/webdriver/tests/support/fixtures_bidi.py: Added.
+        * imported/w3c/webdriver/tests/support/fixtures_http.py: Added.
+
 2021-11-19  Lauro Moura  <[email protected]>
 
         [GLIB][WebDriver] Gardening COOP-related timeouts

Modified: trunk/WebDriverTests/TestExpectations.json (288870 => 288871)


--- trunk/WebDriverTests/TestExpectations.json	2022-02-01 10:26:28 UTC (rev 288870)
+++ trunk/WebDriverTests/TestExpectations.json	2022-02-01 10:32:27 UTC (rev 288871)
@@ -1589,6 +1589,9 @@
     "imported/w3c/webdriver/tests/bidi/new_session/connect.py": {
         "expected": { "all": { "status": ["SKIP"], "bug": "webkit.org/b/230615"}}
     },
+    "imported/w3c/webdriver/tests/bidi/session_subscribe/subscribe.py": {
+        "expected": { "all": { "status": ["SKIP"], "bug": "webkit.org/b/230615"}}
+    },
     "imported/w3c/webdriver/tests/new_session/websocket_url.py": {
         "expected": { "all": { "status": ["SKIP"], "bug": "webkit.org/b/230615"}}
     }

Modified: trunk/WebDriverTests/imported/w3c/importer.json (288870 => 288871)


--- trunk/WebDriverTests/imported/w3c/importer.json	2022-02-01 10:26:28 UTC (rev 288870)
+++ trunk/WebDriverTests/imported/w3c/importer.json	2022-02-01 10:32:27 UTC (rev 288871)
@@ -1,6 +1,6 @@
 {
     "repository": "https://github.com/w3c/web-platform-tests.git",
-    "revision": "eb8bdce552a2a9b10010f7755ed9d8d0773d548e",
+    "revision": "db065869e8ff859e7d297b04b21115a9669da745",
     "paths_to_import": [
         "tools/webdriver",
         "tools/wptrunner",

Modified: trunk/WebDriverTests/imported/w3c/tools/webdriver/webdriver/bidi/client.py (288870 => 288871)


--- trunk/WebDriverTests/imported/w3c/tools/webdriver/webdriver/bidi/client.py	2022-02-01 10:26:28 UTC (rev 288870)
+++ trunk/WebDriverTests/imported/w3c/tools/webdriver/webdriver/bidi/client.py	2022-02-01 10:32:27 UTC (rev 288871)
@@ -9,17 +9,11 @@
 
 import websockets
 
+from .error import from_error_details
 
 logger = logging.getLogger("webdriver.bidi")
 
 
-class BidiException(Exception):
-    def __init__(self, err: str, msg: str, stack: Optional[str] = None):
-        self.err = err
-        self.msg = msg
-        self.stack = stack
-
-
 def get_running_loop() -> asyncio.AbstractEventLoop:
     if sys.version_info >= (3, 7):
         return asyncio.get_running_loop()
@@ -183,9 +177,10 @@
             elif "error" in data and "message" in data:
                 assert isinstance(data["error"], str)
                 assert isinstance(data["message"], str)
-                future.set_exception(BidiException(data["error"],
-                                                   data["message"],
-                                                   data.get("stacktrace")))
+                exception = from_error_details(data["error"],
+                                               data["message"],
+                                               data.get("stacktrace"))
+                future.set_exception(exception)
             else:
                 raise ValueError(f"Unexpected message: {data!r}")
         elif "method" in data and "params" in data:
@@ -365,9 +360,9 @@
 
     @command
     def subscribe(self,
-                  events: Optional[List[str]] = None,
+                  events: List[str],
                   contexts: Optional[List[str]] = None) -> Mapping[str, Any]:
-        params: MutableMapping[str, Any] = {"events": events if events is not None else []}
+        params: MutableMapping[str, Any] = {"events": events}
         if contexts is not None:
             params["contexts"] = contexts
         return params

Modified: trunk/WebDriverTests/imported/w3c/tools/webdriver/webdriver/client.py (288870 => 288871)


--- trunk/WebDriverTests/imported/w3c/tools/webdriver/webdriver/client.py	2022-02-01 10:26:28 UTC (rev 288870)
+++ trunk/WebDriverTests/imported/w3c/tools/webdriver/webdriver/client.py	2022-02-01 10:32:27 UTC (rev 288871)
@@ -392,7 +392,7 @@
     @classmethod
     def from_json(cls, json, session):
         uuid = json[ShadowRoot.identifier]
-        return cls(uuid, session)
+        return cls(session, uuid)
 
     def send_shadow_command(self, method, uri, body=None):
         url = "" uri)

Modified: trunk/WebDriverTests/imported/w3c/tools/wptrunner/wptrunner/browsers/firefox_android.py (288870 => 288871)


--- trunk/WebDriverTests/imported/w3c/tools/wptrunner/wptrunner/browsers/firefox_android.py	2022-02-01 10:26:28 UTC (rev 288870)
+++ trunk/WebDriverTests/imported/w3c/tools/wptrunner/wptrunner/browsers/firefox_android.py	2022-02-01 10:32:27 UTC (rev 288871)
@@ -8,13 +8,14 @@
                    browser_command)
 from ..executors.executormarionette import (MarionetteTestharnessExecutor,  # noqa: F401
                                             MarionetteRefTestExecutor,  # noqa: F401
-                                            MarionetteCrashtestExecutor)  # noqa: F401
+                                            MarionetteCrashtestExecutor,  # noqa: F401
+                                            MarionetteWdspecExecutor)  # noqa: F401
 from .base import (Browser,
                    ExecutorBrowser)
 from .firefox import (get_timeout_multiplier,  # noqa: F401
                       run_info_extras as fx_run_info_extras,
                       update_properties,  # noqa: F401
-                      executor_kwargs,  # noqa: F401
+                      executor_kwargs as fx_executor_kwargs,  # noqa: F401
                       ProfileCreator as FirefoxProfileCreator)
 
 
@@ -23,7 +24,8 @@
                  "browser": "FirefoxAndroidBrowser",
                  "executor": {"testharness": "MarionetteTestharnessExecutor",
                               "reftest": "MarionetteRefTestExecutor",
-                              "crashtest": "MarionetteCrashtestExecutor"},
+                              "crashtest": "MarionetteCrashtestExecutor",
+                              "wdspec": "MarionetteWdspecExecutor"},
                  "browser_kwargs": "browser_kwargs",
                  "executor_kwargs": "executor_kwargs",
                  "env_extras": "env_extras",
@@ -66,6 +68,15 @@
             "specialpowers_path": kwargs["specialpowers_path"]}
 
 
+def executor_kwargs(logger, test_type, test_environment, run_info_data,
+                    **kwargs):
+    rv = fx_executor_kwargs(logger, test_type, test_environment, run_info_data,
+                            **kwargs)
+    if test_type == "wdspec":
+        rv["capabilities"]["moz:firefoxOptions"]["androidPackage"] = kwargs["package_name"]
+    return rv
+
+
 def env_extras(**kwargs):
     return []
 

Modified: trunk/WebDriverTests/imported/w3c/webdriver/tests/conftest.py (288870 => 288871)


--- trunk/WebDriverTests/imported/w3c/webdriver/tests/conftest.py	2022-02-01 10:26:28 UTC (rev 288870)
+++ trunk/WebDriverTests/imported/w3c/webdriver/tests/conftest.py	2022-02-01 10:32:27 UTC (rev 288871)
@@ -1 +1,5 @@
-pytest_plugins = "tests.support.fixtures"
+pytest_plugins = (
+    "tests.support.fixtures",
+    "tests.support.fixtures_bidi",
+    "tests.support.fixtures_http",
+)

Modified: trunk/WebDriverTests/imported/w3c/webdriver/tests/find_element_from_shadow_root/find.py (288870 => 288871)


--- trunk/WebDriverTests/imported/w3c/webdriver/tests/find_element_from_shadow_root/find.py	2022-02-01 10:26:28 UTC (rev 288870)
+++ trunk/WebDriverTests/imported/w3c/webdriver/tests/find_element_from_shadow_root/find.py	2022-02-01 10:32:27 UTC (rev 288871)
@@ -54,7 +54,7 @@
     shadow_root = custom_element.shadow_root
     session.refresh()
 
-    response = find_element(session, shadow_root.id, "css", "input")
+    response = find_element(session, shadow_root.id, "css selector", "input")
     assert_error(response, "detached shadow root")
 
 
@@ -64,7 +64,7 @@
     expected = session.execute_script("return arguments[0].shadowRoot.querySelector('input')",
                                       args=(custom_element,))
     shadow_root = custom_element.shadow_root
-    response = find_element(session, shadow_root.id, "css", "input")
+    response = find_element(session, shadow_root.id, "css selector", "input")
     value = assert_success(response)
     assert_same_element(session, value, expected)
 
@@ -83,7 +83,7 @@
                                       args=(custom_element,))
     shadow_root = custom_element.shadow_root
     response = find_element(session, shadow_root.id, using, value)
-    assert_success(response)
+    value = assert_success(response)
     assert_same_element(session, value, expected)
 
 
@@ -104,7 +104,7 @@
     shadow_root = custom_element.shadow_root
 
     response = find_element(session, shadow_root.id, "link text", value)
-    assert_success(response)
+    value = assert_success(response)
     assert_same_element(session, value, expected)
 
 
@@ -126,7 +126,7 @@
     shadow_root = custom_element.shadow_root
 
     response = find_element(session, shadow_root.id, "partial link text", value)
-    assert_success(response)
+    value = assert_success(response)
     assert_same_element(session, value, expected)
 
 

Modified: trunk/WebDriverTests/imported/w3c/webdriver/tests/find_element_from_shadow_root/user_prompts.py (288870 => 288871)


--- trunk/WebDriverTests/imported/w3c/webdriver/tests/find_element_from_shadow_root/user_prompts.py	2022-02-01 10:26:28 UTC (rev 288870)
+++ trunk/WebDriverTests/imported/w3c/webdriver/tests/find_element_from_shadow_root/user_prompts.py	2022-02-01 10:32:27 UTC (rev 288871)
@@ -14,7 +14,7 @@
     return session.transport.send(
         "POST", "session/{session_id}/shadow/{shadow_id}/element".format(
             session_id=session.session_id,
-            element_id=shadow_id),
+            shadow_id=shadow_id),
         {"using": using, "value": value})
 
 

Modified: trunk/WebDriverTests/imported/w3c/webdriver/tests/find_elements_from_shadow_root/find.py (288870 => 288871)


--- trunk/WebDriverTests/imported/w3c/webdriver/tests/find_elements_from_shadow_root/find.py	2022-02-01 10:26:28 UTC (rev 288870)
+++ trunk/WebDriverTests/imported/w3c/webdriver/tests/find_elements_from_shadow_root/find.py	2022-02-01 10:32:27 UTC (rev 288871)
@@ -13,8 +13,8 @@
         {"using": using, "value": value})
 
 
-def test_null_parameter_value(session, http, inline):
-    session.url = "" href=# id=linkText>full link text</a></div>")
+def test_null_parameter_value(session, http, get_shadow_page):
+    session.url = "" href=# id=linkText>full link text</a></div>")
     custom_element = session.find.css("custom-shadow-element", all=False)
     shadow_root = custom_element.shadow_root
 
@@ -54,7 +54,7 @@
     shadow_root = custom_element.shadow_root
     session.refresh()
 
-    response = find_elements(session, shadow_root.id, "css", "input")
+    response = find_elements(session, shadow_root.id, "css selector", "input")
     assert_error(response, "detached shadow root")
 
 
@@ -62,7 +62,7 @@
     session.url = "" id='check' type='checkbox'/><input id='text'/></div>")
     custom_element = session.find.css("custom-shadow-element", all=False)
     shadow_root = custom_element.shadow_root
-    response = find_elements(session, shadow_root.id, "css", "input")
+    response = find_elements(session, shadow_root.id, "css selector", "input")
     assert_success(response)
 
 
@@ -92,7 +92,6 @@
 def test_find_elements_link_text(session, get_shadow_page, document, value):
     # Step 8 - 9
     session.url = "" href="" wanted</a><br/>{0}</div>".format(document))
-    element = session.find.css("div", all=False)
     custom_element = session.find.css("custom-shadow-element", all=False)
     shadow_root = custom_element.shadow_root
     expected = session.execute_script("return arguments[0].shadowRoot.querySelectorAll('a')[1]",
@@ -119,7 +118,6 @@
 def test_find_elements_partial_link_text(session, get_shadow_page, document, value):
     # Step 8 - 9
     session.url = "" href="" wanted</a><br/>{0}</div>".format(document))
-    element = session.find.css("div", all=False)
     custom_element = session.find.css("custom-shadow-element", all=False)
     shadow_root = custom_element.shadow_root
     expected = session.execute_script("return arguments[0].shadowRoot.querySelectorAll('a')[1]",

Modified: trunk/WebDriverTests/imported/w3c/webdriver/tests/find_elements_from_shadow_root/user_prompts.py (288870 => 288871)


--- trunk/WebDriverTests/imported/w3c/webdriver/tests/find_elements_from_shadow_root/user_prompts.py	2022-02-01 10:26:28 UTC (rev 288870)
+++ trunk/WebDriverTests/imported/w3c/webdriver/tests/find_elements_from_shadow_root/user_prompts.py	2022-02-01 10:32:27 UTC (rev 288871)
@@ -14,7 +14,7 @@
     return session.transport.send(
         "POST", "session/{session_id}/shadow/{shadow_id}/elements".format(
             session_id=session.session_id,
-            element_id=shadow_id),
+            shadow_id=shadow_id),
         {"using": using, "value": value})
 
 

Modified: trunk/WebDriverTests/imported/w3c/webdriver/tests/print/printcmd.py (288870 => 288871)


--- trunk/WebDriverTests/imported/w3c/webdriver/tests/print/printcmd.py	2022-02-01 10:26:28 UTC (rev 288870)
+++ trunk/WebDriverTests/imported/w3c/webdriver/tests/print/printcmd.py	2022-02-01 10:32:27 UTC (rev 288871)
@@ -41,7 +41,42 @@
     # TODO: Test that the output is reasonable
     assert_pdf(pdf)
 
+def test_large_html_document(session, inline):
+    session.url = "" id=\"image\"></canvas>")
 
+    session.execute_script(
+        """
+        const width = 700;
+        const height = 900;
+
+        const canvas = document.getElementById("image");
+        const context = canvas.getContext("2d");
+
+        canvas.width = width;
+        canvas.height = height;
+
+        for (let x = 0; x < width; ++x) {
+            for (let y = 0; y < height; ++y) {
+                const colourHex = Math.floor(Math.random() * 0xffffff).toString(16);
+
+                context.fillStyle = `#${colourHex}`;
+                context.fillRect(x, y, 1, 1);
+            }
+        }
+        """
+    )
+
+    response = do_print(session, {})
+    value = assert_success(response)
+    pdf = decodebytes(value.encode())
+
+    # This was added to test the fix for a bug in firefox where a PDF larger
+    # than 500kb would cause an error. If the resulting PDF is smaller than that
+    # it could pass incorrectly.
+    assert len(pdf) > 500000
+    assert_pdf(pdf)
+
+
 @pytest.mark.parametrize("options", [{"orientation": 0},
                                      {"orientation": "foo"},
                                      {"scale": "1"},

Modified: trunk/WebDriverTests/imported/w3c/webdriver/tests/support/asserts.py (288870 => 288871)


--- trunk/WebDriverTests/imported/w3c/webdriver/tests/support/asserts.py	2022-02-01 10:26:28 UTC (rev 288870)
+++ trunk/WebDriverTests/imported/w3c/webdriver/tests/support/asserts.py	2022-02-01 10:32:27 UTC (rev 288871)
@@ -7,6 +7,7 @@
 
 # WebDriver specification ID: dfn-error-response-data
 errors = {
+    "detached shadow root": 404,
     "element click intercepted": 400,
     "element not selectable": 400,
     "element not interactable": 400,
@@ -23,6 +24,7 @@
     "no such cookie": 404,
     "no such element": 404,
     "no such frame": 404,
+    "no such shadow root": 404,
     "no such window": 404,
     "script timeout": 500,
     "session not created": 500,

Modified: trunk/WebDriverTests/imported/w3c/webdriver/tests/support/fixtures.py (288870 => 288871)


--- trunk/WebDriverTests/imported/w3c/webdriver/tests/support/fixtures.py	2022-02-01 10:26:28 UTC (rev 288870)
+++ trunk/WebDriverTests/imported/w3c/webdriver/tests/support/fixtures.py	2022-02-01 10:32:27 UTC (rev 288871)
@@ -12,7 +12,6 @@
 from tests.support.helpers import cleanup_session, deep_update
 from tests.support.inline import build_inline
 from tests.support.http_request import HTTPRequest
-from tests.support.sync import Poll
 
 
 _current_session = None
@@ -21,8 +20,10 @@
 
 def pytest_configure(config):
     # register the capabilities marker
-    config.addinivalue_line("markers",
-        "capabilities: mark test to use capabilities")
+    config.addinivalue_line(
+        "markers",
+        "capabilities: mark test to use capabilities"
+    )
 
 
 @pytest.fixture
@@ -38,9 +39,9 @@
             metafunc.parametrize("capabilities", marker.args, ids=None)
 
 
-# Ensure that the event loop is restarted once per session rather than the default  of once per test
-# if we don't do this, tests will try to reuse a closed event loop and fail with an error that the "future
-# belongs to a different loop"
+# Ensure that the event loop is restarted once per session rather than the default
+# of once per test. If we don't do this, tests will try to reuse a closed event
+# loop and fail with an error that the "future belongs to a different loop".
 @pytest.fixture(scope="session")
 def event_loop():
     """Change event_loop fixture to session level."""
@@ -50,55 +51,6 @@
 
 
 @pytest.fixture
-def add_event_listeners(session):
-    """Register listeners for tracked events on element."""
-    def add_event_listeners(element, tracked_events):
-        element.session.execute_script("""
-            let element = arguments[0];
-            let trackedEvents = arguments[1];
-
-            if (!("events" in window)) {
-              window.events = [];
-            }
-
-            for (var i = 0; i < trackedEvents.length; i++) {
-              element.addEventListener(trackedEvents[i], function (event) {
-                window.events.push(event.type);
-              });
-            }
-            """, args=(element, tracked_events))
-    return add_event_listeners
-
-
[email protected]
-def create_cookie(session, url):
-    """Create a cookie"""
-    def create_cookie(name, value, **kwargs):
-        if kwargs.get("path", None) is not None:
-            session.url = ""
-
-        session.set_cookie(name, value, **kwargs)
-        return session.cookies(name)
-
-    return create_cookie
-
-
[email protected]
-def create_frame(session):
-    """Create an `iframe` element in the current browsing context and insert it
-    into the document. Return a reference to the newly-created element."""
-    def create_frame():
-        append = """
-            var frame = document.createElement('iframe');
-            document.body.appendChild(frame);
-            return frame;
-        """
-        return session.execute_script(append)
-
-    return create_frame
-
-
[email protected]
 def http(configuration):
     return HTTPRequest(configuration["host"], configuration["port"])
 
@@ -122,14 +74,14 @@
     }
 
 
-async def reset_current_session_if_necessary(caps, request_bidi):
+async def reset_current_session_if_necessary(caps):
     global _current_session
 
-    # If there is a session with different capabilities active or the current session
-    # is of different type than the one we would like to create, end it now.
+    # If there is a session with different requested capabilities active than
+    # the one we would like to create, end it now.
     if _current_session is not None:
-        is_bidi = isinstance(_current_session, webdriver.BidiSession)
-        if is_bidi != request_bidi or not _current_session.match(caps):
+        if not _current_session.match(caps):
+            is_bidi = isinstance(_current_session, webdriver.BidiSession)
             if is_bidi:
                 await _current_session.end()
             else:
@@ -144,7 +96,8 @@
     By default the session will stay open after each test, but we always try to start a
     new one and assume that if that fails there is already a valid session. This makes it
     possible to recover from some errors that might leave the session in a bad state, but
-    does not demand that we start a new session per test."""
+    does not demand that we start a new session per test.
+    """
     global _current_session
 
     # Update configuration capabilities with custom ones from the
@@ -153,7 +106,7 @@
     deep_update(caps, capabilities)
     caps = {"alwaysMatch": caps}
 
-    await reset_current_session_if_necessary(caps, False)
+    await reset_current_session_if_necessary(caps)
 
     if _current_session is None:
         _current_session = webdriver.Session(
@@ -168,8 +121,9 @@
             raise
 
     # Enforce a fixed default window size and position
-    _current_session.window.size = defaults.WINDOW_SIZE
-    _current_session.window.position = defaults.WINDOW_POSITION
+    if _current_session.capabilities.get("setWindowRect"):
+        _current_session.window.size = defaults.WINDOW_SIZE
+        _current_session.window.position = defaults.WINDOW_POSITION
 
     yield _current_session
 
@@ -178,21 +132,25 @@
 
 @pytest.fixture(scope="function")
 async def bidi_session(capabilities, configuration, request):
-    """Create and start a bidi session for a test that does not itself test
-    bidi session creation.
+    """Create and start a bidi session.
+
+    Can be used for a test that does not itself test bidi session creation.
+
     By default the session will stay open after each test, but we always try to start a
     new one and assume that if that fails there is already a valid session. This makes it
     possible to recover from some errors that might leave the session in a bad state, but
-    does not demand that we start a new session per test."""
+    does not demand that we start a new session per test.
+    """
     global _current_session
 
     # Update configuration capabilities with custom ones from the
     # capabilities fixture, which can be set by tests
     caps = copy.deepcopy(configuration["capabilities"])
+    caps.update({"webSocketUrl": True})
     deep_update(caps, capabilities)
     caps = {"alwaysMatch": caps}
 
-    await reset_current_session_if_necessary(caps, True)
+    await reset_current_session_if_necessary(caps)
 
     if _current_session is None:
         _current_session = webdriver.Session(
@@ -235,93 +193,8 @@
 
 
 @pytest.fixture
-def create_dialog(session):
-    """Create a dialog (one of "alert", "prompt", or "confirm") and provide a
-    function to validate that the dialog has been "handled" (either accepted or
-    dismissed) by returning some value."""
-
-    def create_dialog(dialog_type, text=None):
-        assert dialog_type in ("alert", "confirm", "prompt"), (
-            "Invalid dialog type: '%s'" % dialog_type)
-
-        if text is None:
-            text = ""
-
-        assert isinstance(text, str), "`text` parameter must be a string"
-
-        # Script completes itself when the user prompt has been opened.
-        # For prompt() dialogs, add a value for the 'default' argument,
-        # as some user agents (IE, for example) do not produce consistent
-        # values for the default.
-        session.execute_async_script("""
-            let dialog_type = arguments[0];
-            let text = arguments[1];
-
-            setTimeout(function() {
-              if (dialog_type == 'prompt') {
-                window.dialog_return_value = window[dialog_type](text, '');
-              } else {
-                window.dialog_return_value = window[dialog_type](text);
-              }
-            }, 0);
-            """, args=(dialog_type, text))
-
-        wait = Poll(
-            session,
-            timeout=15,
-            ignored_exceptions=webdriver.NoSuchAlertException,
-            message="No user prompt with text '{}' detected".format(text))
-        wait.until(lambda s: s.alert.text == text)
-
-    return create_dialog
-
-
[email protected]
-def closed_frame(session, url):
-    original_handle = session.window_handle
-    new_handle = session.new_window()
-
-    session.window_handle = new_handle
-
-    session.url = ""
-
-    subframe = session.find.css("#sub-frame", all=False)
-    session.switch_frame(subframe)
-
-    deleteframe = session.find.css("#delete-frame", all=False)
-    session.switch_frame(deleteframe)
-
-    button = session.find.css("#remove-parent", all=False)
-    button.click()
-
-    yield
-
-    session.window.close()
-    assert new_handle not in session.handles, "Unable to close window {}".format(new_handle)
-
-    session.window_handle = original_handle
-
-
[email protected]
-def closed_window(session, inline):
-    original_handle = session.window_handle
-    new_handle = session.new_window()
-
-    session.window_handle = new_handle
-    session.url = "" id='a' value='b'>")
-    element = session.find.css("input", all=False)
-
-    session.window.close()
-    assert new_handle not in session.handles, "Unable to close window {}".format(new_handle)
-
-    yield (original_handle, element)
-
-    session.window_handle = original_handle
-
-
[email protected]
 def inline(url):
-    """Takes a source extract and produces well-formed documents.
+    """Take a source extract and produces well-formed documents.
 
     Based on the desired document type, the extract is embedded with
     predefined boilerplate in order to produce well-formed documents.
@@ -349,7 +222,7 @@
 
 @pytest.fixture
 def iframe(inline):
-    """Inlines document extract as the source document of an <iframe>."""
+    """Inline document extract as the source document of an <iframe>."""
     def iframe(src, **kwargs):
         return "<iframe src=''></iframe>".format(inline(src, **kwargs))
 

Added: trunk/WebDriverTests/imported/w3c/webdriver/tests/support/fixtures_bidi.py (0 => 288871)


--- trunk/WebDriverTests/imported/w3c/webdriver/tests/support/fixtures_bidi.py	                        (rev 0)
+++ trunk/WebDriverTests/imported/w3c/webdriver/tests/support/fixtures_bidi.py	2022-02-01 10:32:27 UTC (rev 288871)
@@ -0,0 +1,14 @@
+import asyncio
+from typing import Any, Mapping
+
+import pytest
+import webdriver
+
+
[email protected]
+def send_blocking_command(bidi_session):
+    """Send a blocking command that awaits until the BiDi response has been received."""
+    async def send_blocking_command(command: str, params: Mapping[str, Any]) -> Mapping[str, Any]:
+        future_response = await bidi_session.send_command(command, params)
+        return await future_response
+    return send_blocking_command

Added: trunk/WebDriverTests/imported/w3c/webdriver/tests/support/fixtures_http.py (0 => 288871)


--- trunk/WebDriverTests/imported/w3c/webdriver/tests/support/fixtures_http.py	                        (rev 0)
+++ trunk/WebDriverTests/imported/w3c/webdriver/tests/support/fixtures_http.py	2022-02-01 10:32:27 UTC (rev 288871)
@@ -0,0 +1,152 @@
+import pytest
+from webdriver.error import NoSuchAlertException
+
+from tests.support.sync import Poll
+
+
[email protected]
+def add_event_listeners(session):
+    """Register listeners for tracked events on element."""
+    def add_event_listeners(element, tracked_events):
+        element.session.execute_script("""
+            let element = arguments[0];
+            let trackedEvents = arguments[1];
+
+            if (!("events" in window)) {
+              window.events = [];
+            }
+
+            for (var i = 0; i < trackedEvents.length; i++) {
+              element.addEventListener(trackedEvents[i], function (event) {
+                window.events.push(event.type);
+              });
+            }
+            """, args=(element, tracked_events))
+    return add_event_listeners
+
+
[email protected]
+def closed_frame(session, url):
+    """Create a frame and remove it after switching to it.
+
+    The removed frame will be kept selected, which allows to test for invalid
+    browsing context references.
+    """
+    original_handle = session.window_handle
+    new_handle = session.new_window()
+
+    session.window_handle = new_handle
+
+    session.url = ""
+
+    subframe = session.find.css("#sub-frame", all=False)
+    session.switch_frame(subframe)
+
+    deleteframe = session.find.css("#delete-frame", all=False)
+    session.switch_frame(deleteframe)
+
+    button = session.find.css("#remove-parent", all=False)
+    button.click()
+
+    yield
+
+    session.window.close()
+    assert new_handle not in session.handles, "Unable to close window {}".format(new_handle)
+
+    session.window_handle = original_handle
+
+
[email protected]
+def closed_window(session, inline):
+    """Create a window and close it immediately.
+
+    The window handle will be kept selected, which allows to test for invalid
+    top-level browsing context references.
+    """
+    original_handle = session.window_handle
+    new_handle = session.new_window()
+
+    session.window_handle = new_handle
+    session.url = "" id='a' value='b'>")
+    element = session.find.css("input", all=False)
+
+    session.window.close()
+    assert new_handle not in session.handles, "Unable to close window {}".format(new_handle)
+
+    yield (original_handle, element)
+
+    session.window_handle = original_handle
+
+
[email protected]
+def create_cookie(session, url):
+    """Create a cookie."""
+    def create_cookie(name, value, **kwargs):
+        if kwargs.get("path", None) is not None:
+            session.url = ""
+
+        session.set_cookie(name, value, **kwargs)
+        return session.cookies(name)
+
+    return create_cookie
+
+
[email protected]
+def create_dialog(session):
+    """Create a dialog (one of "alert", "prompt", or "confirm").
+
+    Also it provides a function to validate that the dialog has been "handled"
+    (either accepted or dismissed) by returning some value.
+    """
+    def create_dialog(dialog_type, text=None):
+        assert dialog_type in ("alert", "confirm", "prompt"), (
+            "Invalid dialog type: '%s'" % dialog_type)
+
+        if text is None:
+            text = ""
+
+        assert isinstance(text, str), "`text` parameter must be a string"
+
+        # Script completes itself when the user prompt has been opened.
+        # For prompt() dialogs, add a value for the 'default' argument,
+        # as some user agents (IE, for example) do not produce consistent
+        # values for the default.
+        session.execute_async_script("""
+            let dialog_type = arguments[0];
+            let text = arguments[1];
+
+            setTimeout(function() {
+              if (dialog_type == 'prompt') {
+                window.dialog_return_value = window[dialog_type](text, '');
+              } else {
+                window.dialog_return_value = window[dialog_type](text);
+              }
+            }, 0);
+            """, args=(dialog_type, text))
+
+        wait = Poll(
+            session,
+            timeout=15,
+            ignored_exceptions=NoSuchAlertException,
+            message="No user prompt with text '{}' detected".format(text))
+        wait.until(lambda s: s.alert.text == text)
+
+    return create_dialog
+
+
[email protected]
+def create_frame(session):
+    """Create an `iframe` element.
+
+    The element will be inserted into the document of the current browsing
+    context. Return a reference to the newly-created element.
+    """
+    def create_frame():
+        append = """
+            var frame = document.createElement('iframe');
+            document.body.appendChild(frame);
+            return frame;
+        """
+        return session.execute_script(append)
+
+    return create_frame
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to