Bug 1411281 - Associate web element identifier with webdriver.Element draft
authorAndreas Tolfsen <ato@sny.no>
Wed, 25 Oct 2017 09:57:13 +0100
changeset 688664 5fed65a031196d541a9676db83c2b37bd8cba9f8
parent 688663 1c618b1a13662de7cec429f606367db3827b6dc7
child 688665 aca4bc61b314975d9830101b37507735c4e466c7
push id86818
push userbmo:ato@sny.no
push dateMon, 30 Oct 2017 13:42:30 +0000
bugs1411281
milestone58.0a1
Bug 1411281 - Associate web element identifier with webdriver.Element MozReview-Commit-ID: Fqw3EJnJCsD
testing/web-platform/tests/tools/webdriver/webdriver/client.py
testing/web-platform/tests/webdriver/tests/support/asserts.py
--- a/testing/web-platform/tests/tools/webdriver/webdriver/client.py
+++ b/testing/web-platform/tests/tools/webdriver/webdriver/client.py
@@ -3,18 +3,16 @@ import urlparse
 
 import error
 import transport
 
 from mozlog import get_default_logger
 
 logger = get_default_logger()
 
-element_key = "element-6066-11e4-a52e-4f735466cecf"
-
 
 def command(func):
     def inner(self, *args, **kwargs):
         if hasattr(self, "session"):
             session = self.session
         else:
             session = self
 
@@ -532,17 +530,17 @@ class Session(object):
     @property
     @command
     def active_element(self):
         data = self.send_session_command("GET", "element/active")
         if data is not None:
             return self._element(data)
 
     def _element(self, data):
-        elem_id = data[element_key]
+        elem_id = data[Element.identifier]
         assert elem_id
         if elem_id in self._element_cache:
             return self._element_cache[elem_id]
         return Element(self, elem_id)
 
     @command
     def cookies(self, name=None):
         if name is None:
@@ -599,28 +597,36 @@ class Session(object):
     #[...]
 
     @command
     def screenshot(self):
         return self.send_session_command("GET", "screenshot")
 
 
 class Element(object):
+    """
+    Representation of 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.
+    """
+    identifier = "element-6066-11e4-a52e-4f735466cecf"
+
     def __init__(self, session, id):
         self.session = session
         self.id = id
         assert id not in self.session._element_cache
         self.session._element_cache[self.id] = self
 
     def send_element_command(self, method, uri, body=None):
         url = "element/%s/%s" % (self.id, uri)
         return self.session.send_session_command(method, url, body)
 
     def json(self):
-        return {element_key: self.id}
+        return {Element.identifier: self.id}
 
     @command
     def find_element(self, strategy, selector):
         body = {"using": strategy,
                 "value": selector}
 
         elem = self.send_element_command("POST", "element", body)
         return self.session._element(elem)
--- a/testing/web-platform/tests/webdriver/tests/support/asserts.py
+++ b/testing/web-platform/tests/webdriver/tests/support/asserts.py
@@ -1,10 +1,9 @@
-from webdriver.client import Element, element_key
-from webdriver.error import WebDriverException
+from webdriver import Element, WebDriverException
 
 # WebDriver specification ID: dfn-error-response-data
 errors = {
     "element click intercepted": 400,
     "element not selectable": 400,
     "element not interactable": 400,
     "insecure certificate": 400,
     "invalid argument": 400,
@@ -100,20 +99,20 @@ def assert_dialog_handled(session, expec
                 result.body["value"] != expected_text), (
                "Dialog with text '%s' was not handled." % expected_text)
 
 
 def assert_same_element(session, a, b):
     """Verify that two element references describe the same element."""
     assert isinstance(a, dict), "Actual value is not a dictionary"
     assert isinstance(b, dict), "Expected value is not a dictionary"
-    assert element_key in a, "Actual value does not describe an element"
-    assert element_key in b, "Expected value does not describe an element"
+    assert Element.identifier in a, "Actual value does not describe an element"
+    assert Element.identifier in b, "Expected value does not describe an element"
 
-    if a[element_key] == b[element_key]:
+    if a[Element.identifier] == b[Element.identifier]:
         return
 
     message = ("Expected element references to describe the same element, " +
         "but they did not.")
 
     # Attempt to provide more information, accounting for possible errors such
     # as stale element references or not visible elements.
     try: