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