[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)