Bug 1376625 - Add Is Element Selected wdspec tests r?ato draft
authorDavid Burns <dburns@mozilla.com>
Fri, 04 Aug 2017 20:25:18 +0100
changeset 649846 054ad8679e36e0c3896742ddaaa0d96a18d77721
parent 649845 1009a25cf5de097caf14a81d8950753faaffd9b6
child 727209 fc9274fc5ae599171528a792c61f87038d026f7b
push id75172
push userbmo:dburns@mozilla.com
push dateMon, 21 Aug 2017 11:20:34 +0000
reviewersato
bugs1376625
milestone57.0a1
Bug 1376625 - Add Is Element Selected wdspec tests r?ato This adds tests for the Is Element Selected section as documented in https://w3c.github.io/webdriver/webdriver-spec.html#is-element-selected MozReview-Commit-ID: HmwOtYlIZLQ
testing/web-platform/meta/MANIFEST.json
testing/web-platform/tests/webdriver/tests/state/is_element_selected.py
--- a/testing/web-platform/meta/MANIFEST.json
+++ b/testing/web-platform/meta/MANIFEST.json
@@ -405900,40 +405900,16 @@
     ]
    ],
    "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": [
     [
@@ -405954,16 +405930,46 @@
     ]
    ],
    "webdriver/tests/set_window_rect.py": [
     [
      "/webdriver/tests/set_window_rect.py",
      {}
     ]
    ],
+   "webdriver/tests/state/get_element_attribute.py": [
+    [
+     "/webdriver/tests/state/get_element_attribute.py",
+     {}
+    ]
+   ],
+   "webdriver/tests/state/get_element_property.py": [
+    [
+     "/webdriver/tests/state/get_element_property.py",
+     {}
+    ]
+   ],
+   "webdriver/tests/state/get_element_rect.py": [
+    [
+     "/webdriver/tests/state/get_element_rect.py",
+     {}
+    ]
+   ],
+   "webdriver/tests/state/get_element_tag_name.py": [
+    [
+     "/webdriver/tests/state/get_element_tag_name.py",
+     {}
+    ]
+   ],
+   "webdriver/tests/state/is_element_selected.py": [
+    [
+     "/webdriver/tests/state/is_element_selected.py",
+     {}
+    ]
+   ],
    "webdriver/tests/state/text/get_text.py": [
     [
      "/webdriver/tests/state/text/get_text.py",
      {}
     ]
    ],
    "webdriver/tests/status.py": [
     [
@@ -412958,17 +412964,17 @@
    "258104b78168059e67c84aa49c1b236c200633aa",
    "testharness"
   ],
   "XMLHttpRequest/abort-after-receive.htm": [
    "b3b42e616f1af845a5280e56862d81fcb1491e57",
    "testharness"
   ],
   "XMLHttpRequest/abort-after-send.htm": [
-   "0491be6129a5d78a55d043f3dc0b5322611b9485",
+   "1ec12c1906dd99e9c048925c560ce1b9ac1a4410",
    "testharness"
   ],
   "XMLHttpRequest/abort-after-stop.htm": [
    "3feb39f2451afa624771437337c669865fac29b5",
    "testharness"
   ],
   "XMLHttpRequest/abort-after-timeout.htm": [
    "26252843e67111ee53079bb67619fccde700000d",
@@ -597638,17 +597644,17 @@
    "c1d1054447e116becb50aaf96aad00a25f0a6752",
    "testharness"
   ],
   "intersection-observer/shadow-content.html": [
    "11681640d5c8b2c62229ed5a717172f917d75ba4",
    "testharness"
   ],
   "intersection-observer/timestamp.html": [
-   "b9bf8d472d7751ec4a1ebee925d12668bedeee7a",
+   "0d57a6abc3c3056f921401f629ab231c458cf4cb",
    "testharness"
   ],
   "intersection-observer/unclipped-root.html": [
    "67dab96304c745f1b5462bb1074753b09d77fbd1",
    "testharness"
   ],
   "intersection-observer/zero-area-element-hidden.html": [
    "59d854e89ca0d7b035a87376566775ca2f3420e5",
@@ -626293,32 +626299,16 @@
   "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"
   ],
@@ -626337,16 +626327,36 @@
   "webdriver/tests/set_window_rect.py": [
    "89b247aae02cf1aee8c7e4832db424840b66d12d",
    "wdspec"
   ],
   "webdriver/tests/state/__init__.py": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
+  "webdriver/tests/state/get_element_attribute.py": [
+   "7d531acbe34c1f48f519158f813c5bce88b33259",
+   "wdspec"
+  ],
+  "webdriver/tests/state/get_element_property.py": [
+   "2d4e145cd55c6ee0ed69c617c77975e295e56119",
+   "wdspec"
+  ],
+  "webdriver/tests/state/get_element_rect.py": [
+   "9bbc24b6ce5c386aa8a71efeb2f9d6e5792f81d8",
+   "wdspec"
+  ],
+  "webdriver/tests/state/get_element_tag_name.py": [
+   "ed23abfb5a1e9d3afdf168c722e7b64827c176ec",
+   "wdspec"
+  ],
+  "webdriver/tests/state/is_element_selected.py": [
+   "77b93dd58e0fb4f504c94bc39013d6ada59126bc",
+   "wdspec"
+  ],
   "webdriver/tests/state/text/__init__.py": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
   "webdriver/tests/state/text/get_text.py": [
    "570274d59020c4d8d0b8ecd604660ee7d710a165",
    "wdspec"
   ],
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/webdriver/tests/state/is_element_selected.py
@@ -0,0 +1,180 @@
+from tests.support.asserts import assert_error, assert_dialog_handled, assert_success
+from tests.support.inline import inline
+from tests.support.fixtures import create_dialog
+
+
+alert_doc = inline("<script>window.alert()</script>")
+check_doc = inline("<input id=checked type=checkbox checked/><input id=notChecked type=checkbox/>")
+option_doc = inline("""<select>
+                        <option id=notSelected>r-</option>
+                        <option id=selected selected>r+</option>
+                       </select>
+                    """)
+
+
+# 13.1 Is Element Selected
+
+def test_no_browsing_context(session, create_window):
+    # 13.1 step 1
+    session.window_handle = create_window()
+    session.close()
+
+    result = session.transport.send("GET", "session/{session_id}/element/{element_id}/selected"
+                                    .format(session_id=session.session_id,
+                                            element_id="foo"))
+
+    assert_error(result, "no such window")
+
+
+def test_handle_prompt_dismiss(new_session):
+    # 13.1 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 = session.transport.send("GET", "session/{session_id}/element/{element_id}/selected"
+                                    .format(session_id=session.session_id,
+                                            element_id="foo"))
+
+    assert_success(result, "foo")
+    assert_dialog_handled(session, "dismiss #1")
+
+    create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
+
+    result = session.transport.send("GET", "session/{session_id}/element/{element_id}/selected"
+                                    .format(session_id=session.session_id,
+                                            element_id="foo"))
+
+    assert_success(result, "foo")
+    assert_dialog_handled(session, "dismiss #2")
+
+    create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
+
+    result = session.transport.send("GET", "session/{session_id}/element/{element_id}/selected"
+                                    .format(session_id=session.session_id,
+                                            element_id="foo"))
+
+    assert_success(result, "foo")
+    assert_dialog_handled(session, "dismiss #3")
+
+
+def test_handle_prompt_accept(new_session):
+    # 13.1 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 = session.transport.send("GET", "session/{session_id}/element/{element_id}/selected"
+                                    .format(session_id=session.session_id,
+                                            element_id="foo"))
+
+    assert_success(result, "foo")
+    assert_dialog_handled(session, "dismiss #1")
+
+    create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
+
+    result = session.transport.send("GET", "session/{session_id}/element/{element_id}/selected"
+                                    .format(session_id=session.session_id,
+                                            element_id="foo"))
+
+    assert_success(result, "foo")
+    assert_dialog_handled(session, "dismiss #2")
+
+    create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
+
+    result = session.transport.send("GET", "session/{session_id}/element/{element_id}/selected"
+                                    .format(session_id=session.session_id,
+                                            element_id="foo"))
+
+    assert_success(result, "foo")
+    assert_dialog_handled(session, "dismiss #3")
+
+
+def test_handle_prompt_missing_value(session, create_dialog):
+    # 13.1 step 2
+    session.url = inline("<input id=foo>")
+
+    create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
+
+    result = session.transport.send("GET", "session/{session_id}/element/{element_id}/selected"
+                                    .format(session_id=session.session_id,
+                                            element_id="foo"))
+
+    assert_error(result, "unexpected alert open")
+    assert_dialog_handled(session, "dismiss #1")
+
+    create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
+
+    result = session.transport.send("GET", "session/{session_id}/element/{element_id}/selected"
+                                    .format(session_id=session.session_id,
+                                            element_id="foo"))
+
+    assert_error(result, "unexpected alert open")
+    assert_dialog_handled(session, "dismiss #2")
+
+    create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
+
+    result = session.transport.send("GET", "session/{session_id}/element/{element_id}/selected"
+                                    .format(session_id=session.session_id,
+                                            element_id="foo"))
+
+    assert_error(result, "unexpected alert open")
+    assert_dialog_handled(session, "dismiss #3")
+
+
+def test_element_stale(session):
+    # 13.1 step 4
+    session.url = check_doc
+    element = session.find.css("#checked", all=False)
+    session.refresh()
+    result = session.transport.send("GET", "session/{session_id}/element/{element_id}/selected"
+                                    .format(session_id=session.session_id,
+                                            element_id=element.id))
+
+    assert_error(result, "stale element reference")
+
+
+def test_element_checked(session):
+    # 13.1 step 5
+    session.url = check_doc
+    element = session.find.css("#checked", all=False)
+    result = session.transport.send("GET", "session/{session_id}/element/{element_id}/selected"
+                                    .format(session_id=session.session_id,
+                                            element_id=element.id))
+
+    assert_success(result, True)
+
+
+def test_checkbox_not_selected(session):
+    # 13.1 step 5
+    session.url = check_doc
+    element = session.find.css("#notChecked", all=False)
+    result = session.transport.send("GET", "session/{session_id}/element/{element_id}/selected"
+                                    .format(session_id=session.session_id,
+                                            element_id=element.id))
+
+    assert_success(result, False)
+
+
+def test_element_selected(session):
+    # 13.1 step 5
+    session.url = option_doc
+    element = session.find.css("#selected", all=False)
+    result = session.transport.send("GET", "session/{session_id}/element/{element_id}/selected"
+                                    .format(session_id=session.session_id,
+                                            element_id=element.id))
+
+    assert_success(result, True)
+
+
+def test_element_not_selected(session):
+    # 13.1 step 5
+    session.url = option_doc
+    element = session.find.css("#notSelected", all=False)
+    result = session.transport.send("GET", "session/{session_id}/element/{element_id}/selected"
+                                    .format(session_id=session.session_id,
+                                            element_id=element.id))
+
+    assert_success(result, False)