[wdspec] Enhance "Get Element Property" tests for Web References.
Differential Revision: https://phabricator.services.mozilla.com/D154220
bugzilla-url: https://bugzilla.mozilla.org/show_bug.cgi?id=1398792
gecko-commit: bab0dfba4a7cbd0336ea25b92f66e5efef47a0c3
gecko-reviewers: webdriver-reviewers, jdescottes
diff --git a/webdriver/tests/get_element_property/get.py b/webdriver/tests/get_element_property/get.py
index 6c15545..46755ff 100644
--- a/webdriver/tests/get_element_property/get.py
+++ b/webdriver/tests/get_element_property/get.py
@@ -1,6 +1,7 @@
import pytest
+from webdriver import Element, Frame, ShadowRoot, Window
-from tests.support.asserts import assert_error, assert_success
+from tests.support.asserts import assert_error, assert_same_element, assert_success
def get_element_property(session, element_id, prop):
@@ -107,6 +108,46 @@
assert_success(response, py_primitive)
+@pytest.mark.parametrize("js_web_reference,py_web_reference", [
+ ("element", Element),
+ ("frame", Frame),
+ ("shadowRoot", ShadowRoot),
+ ("window", Window),
+])
+def test_web_reference(session, inline, js_web_reference, py_web_reference):
+ session.url = inline("""
+ <div id="parent"></div>
+ <p id="element"></p>
+ <iframe id="frame"></iframe>
+ <shadow-element id="custom"></shadow-element>
+
+ <script>
+ customElements.define("shadow-element",
+ class extends HTMLElement {
+ constructor() {
+ super();
+ this.attachShadow({ mode: "open" }).innerHTML = "<p>foo";
+ }
+ }
+ );
+
+ const parent = document.getElementById("parent");
+ parent.__element = document.getElementById("element");
+ parent.__frame = document.getElementById("frame").contentWindow;
+ parent.__shadowRoot = document.getElementById("custom").shadowRoot;
+ parent.__window = document.defaultView;
+ </script>
+ """)
+
+ elem = session.find.css("#parent", all=False)
+ response = get_element_property(session, elem.id, "__{}".format(js_web_reference))
+ value = assert_success(response)
+
+ assert isinstance(value, dict)
+ assert py_web_reference.identifier in value
+ assert isinstance(value[py_web_reference.identifier], str)
+
+
def test_mutated_element(session, inline):
session.url = inline("<input type=checkbox>")
element = session.find.css("input", all=False)