Unreviewed. Update W3C WebDriver imported tests.
[WebKit-https.git] / WebDriverTests / imported / w3c / webdriver / tests / element_send_keys / interactability.py
1 from tests.support.asserts import assert_error, assert_same_element, assert_success
2 from tests.support.inline import iframe, inline
3
4
5 def send_keys_to_element(session, element, text):
6     return session.transport.send(
7         "POST",
8         "/session/{session_id}/element/{element_id}/value".format(
9             session_id=session.session_id,
10             element_id=element.id),
11         {"text": text})
12
13
14 def test_body_is_interactable(session):
15     session.url = inline("""
16         <body onkeypress="document.getElementById('result').value += event.key">
17           <input type="text" id="result"/>
18         </body>
19     """)
20
21     element = session.find.css("body", all=False)
22     result = session.find.css("input", all=False)
23
24     # By default body is the active element
25     assert_same_element(session, element, session.active_element)
26
27     response = send_keys_to_element(session, element, "foo")
28     assert_success(response)
29     assert_same_element(session, element, session.active_element)
30     assert result.property("value") == "foo"
31
32
33 def test_document_element_is_interactable(session):
34     session.url = inline("""
35         <html onkeypress="document.getElementById('result').value += event.key">
36           <input type="text" id="result"/>
37         </html>
38     """)
39
40     body = session.find.css("body", all=False)
41     element = session.find.css(":root", all=False)
42     result = session.find.css("input", all=False)
43
44     # By default body is the active element
45     assert_same_element(session, body, session.active_element)
46
47     response = send_keys_to_element(session, element, "foo")
48     assert_success(response)
49     assert_same_element(session, body, session.active_element)
50     assert result.property("value") == "foo"
51
52
53 def test_iframe_is_interactable(session):
54     session.url = inline(iframe("""
55         <body onkeypress="document.getElementById('result').value += event.key">
56           <input type="text" id="result"/>
57         </body>
58     """))
59
60     body = session.find.css("body", all=False)
61     frame = session.find.css("iframe", all=False)
62
63     # By default the body has the focus
64     assert_same_element(session, body, session.active_element)
65
66     response = send_keys_to_element(session, frame, "foo")
67     assert_success(response)
68     assert_same_element(session, body, session.active_element)
69
70     # Any key events are immediately routed to the nested
71     # browsing context's active document.
72     session.switch_frame(frame)
73     result = session.find.css("input", all=False)
74     assert result.property("value") == "foo"
75
76
77 def test_transparent_element(session):
78     session.url = inline("<input style=\"opacity: 0;\">")
79     element = session.find.css("input", all=False)
80
81     response = send_keys_to_element(session, element, "foo")
82     assert_success(response)
83     assert element.property("value") == "foo"
84
85
86 def test_readonly_element(session):
87     session.url = inline("<input readonly>")
88     element = session.find.css("input", all=False)
89
90     response = send_keys_to_element(session, element, "foo")
91     assert_success(response)
92     assert element.property("value") == ""
93
94
95 def test_obscured_element(session):
96     session.url = inline("""
97       <input type="text" />
98       <div style="position: relative; top: -3em; height: 5em; background-color: blue"></div>
99     """)
100     element = session.find.css("input", all=False)
101
102     response = send_keys_to_element(session, element, "foo")
103     assert_success(response)
104     assert element.property("value") == "foo"
105
106
107 def test_not_a_focusable_element(session):
108     session.url = inline("<div>foo</div>")
109     element = session.find.css("div", all=False)
110
111     response = send_keys_to_element(session, element, "foo")
112     assert_error(response, "element not interactable")
113
114
115 def test_not_displayed_element(session):
116     session.url = inline("<input style=\"display: none\">")
117     element = session.find.css("input", all=False)
118
119     response = send_keys_to_element(session, element, "foo")
120     assert_error(response, "element not interactable")
121
122
123 def test_hidden_element(session):
124     session.url = inline("<input style=\"visibility: hidden\">")
125     element = session.find.css("input", all=False)
126
127     response = send_keys_to_element(session, element, "foo")
128     assert_error(response, "element not interactable")
129
130
131 def test_disabled_element(session):
132     session.url = inline("<input disabled=\"false\">")
133     element = session.find.css("input", all=False)
134
135     response = send_keys_to_element(session, element, "foo")
136     assert_error(response, "element not interactable")