blob: d2a44229ce06cb63fc386221c4870d7e1f6eda1c [file] [log] [blame]
# META: timeout=long
import pytest
import time
from tests.support.fixtures import configuration
from tests.actions.support.keys import ALL_EVENTS, Keys
from tests.actions.support.refine import filter_dict, get_keys, get_events
from webdriver import error
@pytest.mark.parametrize("name,expected", ALL_EVENTS.items())
def test_webdriver_special_key_sends_keydown(session,
key_reporter,
key_chain,
name,
expected):
if name.startswith("F"):
# Prevent default behavior for F1, etc., but only after keydown
# bubbles up to body. (Otherwise activated browser menus/functions
# may interfere with subsequent tests.)
session.execute_script("""
document.body.addEventListener("keydown",
function(e) { e.preventDefault() });
""")
if (session.capabilities["browserName"] == 'internet explorer'):
key_reporter.click()
session.execute_script("resetEvents();")
key_chain.key_down(getattr(Keys, name)).perform()
# only interested in keydown
first_event = get_events(session)[0]
# make a copy so we can throw out irrelevant keys and compare to events
expected = dict(expected)
del expected["value"]
# check and remove keys that aren't in expected
assert first_event["type"] == "keydown"
assert first_event["repeat"] == False
first_event = filter_dict(first_event, expected)
if first_event["code"] == None:
del first_event["code"]
del expected["code"]
assert first_event == expected
# only printable characters should be recorded in input field
entered_keys = get_keys(key_reporter)
if len(expected["key"]) == 1:
assert entered_keys == expected["key"]
else:
assert len(entered_keys) == 0
@pytest.mark.parametrize("value", [
(u"f"),
(u"\u0BA8\u0BBF"),
(u"\u1100\u1161\u11A8"),
])
def test_multiple_codepoint_keys_behave_correctly(session,
key_reporter,
key_chain,
value):
key_chain \
.key_down(value) \
.key_up(value) \
.perform()
assert get_keys(key_reporter) == value
@pytest.mark.parametrize("value", [
(u"fa"),
(u"\u0BA8\u0BBFb"),
(u"\u0BA8\u0BBF\u0BA8"),
(u"\u1100\u1161\u11A8c")
])
def test_invalid_multiple_codepoint_keys_fail(session,
key_reporter,
key_chain,
value):
with pytest.raises(error.InvalidArgumentException):
key_chain \
.key_down(value) \
.key_up(value) \
.perform()