Bug 1411281 - Associate web element identifier with webdriver.Element
MozReview-Commit-ID: Fqw3EJnJCsD
--- 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: