Bug 1448792 - [wdspec] Add basic tests and user prompt tests for Element Send Keys. draft
authorHenrik Skupin <mail@hskupin.info>
Fri, 25 May 2018 23:12:45 +0200
changeset 808594 941f947558c96261046ba069c1b4ad49f3653709
parent 808340 ba8541f3429ba7457efdacfdf61605000fea7fa0
child 808595 f9c29f791761fa3d6963ca2cfd1548010fec871e
child 808622 9af3303adcdf46d9e0e881c7ec6381be2e56a56f
push id113432
push userbmo:hskupin@gmail.com
push dateWed, 20 Jun 2018 03:42:06 +0000
bugs1448792
milestone62.0a1
Bug 1448792 - [wdspec] Add basic tests and user prompt tests for Element Send Keys. MozReview-Commit-ID: KzfN4OLM1YC
testing/web-platform/meta/MANIFEST.json
testing/web-platform/meta/webdriver/tests/element_send_keys/user_prompts.py.ini
testing/web-platform/tests/webdriver/tests/element_send_keys/form_controls.py
testing/web-platform/tests/webdriver/tests/element_send_keys/send_keys.py
testing/web-platform/tests/webdriver/tests/element_send_keys/user_prompts.py
--- a/testing/web-platform/meta/MANIFEST.json
+++ b/testing/web-platform/meta/MANIFEST.json
@@ -404311,16 +404311,22 @@
     ]
    ],
    "webdriver/tests/element_send_keys/send_keys.py": [
     [
      "/webdriver/tests/element_send_keys/send_keys.py",
      {}
     ]
    ],
