зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1433463 - WebDriver:ElementSendKeys should not run unfocussing steps. r=automatedtester
According to the WebDriver standard the Element Send Keys command should not run the unfocussing steps. Not blurring the element causes the DOM "change" event not to fire, but the specification only expects the "input" event to fire. The standard does, however, expect the Element Clear command to run the unfocussing steps and to blur the element for historical reasons. MozReview-Commit-ID: FHD1whho0jT --HG-- extra : rebase_source : a03f2befd3373a0e5a167deca012540887546a4b
This commit is contained in:
Родитель
2f6a0dfa63
Коммит
52b1eae73c
|
@ -577,8 +577,6 @@ async function webdriverSendKeysToElement(el, value, a11y) {
|
|||
} else {
|
||||
event.sendKeysToElement(value, el, win);
|
||||
}
|
||||
|
||||
el.blur();
|
||||
}
|
||||
|
||||
async function legacySendKeysToElement(el, value, a11y) {
|
||||
|
|
|
@ -584741,7 +584741,7 @@
|
|||
"testharness"
|
||||
],
|
||||
"service-workers/service-worker/svg-target-reftest.https.html": [
|
||||
"c8d97ffed68ca40b4154bde36d9a0ca65d2e3816",
|
||||
"9eb665d5cd1f62f2591130e372fd6dc1e9c61f64",
|
||||
"reftest"
|
||||
],
|
||||
"service-workers/service-worker/synced-state.https.html": [
|
||||
|
@ -592485,11 +592485,11 @@
|
|||
"support"
|
||||
],
|
||||
"webdriver/tests/element_send_keys/form_controls.py": [
|
||||
"7c4a249f9575a69268b5f2970a5623fc1724e6e1",
|
||||
"a1ade96c599a336684ee5a46dbc1716aac8ed9ae",
|
||||
"wdspec"
|
||||
],
|
||||
"webdriver/tests/element_send_keys/interactability.py": [
|
||||
"bd5d26173017dc3cbdc282809028639a7b4a214a",
|
||||
"197bf11c6cae354d9f3cc07f836a857345046e1c",
|
||||
"wdspec"
|
||||
],
|
||||
"webdriver/tests/element_send_keys/scroll_into_view.py": [
|
||||
|
@ -598777,7 +598777,7 @@
|
|||
"support"
|
||||
],
|
||||
"workers/support/name-as-accidental-global.js": [
|
||||
"530670268fae610b60066773ee475743b8498b53",
|
||||
"5f75e855287f1a8b391498a3c567b68c75f56416",
|
||||
"support"
|
||||
],
|
||||
"workers/support/name.js": [
|
||||
|
|
|
@ -1,6 +1,11 @@
|
|||
import pytest
|
||||
|
||||
from tests.support.asserts import assert_error, assert_same_element, assert_success
|
||||
from tests.support.asserts import (
|
||||
assert_element_has_focus,
|
||||
assert_error,
|
||||
assert_same_element,
|
||||
assert_success,
|
||||
)
|
||||
from tests.support.inline import inline
|
||||
|
||||
|
||||
|
@ -17,7 +22,7 @@ def add_event_listeners(element):
|
|||
element.session.execute_script("""
|
||||
let [target] = arguments;
|
||||
window.events = [];
|
||||
for (let expected of ["focus", "blur", "change", "keypress", "keydown", "keyup", "input"]) {
|
||||
for (let expected of ["focus", "change", "keypress", "keydown", "keyup", "input"]) {
|
||||
target.addEventListener(expected, ({type}) => window.events.push(type));
|
||||
}
|
||||
""", args=(element,))
|
||||
|
@ -34,6 +39,7 @@ def test_input(session):
|
|||
|
||||
element_send_keys(session, element, "foo")
|
||||
assert element.property("value") == "foo"
|
||||
assert_element_has_focus(element)
|
||||
|
||||
|
||||
def test_textarea(session):
|
||||
|
@ -43,6 +49,7 @@ def test_textarea(session):
|
|||
|
||||
element_send_keys(session, element, "foo")
|
||||
assert element.property("value") == "foo"
|
||||
assert_element_has_focus(element)
|
||||
|
||||
|
||||
def test_input_append(session):
|
||||
|
@ -89,6 +96,13 @@ def test_events(session, tag):
|
|||
"keydown",
|
||||
"keypress",
|
||||
"input",
|
||||
"keyup",
|
||||
"change",
|
||||
"blur"]
|
||||
"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)
|
||||
|
||||
element_send_keys(session, element, "")
|
||||
assert_element_has_focus(element)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
from tests.support.asserts import assert_error, assert_same_element, assert_success
|
||||
from tests.support.asserts import assert_error, assert_success
|
||||
from tests.support.inline import iframe, inline
|
||||
|
||||
|
||||
|
@ -13,8 +13,8 @@ def send_keys_to_element(session, element, text):
|
|||
|
||||
def test_body_is_interactable(session):
|
||||
session.url = inline("""
|
||||
<body onkeypress="document.getElementById('result').value += event.key">
|
||||
<input type="text" id="result"/>
|
||||
<body onkeypress="document.querySelector('input').value += event.key">
|
||||
<input>
|
||||
</body>
|
||||
""")
|
||||
|
||||
|
@ -22,18 +22,18 @@ def test_body_is_interactable(session):
|
|||
result = session.find.css("input", all=False)
|
||||
|
||||
# By default body is the active element
|
||||
assert_same_element(session, element, session.active_element)
|
||||
assert session.active_element is element
|
||||
|
||||
response = send_keys_to_element(session, element, "foo")
|
||||
assert_success(response)
|
||||
assert_same_element(session, element, session.active_element)
|
||||
assert session.active_element is element
|
||||
assert result.property("value") == "foo"
|
||||
|
||||
|
||||
def test_document_element_is_interactable(session):
|
||||
session.url = inline("""
|
||||
<html onkeypress="document.getElementById('result').value += event.key">
|
||||
<input type="text" id="result"/>
|
||||
<html onkeypress="document.querySelector('input').value += event.key">
|
||||
<input>
|
||||
</html>
|
||||
""")
|
||||
|
||||
|
@ -42,18 +42,18 @@ def test_document_element_is_interactable(session):
|
|||
result = session.find.css("input", all=False)
|
||||
|
||||
# By default body is the active element
|
||||
assert_same_element(session, body, session.active_element)
|
||||
assert session.active_element is body
|
||||
|
||||
response = send_keys_to_element(session, element, "foo")
|
||||
assert_success(response)
|
||||
assert_same_element(session, body, session.active_element)
|
||||
assert session.active_element is element
|
||||
assert result.property("value") == "foo"
|
||||
|
||||
|
||||
def test_iframe_is_interactable(session):
|
||||
session.url = inline(iframe("""
|
||||
<body onkeypress="document.getElementById('result').value += event.key">
|
||||
<input type="text" id="result"/>
|
||||
<body onkeypress="document.querySelector('input').value += event.key">
|
||||
<input>
|
||||
</body>
|
||||
"""))
|
||||
|
||||
|
@ -61,11 +61,11 @@ def test_iframe_is_interactable(session):
|
|||
frame = session.find.css("iframe", all=False)
|
||||
|
||||
# By default the body has the focus
|
||||
assert_same_element(session, body, session.active_element)
|
||||
assert session.active_element is body
|
||||
|
||||
response = send_keys_to_element(session, frame, "foo")
|
||||
assert_success(response)
|
||||
assert_same_element(session, body, session.active_element)
|
||||
assert session.active_element is frame
|
||||
|
||||
# Any key events are immediately routed to the nested
|
||||
# browsing context's active document.
|
||||
|
@ -75,7 +75,7 @@ def test_iframe_is_interactable(session):
|
|||
|
||||
|
||||
def test_transparent_element(session):
|
||||
session.url = inline("<input style=\"opacity: 0;\">")
|
||||
session.url = inline("""<input style="opacity: 0">""")
|
||||
element = session.find.css("input", all=False)
|
||||
|
||||
response = send_keys_to_element(session, element, "foo")
|
||||
|
@ -94,8 +94,8 @@ def test_readonly_element(session):
|
|||
|
||||
def test_obscured_element(session):
|
||||
session.url = inline("""
|
||||
<input type="text" />
|
||||
<div style="position: relative; top: -3em; height: 5em; background-color: blue"></div>
|
||||
<input>
|
||||
<div style="position: relative; top: -3em; height: 5em; background: blue;"></div>
|
||||
""")
|
||||
element = session.find.css("input", all=False)
|
||||
|
||||
|
@ -113,7 +113,7 @@ def test_not_a_focusable_element(session):
|
|||
|
||||
|
||||
def test_not_displayed_element(session):
|
||||
session.url = inline("<input style=\"display: none\">")
|
||||
session.url = inline("""<input style="display: none">""")
|
||||
element = session.find.css("input", all=False)
|
||||
|
||||
response = send_keys_to_element(session, element, "foo")
|
||||
|
@ -121,7 +121,7 @@ def test_not_displayed_element(session):
|
|||
|
||||
|
||||
def test_hidden_element(session):
|
||||
session.url = inline("<input style=\"visibility: hidden\">")
|
||||
session.url = inline("""<input style="visibility: hidden">""")
|
||||
element = session.find.css("input", all=False)
|
||||
|
||||
response = send_keys_to_element(session, element, "foo")
|
||||
|
@ -129,7 +129,7 @@ def test_hidden_element(session):
|
|||
|
||||
|
||||
def test_disabled_element(session):
|
||||
session.url = inline("<input disabled=\"false\">")
|
||||
session.url = inline("""<input disabled>""")
|
||||
element = session.find.css("input", all=False)
|
||||
|
||||
response = send_keys_to_element(session, element, "foo")
|
||||
|
|
Загрузка…
Ссылка в новой задаче