Bug 1448792 - [wdspec] Add basic tests and user prompt tests for Element Send Keys.
MozReview-Commit-ID: KzfN4OLM1YC
--- 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")