Bug 1376625 - Add Get Element Attribute wdspec tests r?ato draft
authorDavid Burns <dburns@mozilla.com>
Wed, 28 Jun 2017 19:53:05 +0100
changeset 649841 d011b189237d4aa44b6b60c174697adbda2ee6ba
parent 649840 2186f168ab69f70ca131e0699b0251e5cd0a4950
child 649842 0d8df433fe5b9eba3c1a837f78497c52d81b3a7b
push id75172
push userbmo:dburns@mozilla.com
push dateMon, 21 Aug 2017 11:20:34 +0000
reviewersato
bugs1376625
milestone57.0a1
Bug 1376625 - Add Get Element Attribute wdspec tests r?ato This adds wdspec tests for the Get Element Attribute section as documented in https://w3c.github.io/webdriver/webdriver-spec.html#get-element-attribute MozReview-Commit-ID: 9hHPr6Hb1l1
testing/web-platform/meta/MANIFEST.json
testing/web-platform/tests/webdriver/tests/state/get_element_attribute.py
--- a/testing/web-platform/meta/MANIFEST.json
+++ b/testing/web-platform/meta/MANIFEST.json
@@ -405900,16 +405900,40 @@
     ]
    ],
    "webdriver/tests/element_click/select.py": [
     [
      "/webdriver/tests/element_click/select.py",
      {}
     ]
    ],
