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
--- 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)