1301a45a73c5dd462294a767f29f6870ac27e187
[WebKit-https.git] / WebDriverTests / imported / w3c / webdriver / tests / state / get_element_attribute.py
1 import pytest
2
3 from tests.support.asserts import assert_error, assert_success, assert_dialog_handled
4 from tests.support.fixtures import create_dialog
5 from tests.support.inline import inline
6
7
8 def get_attribute(session, element, attr):
9     return session.transport.send("GET", "session/{session_id}/element/{element_id}/attribute/{attr}"
10                                   .format(session_id=session.session_id,
11                                           element_id=element,
12                                           attr=attr))
13
14
15 # 13.2 Get Element Attribute
16
17 def test_no_browsing_context(session, create_window):
18     # 13.2 step 1
19     session.window_handle = create_window()
20     session.close()
21
22     result = get_attribute(session, "foo", "id")
23
24     assert_error(result, "no such window")
25
26
27 def test_handle_prompt_dismiss(new_session, add_browser_capabilites):
28     # 13.2 step 2
29     _, session = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({"unhandledPromptBehavior": "dismiss"})}})
30     session.url = inline("<input id=foo>")
31     element = session.find.css("#foo", all=False)
32
33     create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
34
35     result = get_attribute(session, element.id, "id")
36
37     assert_success(result, "foo")
38     assert_dialog_handled(session, "dismiss #1")
39
40     create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
41
42     result = get_attribute(session, element.id, "id")
43
44     assert_success(result, "foo")
45     assert_dialog_handled(session, "dismiss #2")
46
47     create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
48
49     result = get_attribute(session, element.id, "id")
50
51     assert_success(result, "foo")
52     assert_dialog_handled(session, "dismiss #3")
53
54
55 def test_handle_prompt_accept(new_session, add_browser_capabilites):
56     # 13.2 step 2
57     _, session = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({"unhandledPromptBehavior": "accept"})}})
58     session.url = inline("<input id=foo>")
59     element = session.find.css("#foo", all=False)
60
61     create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
62
63     result = get_attribute(session, element.id, "id")
64
65     assert_success(result, "foo")
66     assert_dialog_handled(session, "dismiss #1")
67
68     create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
69
70     result = get_attribute(session, element.id, "id")
71
72     assert_success(result, "foo")
73     assert_dialog_handled(session, "dismiss #2")
74
75     create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
76
77     result = get_attribute(session, element.id, "id")
78
79     assert_success(result, "foo")
80     assert_dialog_handled(session, "dismiss #3")
81
82
83 def test_handle_prompt_missing_value(session):
84     # 13.2 step 2
85     session.url = inline("<input id=foo>")
86     element = session.find.css("#foo", all=False)
87
88     create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
89
90     result = get_attribute(session, element.id, "id")
91
92     assert_error(result, "unexpected alert open")
93     assert_dialog_handled(session, "dismiss #1")
94
95     create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
96
97     result = get_attribute(session, element.id, "id")
98
99     assert_error(result, "unexpected alert open")
100     assert_dialog_handled(session, "dismiss #2")
101
102     create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
103
104     result = get_attribute(session, element.id, "id")
105
106     assert_error(result, "unexpected alert open")
107     assert_dialog_handled(session, "dismiss #3")
108
109
110 def test_element_not_found(session):
111     # 13.2 Step 3
112     result = get_attribute(session, "foo", "id")
113
114     assert_error(result, "no such element")
115
116
117 def test_element_stale(session):
118     # 13.2 step 4
119     session.url = inline("<input id=foo>")
120     element = session.find.css("input", all=False)
121     session.refresh()
122     result = get_attribute(session, element.id, "id")
123
124     assert_error(result, "stale element reference")
125
126
127 def test_normal(session):
128     # 13.2 Step 5
129     session.url = inline("<input type=checkbox>")
130     element = session.find.css("input", all=False)
131     result = get_attribute(session, element.id, "input")
132     assert_success(result, None)
133     assert False == session.execute_script("return document.querySelector('input').checked")
134
135     # Check we are not returning the property which will have a different value
136     element.click()
137     assert True == session.execute_script("return document.querySelector('input').checked")
138     result = get_attribute(session, element.id, "input")
139     assert_success(result, None)
140
141
142 @pytest.mark.parametrize("tag,attrs", [
143     ("audio", ["autoplay", "controls", "loop", "muted"]),
144     ("button", ["autofocus", "disabled", "formnovalidate"]),
145     ("details", ["open"]),
146     ("dialog", ["open"]),
147     ("fieldset", ["disabled"]),
148     ("form", ["novalidate"]),
149     ("iframe", ["allowfullscreen"]),
150     ("img", ["ismap"]),
151     ("input", ["autofocus", "checked", "disabled", "formnovalidate", "multiple", "readonly", "required"]),
152     ("menuitem", ["checked", "default", "disabled"]),
153     ("object", ["typemustmatch"]),
154     ("ol", ["reversed"]),
155     ("optgroup", ["disabled"]),
156     ("option", ["disabled", "selected"]),
157     ("script", ["async", "defer"]),
158     ("select", ["autofocus", "disabled", "multiple", "required"]),
159     ("textarea", ["autofocus", "disabled", "readonly", "required"]),
160     ("track", ["default"]),
161     ("video", ["autoplay", "controls", "loop", "muted"])
162 ])
163 def test_boolean_attribute(session, tag, attrs):
164     # 13.2 Step 5
165     for attr in attrs:
166         session.url = inline("<{0} {1}>".format(tag, attr))
167
168         element = session.find.css(tag, all=False)
169         result = result = get_attribute(session, element.id, attr)
170         assert_success(result, "true")
171
172
173 def test_global_boolean_attributes(session):
174     # 13.2 Step 5
175     session.url = inline("<p hidden>foo")
176     element = session.find.css("p", all=False)
177     result = result = get_attribute(session, element.id, "hidden")
178
179     assert_success(result, "true")
180
181     session.url = inline("<p>foo")
182     element = session.find.css("p", all=False)
183     result = result = get_attribute(session, element.id, "hidden")
184     assert_success(result, None)
185
186     session.url = inline("<p itemscope>foo")
187     element = session.find.css("p", all=False)
188     result = result = get_attribute(session, element.id, "itemscope")
189
190     assert_success(result, "true")
191
192     session.url = inline("<p>foo")
193     element = session.find.css("p", all=False)
194     result = result = get_attribute(session, element.id, "itemscope")
195     assert_success(result, None)