+   "webdriver/tests/element_send_keys/user_prompts.py": [
+    [
+     "/webdriver/tests/element_send_keys/user_prompts.py",
+     {}
+    ]
+   ],
    "webdriver/tests/execute_async_script/collections.py": [
     [
      "/webdriver/tests/execute_async_script/collections.py",
      {}
     ]
    ],
    "webdriver/tests/execute_async_script/user_prompts.py": [
     [
@@ -523373,17 +523379,17 @@
    "911a6f200540f78d662fd775899aa0249fb9a30d",
    "reftest"
   ],
   "css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-003.html": [
    "7338abdd6edb1027dc2e12b001773ce5ad114286",
    "reftest"
   ],
   "css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-004.html": [
-   "1e5377c120916557dc1525b38c9cf7eb86ae0151",
+   "3740c52d7bd26a3353721931ae2a6299db395968",
    "reftest"
   ],
   "css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-005.html": [
    "7d6563a162ba640b77801c5c8280078d4b087649",
    "reftest"
   ],
   "css/css-shapes/shape-outside/shape-image/gradients/shape-outside-linear-gradient-006.html": [
    "72267d3bfbdbeb438f32266334bb5e4a9c91c1bf",
@@ -539597,17 +539603,17 @@
    "08bbc95f3078421a489e1e93cc7a4f035af40d5b",
    "support"
   ],
   "css/css-values/calc-rem-lang.html": [
    "6fa668d2bcaf01f5c4680e3e14a0e86160d1b5d5",
    "reftest"
   ],
   "css/css-values/calc-rounding-001.html": [
-   "c3071454184ca1bd97443cfb6298447d16d79b2f",
+   "a74b631cd97db18ef120a0a5e7132c9e14b67f81",
    "testharness"
   ],
   "css/css-values/calc-serialization.html": [
    "d0bcbd402cb78e704dabc7f1665d40ba163e30eb",
    "testharness"
   ],
   "css/css-values/calc-unit-analysis.html": [
    "c5fd567b4fa257ce53c48ebf8c444bf382459fec",
@@ -618641,29 +618647,33 @@
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
   "webdriver/tests/element_send_keys/content_editable.py": [
    "9c071e60e1203cf31120f20874b5f38ba41dacc3",
    "wdspec"
   ],
   "webdriver/tests/element_send_keys/form_controls.py": [
-   "ec6bdf64c7c4d2e3963e89c8410f69f738565f78",
+   "7e893a0992efff7bb053ae0707c34c60402f195a",
    "wdspec"
   ],
   "webdriver/tests/element_send_keys/interactability.py": [
    "5374827c90845ded660d540d23bb7e07ac84e445",
    "wdspec"
   ],
   "webdriver/tests/element_send_keys/scroll_into_view.py": [
    "e4a50a53a13c1ab76c6c002bbda1c103f8c32ccf",
    "wdspec"
   ],
   "webdriver/tests/element_send_keys/send_keys.py": [
-   "90fe1e170efc56699af7af931cd9182abbbcef05",
+   "83e4292e0e587a641f73d21cb1ddadc420251a10",
+   "wdspec"
+  ],
+  "webdriver/tests/element_send_keys/user_prompts.py": [
+   "a351706452816ea1ca9719c22c47bd2fcd3e3ab8",
    "wdspec"
   ],
   "webdriver/tests/execute_async_script/__init__.py": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
   "webdriver/tests/execute_async_script/collections.py": [
    "d6c95dfdcbfc3b9cf91cf6f943a17b7cd0fee79d",
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/webdriver/tests/element_send_keys/user_prompts.py.ini
@@ -0,0 +1,3 @@
+[user_prompts.py]
+  [test_handle_prompt_accept]
+    expected: FAIL
--- a/testing/web-platform/tests/webdriver/tests/element_send_keys/form_controls.py
+++ b/testing/web-platform/tests/webdriver/tests/element_send_keys/form_controls.py
@@ -4,17 +4,17 @@ from tests.support.asserts import (
     assert_element_has_focus,
     assert_error,
     assert_same_element,
     assert_success,
 )
 from tests.support.inline import inline
 
 
-def send_keys_to_element(session, element, text):
+def element_send_keys(session, element, text):
     return session.transport.send(
         "POST", "/session/{session_id}/element/{element_id}/value".format(
             session_id=session.session_id,
             element_id=element.id),
         {"text": text})
 
 
 def add_event_listeners(element):
@@ -31,62 +31,62 @@ def get_events(session):
     return session.execute_script("return window.events")
 
 
 def test_input(session):
     session.url = inline("<input>")
     element = session.find.css("input", all=False)
     assert element.property("value") == ""
 
-    send_keys_to_element(session, element, "foo")
+    element_send_keys(session, element, "foo")
     assert element.property("value") == "foo"
     assert_element_has_focus(element)
 
 
 def test_textarea(session):
     session.url = inline("<textarea>")
     element = session.find.css("textarea", all=False)
     assert element.property("value") == ""
 
-    send_keys_to_element(session, element, "foo")
+    element_send_keys(session, element, "foo")
     assert element.property("value") == "foo"
     assert_element_has_focus(element)
 
 
 def test_input_append(session):
     session.url = inline("<input value=a>")
     element = session.find.css("input", all=False)
     assert element.property("value") == "a"
 
-    send_keys_to_element(session, element, "b")
+    element_send_keys(session, element, "b")
     assert element.property("value") == "ab"
 
-    send_keys_to_element(session, element, "c")
+    element_send_keys(session, element, "c")
     assert element.property("value") == "abc"
 
 
 def test_textarea_append(session):
     session.url = inline("<textarea>a</textarea>")
     element = session.find.css("textarea", all=False)
     assert element.property("value") == "a"
 
-    send_keys_to_element(session, element, "b")
+    element_send_keys(session, element, "b")
     assert element.property("value") == "ab"
 
-    send_keys_to_element(session, element, "c")
+    element_send_keys(session, element, "c")
     assert element.property("value") == "abc"
 
 
 @pytest.mark.parametrize("tag", ["input", "textarea"])
 def test_events(session, tag):
     session.url = inline("<%s>" % tag)
     element = session.find.css(tag, all=False)
     add_event_listeners(element)
 
-    send_keys_to_element(session, element, "foo")
+    element_send_keys(session, element, "foo")
     assert element.property("value") == "foo"
     assert get_events(session) == ["focus",
                                    "keydown",
                                    "keypress",
                                    "input",
                                    "keyup",
                                    "keydown",
                                    "keypress",
@@ -98,10 +98,10 @@ def test_events(session, tag):
                                    "keyup"]
 
 
 @pytest.mark.parametrize("tag", ["input", "textarea"])
 def test_not_blurred(session, tag):
     session.url = inline("<%s>" % tag)
     element = session.find.css(tag, all=False)
 
-    send_keys_to_element(session, element, "")
+    element_send_keys(session, element, "")
     assert_element_has_focus(element)
--- a/testing/web-platform/tests/webdriver/tests/element_send_keys/send_keys.py
+++ b/testing/web-platform/tests/webdriver/tests/element_send_keys/send_keys.py
@@ -1,9 +1,11 @@
-from tests.support.asserts import assert_success
+import pytest
+
+from tests.support.asserts import assert_error, assert_success
 from tests.support.inline import inline
 
 
 def element_send_keys(session, element, text):
     return session.transport.send(
         "POST", "/session/{session_id}/element/{element_id}/value".format(
             session_id=session.session_id,
             element_id=element.id),
@@ -12,8 +14,39 @@ def element_send_keys(session, element, 
 
 def test_null_response_value(session):
     session.url = inline("<input>")
     element = session.find.css("input", all=False)
 
     response = element_send_keys(session, element, "foo")
     value = assert_success(response)
     assert value is None
+
+
+@pytest.mark.parametrize("value", [True, None, 1, [], {}])
+def test_invalid_text_type(session, value):
+    session.url = inline("<input>")
+    element = session.find.css("input", all=False)
+
+    response = element_send_keys(session, element, value)
+    assert_error(response, "invalid argument")
+
+
+def test_no_browsing_context(session, create_window):
+    session.window_handle = create_window()
+
+    session.url = inline("<input>")
+    element = session.find.css("input", all=False)
+
+    session.close()
+
+    response = element_send_keys(session, element, "foo")
+    assert_error(response, "no such window")
+
+
+def test_stale_element(session):
+    session.url = inline("<input>")
+    element = session.find.css("input", all=False)
+
+    session.refresh()
+
+    response = element_send_keys(session, element, "foo")
+    assert_error(response, "stale element reference")
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/webdriver/tests/element_send_keys/user_prompts.py
@@ -0,0 +1,66 @@
+from tests.support.asserts import assert_error, assert_dialog_handled
+from tests.support.fixtures import create_dialog
+from tests.support.inline import inline
+
+
+def element_send_keys(session, element, text):
+    return session.transport.send(
+        "POST", "/session/{session_id}/element/{element_id}/value".format(
+            session_id=session.session_id,
+            element_id=element.id),
+        {"text": text})
+
+
+def test_handle_prompt_dismiss_and_notify():
+    """TODO"""
+
+
+def test_handle_prompt_accept_and_notify():
+    """TODO"""
+
+
+def test_handle_prompt_ignore():
+    """TODO"""
+
+
+def test_handle_prompt_accept(new_session, add_browser_capabilites):
+    _, session = new_session({"capabilities": {
+        "alwaysMatch": add_browser_capabilites({"unhandledPromptBehavior": "accept"})}})
+    session.url = inline("<input>")
+    element = session.find.css("input", all=False)
+
+    create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
+    response = element_send_keys(session, element, "foo")
+    assert response.status == 200
+    assert_dialog_handled(session, "dismiss #1")
+
+    create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
+    response = element_send_keys(session, element, "foo")
+    assert response.status == 200
+    assert_dialog_handled(session, "dismiss #2")
+
+    create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
+    response = element_send_keys(session, element, "foo")
+    assert response.status == 200
+    assert_dialog_handled(session, "dismiss #3")
+
+
+def test_handle_prompt_missing_value(session, create_dialog):
+    session.url = inline("<input>")
+    element = session.find.css("input", all=False)
+
+    create_dialog("alert", text="dismiss #1", result_var="dismiss1")
+
+    response = element_send_keys(session, element, "foo")
+    assert_error(response, "unexpected alert open")
+    assert_dialog_handled(session, "dismiss #1")
+
+    create_dialog("confirm", text="dismiss #2", result_var="dismiss2")
+    response = element_send_keys(session, element, "foo")
+    assert_error(response, "unexpected alert open")
+    assert_dialog_handled(session, "dismiss #2")
+
+    create_dialog("prompt", text="dismiss #3", result_var="dismiss3")
+    response = element_send_keys(session, element, "foo")
+    assert_error(response, "unexpected alert open")
+    assert_dialog_handled(session, "dismiss #3")