[wdspec] Improve stale element and detached shadow root tests.
Differential Revision: https://phabricator.services.mozilla.com/D179445
bugzilla-url: https://bugzilla.mozilla.org/show_bug.cgi?id=1822466
gecko-commit: 06767279ae13e109db05bab71f079e0485cfeec5
gecko-reviewers: webdriver-reviewers, jdescottes
diff --git a/webdriver/tests/classic/back/back.py b/webdriver/tests/classic/back/back.py
index 6243432..bc97a9e 100644
--- a/webdriver/tests/classic/back/back.py
+++ b/webdriver/tests/classic/back/back.py
@@ -33,21 +33,35 @@
assert_success(response)
-def test_basic(session, inline):
- url = inline("<div id=foo>")
+# Capability needed as long as no valid certificate is available:
+# https://github.com/web-platform-tests/wpt/issues/28847
+@pytest.mark.capabilities({"acceptInsecureCerts": True})
+@pytest.mark.parametrize("protocol,parameters", [
+ ("http", ""),
+ ("https", ""),
+ ("https", {"pipe": "header(Cross-Origin-Opener-Policy,same-origin)"})
+], ids=["http", "https", "https coop"])
+def test_seen_nodes(session, get_test_page, protocol, parameters):
+ first_page = get_test_page(parameters=parameters, protocol=protocol)
+ second_page = get_test_page(parameters=parameters, protocol=protocol, domain="alt")
- session.url = url
- session.url = inline("<div id=bar>")
- element = session.find.css("#bar", all=False)
+ session.url = first_page
+ session.url = second_page
+
+ element = session.find.css("#custom-element", all=False)
+ shadow_root = element.shadow_root
response = back(session)
assert_success(response)
- with pytest.raises(error.StaleElementReferenceException):
- element.property("id")
+ assert session.url == first_page
- assert session.url == url
- assert session.find.css("#foo", all=False)
+ with pytest.raises(error.StaleElementReferenceException):
+ element.name
+ with pytest.raises(error.DetachedShadowRootException):
+ shadow_root.find_element("css selector", "in-shadow-dom")
+
+ session.find.css("#custom-element", all=False)
def test_data_urls(session, inline):
@@ -143,27 +157,3 @@
assert_success(response)
assert session.url == page
-
-
-# Capability needed as long as no valid certificate is available:
-# https://github.com/web-platform-tests/wpt/issues/28847
-@pytest.mark.capabilities({"acceptInsecureCerts": True})
-def test_cross_origin(session, url):
- base_path = ("/webdriver/tests/support/html/subframe.html" +
- "?pipe=header(Cross-Origin-Opener-Policy,same-origin")
- first_page = url(base_path, protocol="https")
- second_page = url(base_path, protocol="https", domain="alt")
-
- session.url = first_page
- session.url = second_page
-
- elem = session.find.css("#delete", all=False)
-
- response = back(session)
- assert_success(response)
-
- assert session.url == first_page
-
- with pytest.raises(error.NoSuchElementException):
- elem.click()
- elem = session.find.css("#delete", all=False)
diff --git a/webdriver/tests/classic/element_click/navigate.py b/webdriver/tests/classic/element_click/navigate.py
index 4d1c482..96883ad 100644
--- a/webdriver/tests/classic/element_click/navigate.py
+++ b/webdriver/tests/classic/element_click/navigate.py
@@ -170,7 +170,7 @@
@pytest.mark.capabilities({"acceptInsecureCerts": True})
def test_link_cross_origin(session, inline, url):
base_path = ("/webdriver/tests/support/html/subframe.html" +
- "?pipe=header(Cross-Origin-Opener-Policy,same-origin")
+ "?pipe=header(Cross-Origin-Opener-Policy,same-origin)")
target_page = url(base_path, protocol="https", domain="alt")
session.url = inline("<a href='{}'>click me</a>".format(target_page), protocol="https")
diff --git a/webdriver/tests/classic/forward/forward.py b/webdriver/tests/classic/forward/forward.py
index f27be40..7945f18 100644
--- a/webdriver/tests/classic/forward/forward.py
+++ b/webdriver/tests/classic/forward/forward.py
@@ -61,6 +61,38 @@
assert element.property("id") == "foo"
+# Capability needed as long as no valid certificate is available:
+# https://github.com/web-platform-tests/wpt/issues/28847
+@pytest.mark.capabilities({"acceptInsecureCerts": True})
+@pytest.mark.parametrize("protocol,parameters", [
+ ("http", ""),
+ ("https", ""),
+ ("https", {"pipe": "header(Cross-Origin-Opener-Policy,same-origin)"})
+], ids=["http", "https", "https coop"])
+def test_seen_nodes(session, get_test_page, protocol, parameters):
+ first_page = get_test_page(parameters=parameters, protocol=protocol)
+ second_page = get_test_page(parameters=parameters, protocol=protocol, domain="alt")
+
+ session.url = first_page
+ session.url = second_page
+ session.back()
+
+ element = session.find.css("#custom-element", all=False)
+ shadow_root = element.shadow_root
+
+ response = forward(session)
+ assert_success(response)
+
+ assert session.url == second_page
+
+ with pytest.raises(error.StaleElementReferenceException):
+ element.name
+ with pytest.raises(error.DetachedShadowRootException):
+ shadow_root.find_element("css selector", "in-shadow-dom")
+
+ session.find.css("#custom-element", all=False)
+
+
def test_data_urls(session, inline):
test_pages = [
inline("<p id=1>"),
@@ -168,28 +200,3 @@
assert_success(response)
assert session.url == page
-
-
-# Capability needed as long as no valid certificate is available:
-# https://github.com/web-platform-tests/wpt/issues/28847
-@pytest.mark.capabilities({"acceptInsecureCerts": True})
-def test_cross_origin(session, url):
- base_path = ("/webdriver/tests/support/html/subframe.html" +
- "?pipe=header(Cross-Origin-Opener-Policy,same-origin")
- first_page = url(base_path, protocol="https")
- second_page = url(base_path, protocol="https", domain="alt")
-
- session.url = first_page
- session.url = second_page
- session.back()
-
- elem = session.find.css("#delete", all=False)
-
- response = forward(session)
- assert_success(response)
-
- assert session.url == second_page
-
- with pytest.raises(error.NoSuchElementException):
- elem.click()
- elem = session.find.css("#delete", all=False)
diff --git a/webdriver/tests/classic/get_window_handle/get.py b/webdriver/tests/classic/get_window_handle/get.py
index 68441da..50ff0d3 100644
--- a/webdriver/tests/classic/get_window_handle/get.py
+++ b/webdriver/tests/classic/get_window_handle/get.py
@@ -28,7 +28,7 @@
@pytest.mark.capabilities({"acceptInsecureCerts": True})
def test_navigation_with_coop_headers(session, url):
base_path = ("/webdriver/tests/support/html/subframe.html" +
- "?pipe=header(Cross-Origin-Opener-Policy,same-origin")
+ "?pipe=header(Cross-Origin-Opener-Policy,same-origin)")
session.url = url(base_path, protocol="https")
response = get_window_handle(session)
diff --git a/webdriver/tests/classic/navigate_to/navigate.py b/webdriver/tests/classic/navigate_to/navigate.py
index d61377a..a9ff3f6 100644
--- a/webdriver/tests/classic/navigate_to/navigate.py
+++ b/webdriver/tests/classic/navigate_to/navigate.py
@@ -39,45 +39,38 @@
assert session.url == doc
-def test_basic(session, inline):
- url = inline("<div id=foo>")
-
- session.url = inline("<div id=bar>")
- element = session.find.css("#bar", all=False)
-
- response = navigate_to(session, url)
- assert_success(response)
-
- with pytest.raises(error.StaleElementReferenceException):
- element.property("id")
-
- assert session.url == url
- assert session.find.css("#foo", all=False)
-
-
-# Capability needed as long as no valid certificate is available:
-# https://github.com/web-platform-tests/wpt/issues/28847
-@pytest.mark.capabilities({"acceptInsecureCerts": True})
-def test_cross_origin(session, inline, url):
- base_path = ("/webdriver/tests/support/html/subframe.html" +
- "?pipe=header(Cross-Origin-Opener-Policy,same-origin")
- first_page = url(base_path, protocol="https")
- second_page = url(base_path, protocol="https", domain="alt")
+@pytest.mark.parametrize("protocol,parameters", [
+ ("http", ""),
+ ("https", ""),
+ ("https", {"pipe": "header(Cross-Origin-Opener-Policy,same-origin)"})
+], ids=[
+ "http",
+ "https",
+ "https coop"
+])
+def test_seen_nodes(session, get_test_page, protocol, parameters):
+ first_page = get_test_page(parameters=parameters, protocol=protocol)
+ second_page = get_test_page(parameters=parameters, protocol=protocol, domain="alt")
response = navigate_to(session, first_page)
assert_success(response)
assert session.url == first_page
- elem = session.find.css("#delete", all=False)
+
+ element = session.find.css("#custom-element", all=False)
+ shadow_root = element.shadow_root
response = navigate_to(session, second_page)
assert_success(response)
assert session.url == second_page
- with pytest.raises(error.NoSuchElementException):
- elem.click()
- session.find.css("#delete", all=False)
+ with pytest.raises(error.StaleElementReferenceException):
+ element.name
+ with pytest.raises(error.DetachedShadowRootException):
+ shadow_root.find_element("css selector", "in-shadow-dom")
+
+ session.find.css("#custom-element", all=False)
@pytest.mark.capabilities({"pageLoadStrategy": "eager"})
diff --git a/webdriver/tests/classic/refresh/refresh.py b/webdriver/tests/classic/refresh/refresh.py
index b364713..93a71bb 100644
--- a/webdriver/tests/classic/refresh/refresh.py
+++ b/webdriver/tests/classic/refresh/refresh.py
@@ -39,20 +39,31 @@
assert session.find.css("#foo", all=False)
-def test_basic(session, inline):
- url = inline("<div id=foo>")
+# Capability needed as long as no valid certificate is available:
+# https://github.com/web-platform-tests/wpt/issues/28847
+@pytest.mark.capabilities({"acceptInsecureCerts": True})
+@pytest.mark.parametrize("protocol,parameters", [
+ ("http", ""),
+ ("https", ""),
+ ("https", {"pipe": "header(Cross-Origin-Opener-Policy,same-origin)"})
+], ids=["http", "https", "https coop"])
+def test_seen_nodes(session, get_test_page, protocol, parameters):
+ page = get_test_page(parameters=parameters, protocol=protocol)
- session.url = url
- element = session.find.css("#foo", all=False)
+ session.url = page
+
+ element = session.find.css("#custom-element", all=False)
+ shadow_root = element.shadow_root
response = refresh(session)
assert_success(response)
with pytest.raises(error.StaleElementReferenceException):
- element.property("id")
+ element.name
+ with pytest.raises(error.DetachedShadowRootException):
+ shadow_root.find_element("css selector", "in-shadow-dom")
- assert session.url == url
- assert session.find.css("#foo", all=False)
+ session.find.css("#custom-element", all=False)
def test_dismissed_beforeunload(session, inline):
diff --git a/webdriver/tests/support/fixtures.py b/webdriver/tests/support/fixtures.py
index eca9fda..ba166ae 100644
--- a/webdriver/tests/support/fixtures.py
+++ b/webdriver/tests/support/fixtures.py
@@ -280,7 +280,8 @@
frame_doc=None,
shadow_doc=None,
nested_shadow_dom=False,
- shadow_root_mode="open"
+ shadow_root_mode="open",
+ **kwargs
):
if frame_doc is None:
frame_doc = """<div id="in-frame"><input type="checkbox"/></div>"""
@@ -355,9 +356,10 @@
</script>"""
if as_frame:
- return inline(iframe(page_data))
+ iframe_data = iframe(page_data, **kwargs)
+ return inline(iframe_data, **kwargs)
else:
- return inline(page_data)
+ return inline(page_data, **kwargs)
return get_test_page
diff --git a/webdriver/tests/support/inline.py b/webdriver/tests/support/inline.py
index 494ca74..6f08a7c 100644
--- a/webdriver/tests/support/inline.py
+++ b/webdriver/tests/support/inline.py
@@ -25,14 +25,21 @@
}
-def build_inline(build_url, src, doctype="html", mime=None, charset=None, **kwargs):
+def build_inline(
+ build_url, src, doctype="html", mime=None, charset=None, parameters=None, **kwargs
+):
if mime is None:
mime = MIME_TYPES[doctype]
if charset is None:
charset = "UTF-8"
+ if parameters is None:
+ parameters = {}
+
doc = BOILERPLATES[doctype].format(charset=charset, src=src)
query = {"doc": doc, "mime": mime, "charset": charset}
+ query.update(parameters)
+
return build_url(
"/webdriver/tests/support/inline.py",
query=urlencode(query),