+   "webdriver/tests/get_element_attribute.py": [
+    [
+     "/webdriver/tests/get_element_attribute.py",
+     {}
+    ]
+   ],
+   "webdriver/tests/get_element_property.py": [
+    [
+     "/webdriver/tests/get_element_property.py",
+     {}
+    ]
+   ],
+   "webdriver/tests/get_element_rect.py": [
+    [
+     "/webdriver/tests/get_element_rect.py",
+     {}
+    ]
+   ],
+   "webdriver/tests/get_element_tag_name.py": [
+    [
+     "/webdriver/tests/get_element_tag_name.py",
+     {}
+    ]
+   ],
    "webdriver/tests/get_window_rect.py": [
     [
      "/webdriver/tests/get_window_rect.py",
      {}
     ]
    ],
    "webdriver/tests/minimize_window.py": [
     [
@@ -597614,17 +597638,17 @@
    "c1d1054447e116becb50aaf96aad00a25f0a6752",
    "testharness"
   ],
   "intersection-observer/shadow-content.html": [
    "11681640d5c8b2c62229ed5a717172f917d75ba4",
    "testharness"
   ],
   "intersection-observer/timestamp.html": [
-   "0d57a6abc3c3056f921401f629ab231c458cf4cb",
+   "b9bf8d472d7751ec4a1ebee925d12668bedeee7a",
    "testharness"
   ],
   "intersection-observer/unclipped-root.html": [
    "67dab96304c745f1b5462bb1074753b09d77fbd1",
    "testharness"
   ],
   "intersection-observer/zero-area-element-hidden.html": [
    "59d854e89ca0d7b035a87376566775ca2f3420e5",
@@ -626269,16 +626293,32 @@
   "webdriver/tests/element_click/__init__.py": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
   "webdriver/tests/element_click/select.py": [
    "5ba51b660c7203bba3ada597c2f56fe094358e1f",
    "wdspec"
   ],
+  "webdriver/tests/get_element_attribute.py": [
+   "6a42b84f48d90cdbe6dba4485f9d368e6b02418d",
+   "wdspec"
+  ],
+  "webdriver/tests/get_element_property.py": [
+   "74009c12bf986a0d1e4ab9bc9f60de14cbbb474e",
+   "wdspec"
+  ],
+  "webdriver/tests/get_element_rect.py": [
+   "32342cba9762737de327cc8f717fb8316f8f5083",
+   "wdspec"
+  ],
+  "webdriver/tests/get_element_tag_name.py": [
+   "63aa430693c8dbadb600f60516990c3c6c5f4933",
+   "wdspec"
+  ],
   "webdriver/tests/get_window_rect.py": [
    "2d4c13edc4e659af864750d0341c06ff969a687f",
    "wdspec"
   ],
   "webdriver/tests/interface.html": [
    "d783d0dd370f58b264ef238d8da5cd8601dc3c7f",
    "testharness"
   ],
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/webdriver/tests/state/get_element_attribute.py
@@ -0,0 +1,193 @@
+import pytest
+
+from tests.support.asserts import assert_error, assert_success, assert_dialog_handled
+from tests.support.fixtures import create_dialog
+from tests.support.inline import inline
+
+
+def get_attribute(session, element, attr):
+    return session.transport.send("GET", "session/{session_id}/element/{element_id}/attribute/{attr}"
+                                  .format(session_id=session.session_id,
+                                          element_id=element,
+                                          attr=attr))
+
+
+# 13.2 Get Element Attribute
+
+def test_no_browsing_context(session, create_window):
+    # 13.2 step 1
+    session.window_handle = create_window()
+    session.close()
+
+    result = get_attribute(session, "foo", "id")
+
+    assert_error(result, "no such window")
+
+
+def test_handle_prompt_dismiss(new_session):
+    # 13.2 step 2
+    _, session = new_session({"alwaysMatch": {"unhandledPromptBehavior": "dismiss"}})
+    session.url = inline("<input id=foo>")
+
+    create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
+
+    result = get_attribute(session, "foo", "id")
+
+    assert_success(result, "foo")
+    assert_dialog_handled(session, "dismiss #1")
+
+    create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
+
+    result = get_attribute(session, "foo", "id")
+
+    assert_success(result, "foo")
+    assert_dialog_handled(session, "dismiss #2")
+
+    create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
+
+    result = get_attribute(session, "foo", "id")
+
+    assert_success(result, "foo")
+    assert_dialog_handled(session, "dismiss #3")
+
+
+def test_handle_prompt_accept(new_session):
+    # 13.2 step 2
+    _, session = new_session({"alwaysMatch": {"unhandledPromptBehavior": "accept"}})
+    session.url = inline("<input id=foo>")
+
+    create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
+
+    result = get_attribute(session, "foo", "id")
+
+    assert_success(result, "foo")
+    assert_dialog_handled(session, "dismiss #1")
+
+    create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
+
+    result = get_attribute(session, "foo", "id")
+
+    assert_success(result, "foo")
+    assert_dialog_handled(session, "dismiss #2")
+
+    create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
+
+    result = get_attribute(session, "foo", "id")
+
+    assert_success(result, "foo")
+    assert_dialog_handled(session, "dismiss #3")
+
+
+def test_handle_prompt_missing_value(session, create_dialog):
+    # 13.2 step 2
+    session.url = inline("<input id=foo>")
+
+    create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
+
+    result = get_attribute(session, "foo", "id")
+
+    assert_error(result, "unexpected alert open")
+    assert_dialog_handled(session, "dismiss #1")
+
+    create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
+
+    result = get_attribute(session, "foo", "id")
+
+    assert_error(result, "unexpected alert open")
+    assert_dialog_handled(session, "dismiss #2")
+
+    create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
+
+    result = get_attribute(session, "foo", "id")
+
+    assert_error(result, "unexpected alert open")
+    assert_dialog_handled(session, "dismiss #3")
+
+
+def test_element_not_found(session):
+    # 13.2 Step 3
+    result = get_attribute(session, "foo", "id")
+
+    assert_error(result, "no such element")
+
+
+def test_element_stale(session):
+    # 13.2 step 4
+    session.url = inline("<input id=foo>")
+    element = session.find.css("input", all=False)
+    session.refresh()
+    result = get_attribute(session, element.id, "id")
+
+    assert_error(result, "stale element reference")
+
+
+def test_normal(session):
+    # 13.2 Step 5
+    session.url = inline("<input type=checkbox>")
+    element = session.find.css("input", all=False)
+    result = get_attribute(session, element.id, "input")
+    assert_success(result, None)
+    assert False == session.execute_script("return document.querySelector('input').checked")
+
+    # Check we are not returning the property which will have a different value
+    element.click()
+    assert True == session.execute_script("return document.querySelector('input').checked")
+    result = get_attribute(session, element.id, "input")
+    assert_success(result, None)
+
+
+@pytest.mark.parametrize("tag,attrs", [
+    ("audio", ["autoplay", "controls", "loop", "muted"]),
+    ("button", ["autofocus", "disabled", "formnovalidate"]),
+    ("details", ["open"]),
+    ("dialog", ["open"]),
+    ("fieldset", ["disabled"]),
+    ("form", ["novalidate"]),
+    ("iframe", ["allowfullscreen"]),
+    ("img", ["ismap"]),
+    ("input", ["autofocus", "checked", "disabled", "formnovalidate", "multiple", "readonly", "required"]),
+    ("menuitem", ["checked", "default", "disabled"]),
+    ("object", ["typemustmatch"]),
+    ("ol", ["reversed"]),
+    ("optgroup", ["disabled"]),
+    ("option", ["disabled", "selected"]),
+    ("script", ["async", "defer"]),
+    ("select", ["autofocus", "disabled", "multiple", "required"]),
+    ("textarea", ["autofocus", "disabled", "readonly", "required"]),
+    ("track", ["default"]),
+    ("video", ["autoplay", "controls", "loop", "muted"])
+])
+def test_boolean_attribute(session, tag, attrs):
+    # 13.2 Step 5
+    for attr in attrs:
+        print("testing boolean attribute <{0} {1}>".format(tag, attr))
+        session.url = inline("<{0} {1}>".format(tag, attr))
+
+        element = session.find.css(tag, all=False)
+        result = result = get_attribute(session, element.id, attr)
+        assert_success(result, "true")
+
+
+def test_global_boolean_attributes(session):
+    # 13.2 Step 5
+    session.url = inline("<p hidden>foo")
+    element = session.find.css("p", all=False)
+    result = result = get_attribute(session, element.id, "hidden")
+
+    assert_success(result, "true")
+
+    session.url = inline("<p>foo")
+    element = session.find.css("p", all=False)
+    result = result = get_attribute(session, element.id, "hidden")
+    assert_success(result, None)
+
+    session.url = inline("<p itemscope>foo")
+    element = session.find.css("p", all=False)
+    result = result = get_attribute(session, element.id, "itemscope")
+
+    assert_success(result, "true")
+
+    session.url = inline("<p>foo")
+    element = session.find.css("p", all=False)
+    result = result = get_attribute(session, element.id, "itemscope")
+    assert_success(result, None)