Bug 1448792 - [marionette][wdspec] Make Element Send Keys fire change event for <input type=file>. draft
authorHenrik Skupin <mail@hskupin.info>
Fri, 01 Jun 2018 14:53:20 +0200
changeset 808624 d82396ba911f22379d5352a3aeac62451f145ca8
parent 808623 ad540da5a097bf4ecfad0d291650e4432f9693ad
push id113443
push userbmo:hskupin@gmail.com
push dateWed, 20 Jun 2018 07:16:03 +0000
bugs1448792
milestone62.0a1
Bug 1448792 - [marionette][wdspec] Make Element Send Keys fire change event for <input type=file>. Adds a wdspec test to ensure the latest WebDriver specification changes for https://github.com/w3c/webdriver/pull/1262. MozReview-Commit-ID: CQqq8VjBobU
testing/web-platform/meta/MANIFEST.json
testing/web-platform/tests/webdriver/tests/element_send_keys/events.py
testing/web-platform/tests/webdriver/tests/element_send_keys/form_controls.py
--- a/testing/web-platform/meta/MANIFEST.json
+++ b/testing/web-platform/meta/MANIFEST.json
@@ -404292,16 +404292,22 @@
     ]
    ],
    "webdriver/tests/element_send_keys/content_editable.py": [
     [
      "/webdriver/tests/element_send_keys/content_editable.py",
      {}
     ]
    ],
+   "webdriver/tests/element_send_keys/events.py": [
+    [
+     "/webdriver/tests/element_send_keys/events.py",
+     {}
+    ]
+   ],
    "webdriver/tests/element_send_keys/file_upload.py": [
     [
      "/webdriver/tests/element_send_keys/file_upload.py",
      {}
     ]
    ],
    "webdriver/tests/element_send_keys/form_controls.py": [
     [
@@ -618661,22 +618667,26 @@
   "webdriver/tests/element_send_keys/conftest.py": [
    "79ae8a3775c4f9e2339e202711f31f5a83409b75",
    "support"
   ],
   "webdriver/tests/element_send_keys/content_editable.py": [
    "9c071e60e1203cf31120f20874b5f38ba41dacc3",
    "wdspec"
   ],
+  "webdriver/tests/element_send_keys/events.py": [
+   "199c4fb5bfbe2f6f2a016cd96a99213b6e311c99",
+   "wdspec"
+  ],
   "webdriver/tests/element_send_keys/file_upload.py": [
    "156d84b8c195a1ebe83e65ca2ed8a92bb405bf26",
    "wdspec"
   ],
   "webdriver/tests/element_send_keys/form_controls.py": [
-   "c628924d912d413c89be38d5e7098bc5aace3d67",
+   "990dd9955f06d40c98185161bc4d991b73d86916",
    "wdspec"
   ],
   "webdriver/tests/element_send_keys/interactability.py": [
    "5374827c90845ded660d540d23bb7e07ac84e445",
    "wdspec"
   ],
   "webdriver/tests/element_send_keys/scroll_into_view.py": [
    "e4a50a53a13c1ab76c6c002bbda1c103f8c32ccf",
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/webdriver/tests/element_send_keys/events.py
@@ -0,0 +1,86 @@
+import pytest
+
+from tests.support.asserts import (
+    assert_element_has_focus,
+    assert_events_equal,
+    assert_success,
+)
+
+from tests.support.inline import inline
+
+
+@pytest.fixture
+def tracked_events():
+    return [
+        "blur",
+        "change",
+        "focus",
+        "input",
+        "keydown",
+        "keypress",
+        "keyup",
+    ]
+
+
+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_file_upload(session, create_file, add_event_listeners, tracked_events):
+    expected_events = [
+        "focus",
+        "input",
+        "change",
+    ]
+
+    single_file = create_file("foo")
+
+    session.url = inline("<input type=file multiple>")
+    element = session.find.css("input", all=False)
+    add_event_listeners(element, tracked_events)
+
+    response = element_send_keys(session, element, str(single_file))
+    assert_success(response)
+
+    assert_events_equal(session, expected_events)
+
+
+@pytest.mark.parametrize("tag", ["input", "textarea"])
+def test_form_control_send_text(session, add_event_listeners, tracked_events, tag):
+    expected_events = [
+        "focus",
+        "keydown",
+        "keypress",
+        "input",
+        "keyup",
+        "keydown",
+        "keypress",
+        "input",
+        "keyup",
+        "keydown",
+        "keypress",
+        "input",
+        "keyup",
+    ]
+
+    session.url = inline("<%s>" % tag)
+    element = session.find.css(tag, all=False)
+    add_event_listeners(element, tracked_events)
+
+    response = element_send_keys(session, element, "foo")
+    assert_success(response)
+    assert_events_equal(session, expected_events)
+
+
+@pytest.mark.parametrize("tag", ["input", "textarea"])
+def test_not_blurred(session, tag):
+    session.url = inline("<%s>" % tag)
+    element = session.find.css(tag, all=False)
+
+    response = element_send_keys(session, element, "")
+    assert_success(response)
+    assert_element_has_focus(element)
--- 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
@@ -1,24 +1,11 @@
-import pytest
-
-from tests.support.asserts import assert_element_has_focus, assert_events_equal
+from tests.support.asserts import assert_element_has_focus
 from tests.support.inline import inline
 
-@pytest.fixture
-def tracked_events():
-    return [
-            "blur",
-            "change",
-            "focus",
-            "input",
-            "keydown",
-            "keypress",
-            "keyup",
-            ]
 
 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})
 
@@ -60,44 +47,8 @@ def test_textarea_append(session):
     element = session.find.css("textarea", all=False)
     assert element.property("value") == "a"
 
     element_send_keys(session, element, "b")
     assert element.property("value") == "ab"
 
     element_send_keys(session, element, "c")
     assert element.property("value") == "abc"
-
-
-@pytest.mark.parametrize("tag", ["input", "textarea"])
-def test_events(session, add_event_listeners, tracked_events, tag):
-    expected_events = [
-        "focus",
-        "keydown",
-        "keypress",
-        "input",
-        "keyup",
-        "keydown",
-        "keypress",
-        "input",
-        "keyup",
-        "keydown",
-        "keypress",
-        "input",
-        "keyup",
-    ]
-
-    session.url = inline("<%s>" % tag)
-    element = session.find.css(tag, all=False)
-    add_event_listeners(element, tracked_events)
-
-    element_send_keys(session, element, "foo")
-    assert element.property("value") == "foo"
-    assert_events_equal(session, expected_events)
-
-
-@pytest.mark.parametrize("tag", ["input", "textarea"])
-def test_not_blurred(session, tag):
-    session.url = inline("<%s>" % tag)
-    element = session.find.css(tag, all=False)
-
-    element_send_keys(session, element, "")
-    assert_element_has_focus(element)