4
4
import requests
5
5
from selenium import webdriver
6
6
from selenium .common .exceptions import NoSuchElementException
7
+ from selenium .webdriver .common .by import By
7
8
from selenium .webdriver .chrome .options import Options
8
9
9
10
BROWSER = os .environ .get ('BROWSER' , 'ChromeHeadless' )
11
+ CHROME_SNAP = bool (os .environ .get ('CHROME_SNAP' , False ))
10
12
11
13
12
14
@pytest .fixture (scope = "module" )
13
15
def browser (request ):
14
16
if BROWSER == 'ChromeHeadless' :
15
- chrome_options = Options ()
16
- chrome_options .add_argument ("--headless" )
17
- browser = webdriver .Chrome (chrome_options = chrome_options )
17
+ options = Options ()
18
+ options .add_argument ("--headless" )
19
+ if CHROME_SNAP :
20
+ options .add_argument ("--remote-debugging-port=9222" )
21
+ browser = webdriver .Chrome (options = options )
18
22
else :
19
23
browser = getattr (webdriver , BROWSER )()
20
24
browser .implicitly_wait (3 )
@@ -34,56 +38,56 @@ def test_accordion(server_url, browser):
34
38
browser .get (server_url )
35
39
36
40
def buttons ():
37
- return [b .is_displayed () for b in browser .find_elements_by_tag_name ( 'button' )]
41
+ return [b .is_displayed () for b in browser .find_elements ( By . TAG_NAME , 'button' )]
38
42
39
43
time .sleep (0.5 )
40
44
assert buttons () == [True , False , False ]
41
- assert 'Upload a file (.csv, .xlsx, .xml)' in browser .find_elements_by_tag_name ( 'label' )[0 ].text
42
- browser .find_element_by_partial_link_text ( 'Link' ).click ()
45
+ assert 'Upload a file (.csv, .xlsx, .xml)' in browser .find_elements ( By . TAG_NAME , 'label' )[0 ].text
46
+ browser .find_element ( By . PARTIAL_LINK_TEXT , 'Link' ).click ()
43
47
browser .implicitly_wait (1 )
44
48
time .sleep (0.5 )
45
49
assert buttons () == [False , True , False ]
46
- browser .find_element_by_partial_link_text ( 'Paste' ).click ()
50
+ browser .find_element ( By . PARTIAL_LINK_TEXT , 'Paste' ).click ()
47
51
time .sleep (0.5 )
48
52
assert buttons () == [False , False , True ]
49
- assert 'Paste (XML only)' in browser .find_elements_by_tag_name ( 'label' )[2 ].text
53
+ assert 'Paste (XML only)' in browser .find_elements ( By . TAG_NAME , 'label' )[2 ].text
50
54
51
55
# Now test that the whole banner is clickable
52
- browser .find_element_by_id ( 'headingOne' ).click ()
56
+ browser .find_element ( By . ID , 'headingOne' ).click ()
53
57
time .sleep (0.5 )
54
58
assert buttons () == [True , False , False ]
55
- browser .find_element_by_id ( 'headingTwo' ).click ()
59
+ browser .find_element ( By . ID , 'headingTwo' ).click ()
56
60
time .sleep (0.5 )
57
61
assert buttons () == [False , True , False ]
58
- browser .find_element_by_id ( 'headingThree' ).click ()
62
+ browser .find_element ( By . ID , 'headingThree' ).click ()
59
63
time .sleep (0.5 )
60
64
assert buttons () == [False , False , True ]
61
65
62
66
63
67
def test_index_page_iati (server_url , browser ):
64
68
browser .get (server_url )
65
- assert 'How to use IATI CoVE' in browser .find_element_by_tag_name ( 'body' ).text
66
- assert 'XML - according to version 2.03 of the IATI schema' in browser .find_element_by_tag_name ( 'body' ).text
67
- assert 'Spreadsheet - Excel, CSV (UTF-8, Windows-1252 and ISO-8859-1 encodings supported) - see sample data' in browser .find_element_by_tag_name ( 'body' ).text
69
+ assert 'How to use IATI CoVE' in browser .find_element ( By . TAG_NAME , 'body' ).text
70
+ assert 'XML - according to version 2.03 of the IATI schema' in browser .find_element ( By . TAG_NAME , 'body' ).text
71
+ assert 'Spreadsheet - Excel, CSV (UTF-8, Windows-1252 and ISO-8859-1 encodings supported) - see sample data' in browser .find_element ( By . TAG_NAME , 'body' ).text
68
72
69
73
70
74
@pytest .mark .parametrize (('link_text' , 'url' ), [
71
75
('IATI schema' , 'http://reference.iatistandard.org/203/schema/' )
72
76
])
73
77
def test_index_page_iati_links (server_url , browser , link_text , url ):
74
78
browser .get (server_url )
75
- link = browser .find_element_by_link_text ( link_text )
79
+ link = browser .find_element ( By . LINK_TEXT , link_text )
76
80
href = link .get_attribute ("href" )
77
81
assert url in href
78
82
79
83
80
84
def test_common_index_elements (server_url , browser ):
81
85
browser .get (server_url )
82
- browser .find_element_by_css_selector ( '#more-information .panel-title' ).click ()
86
+ browser .find_element ( By . CSS_SELECTOR , '#more-information .panel-title' ).click ()
83
87
time .sleep (0.5 )
84
- assert 'What happens to the data I provide to this site?' in browser .find_element_by_tag_name ( 'body' ).text
85
- assert 'Why do you delete data after seven days?' in browser .find_element_by_tag_name ( 'body' ).text
86
- assert 'Why provide converted versions?' in browser .find_element_by_tag_name ( 'body' ).text
88
+ assert 'What happens to the data I provide to this site?' in browser .find_element ( By . TAG_NAME , 'body' ).text
89
+ assert 'Why do you delete data after seven days?' in browser .find_element ( By . TAG_NAME , 'body' ).text
90
+ assert 'Why provide converted versions?' in browser .find_element ( By . TAG_NAME , 'body' ).text
87
91
88
92
89
93
@pytest .mark .parametrize (('source_filename' , 'expected_text' , 'conversion_successful' ), [
@@ -118,15 +122,15 @@ def test_explore_iati_url_input(server_url, browser, httpserver, source_filename
118
122
source_url = httpserver .url + '/' + source_filename
119
123
120
124
browser .get (server_url )
121
- browser .find_element_by_partial_link_text ( 'Link' ).click ()
125
+ browser .find_element ( By . PARTIAL_LINK_TEXT , 'Link' ).click ()
122
126
time .sleep (0.5 )
123
- browser .find_element_by_id ( 'id_source_url' ).send_keys (source_url )
124
- browser .find_element_by_css_selector ( "#fetchURL > div.form-group > button.btn.btn-primary" ).click ()
127
+ browser .find_element ( By . ID , 'id_source_url' ).send_keys (source_url )
128
+ browser .find_element ( By . CSS_SELECTOR , "#fetchURL > div.form-group > button.btn.btn-primary" ).click ()
125
129
126
130
data_url = browser .current_url
127
131
128
132
# Click and un-collapse all explore sections
129
- all_sections = browser .find_elements_by_class_name ( 'panel-heading' )
133
+ all_sections = browser .find_elements ( By . CLASS_NAME , 'panel-heading' )
130
134
for section in all_sections :
131
135
if section .get_attribute ('data-toggle' ) == "collapse" and section .get_attribute ('aria-expanded' ) != 'true' :
132
136
browser .execute_script ("arguments[0].scrollIntoView();" , section )
@@ -141,7 +145,7 @@ def test_explore_iati_url_input(server_url, browser, httpserver, source_filename
141
145
142
146
# Expand all sections with the expand all button this time
143
147
try :
144
- browser .find_element_by_link_text ( 'Expand all' ).click ()
148
+ browser .find_element ( By . LINK_TEXT , 'Expand all' ).click ()
145
149
time .sleep (0.5 )
146
150
except NoSuchElementException :
147
151
pass
@@ -151,7 +155,7 @@ def test_explore_iati_url_input(server_url, browser, httpserver, source_filename
151
155
152
156
153
157
def check_url_input_result_page (server_url , browser , httpserver , source_filename , expected_text , conversion_successful ):
154
- body_text = browser .find_element_by_tag_name ( 'body' ).text
158
+ body_text = browser .find_element ( By . TAG_NAME , 'body' ).text
155
159
if isinstance (expected_text , str ):
156
160
expected_text = [expected_text ]
157
161
@@ -162,7 +166,7 @@ def check_url_input_result_page(server_url, browser, httpserver, source_filename
162
166
assert 'Converted to XML' in body_text
163
167
164
168
if source_filename == 'namespace_good.xlsx' :
165
- converted_file = browser .find_element_by_link_text ( "XML (Converted from Original)" ).get_attribute ("href" )
169
+ converted_file = browser .find_element ( By . LINK_TEXT , "XML (Converted from Original)" ).get_attribute ("href" )
166
170
assert requests .get (converted_file ).text == '''<?xml version='1.0' encoding='utf-8'?>
167
171
<iati-activities>
168
172
<!--Data generated by IATI CoVE. Built by Open Data Services Co-operative: http://iati.cove.opendataservices.coop/-->
@@ -174,7 +178,7 @@ def check_url_input_result_page(server_url, browser, httpserver, source_filename
174
178
'''
175
179
176
180
if source_filename == 'basic_iati_org_valid.xlsx' :
177
- converted_file = browser .find_element_by_link_text ( "XML (Converted from Original)" ).get_attribute ("href" )
181
+ converted_file = browser .find_element ( By . LINK_TEXT , "XML (Converted from Original)" ).get_attribute ("href" )
178
182
assert requests .get (converted_file ).text == '''<?xml version='1.0' encoding='utf-8'?>
179
183
<iati-organisations version="2.03">
180
184
<!--Data generated by IATI CoVE. Built by Open Data Services Co-operative: http://iati.cove.opendataservices.coop/-->
@@ -220,36 +224,36 @@ def test_rulesets_table_toggle(server_url, browser, httpserver):
220
224
source_url = httpserver .url + '/basic_iati_ruleset_errors.xml'
221
225
222
226
browser .get (server_url )
223
- browser .find_element_by_partial_link_text ( 'Link' ).click ()
227
+ browser .find_element ( By . PARTIAL_LINK_TEXT , 'Link' ).click ()
224
228
time .sleep (0.5 )
225
- browser .find_element_by_id ( 'id_source_url' ).send_keys (source_url )
226
- browser .find_element_by_css_selector ( '#fetchURL > div.form-group > button.btn.btn-primary' ).click ()
229
+ browser .find_element ( By . ID , 'id_source_url' ).send_keys (source_url )
230
+ browser .find_element ( By . CSS_SELECTOR , '#fetchURL > div.form-group > button.btn.btn-primary' ).click ()
227
231
228
232
# Click and un-collapse all explore sections
229
- all_sections = browser .find_elements_by_class_name ( 'panel-heading' )
233
+ all_sections = browser .find_elements ( By . CLASS_NAME , 'panel-heading' )
230
234
for section in all_sections :
231
235
if section .get_attribute ('data-toggle' ) == 'collapse' :
232
236
if section .get_attribute ('aria-expanded' ) != 'true' :
233
237
browser .execute_script ('arguments[0].scrollIntoView();' , section )
234
238
section .click ()
235
239
time .sleep (0.5 )
236
240
237
- toggle_button = browser .find_element_by_name ( 'ruleset-table-toggle' )
238
- table_header = browser .find_element_by_css_selector ( 'table#ruleset-by-rule thead tr' )
241
+ toggle_button = browser .find_element ( By . NAME , 'ruleset-table-toggle' )
242
+ table_header = browser .find_element ( By . CSS_SELECTOR , 'table#ruleset-by-rule thead tr' )
239
243
header_html = '' .join (table_header .get_attribute ('innerHTML' ).strip ().split ())
240
244
241
245
assert toggle_button .text == 'See same results by activity'
242
- assert browser .find_element_by_id ( 'ruleset-by-rule' ).is_displayed ()
243
- assert not browser .find_element_by_id ( 'ruleset-by-activity' ).is_displayed ()
246
+ assert browser .find_element ( By . ID , 'ruleset-by-rule' ).is_displayed ()
247
+ assert not browser .find_element ( By . ID , 'ruleset-by-activity' ).is_displayed ()
244
248
assert header_html == '<th>Ruleset</th><th>Rule</th><th>Activity</th><th>Explanation</th><th>Path</th>'
245
249
246
250
toggle_button .click ()
247
251
time .sleep (0.5 )
248
- toggle_button = browser .find_element_by_name ( 'ruleset-table-toggle' )
249
- table_header = browser .find_element_by_css_selector ( 'table#ruleset-by-activity thead tr' )
252
+ toggle_button = browser .find_element ( By . NAME , 'ruleset-table-toggle' )
253
+ table_header = browser .find_element ( By . CSS_SELECTOR , 'table#ruleset-by-activity thead tr' )
250
254
header_html = '' .join (table_header .get_attribute ('innerHTML' ).strip ().split ())
251
255
252
256
assert toggle_button .text == 'See same results by ruleset'
253
- assert browser .find_element_by_id ( 'ruleset-by-activity' ).is_displayed ()
254
- assert not browser .find_element_by_id ( 'ruleset-by-rule' ).is_displayed ()
257
+ assert browser .find_element ( By . ID , 'ruleset-by-activity' ).is_displayed ()
258
+ assert not browser .find_element ( By . ID , 'ruleset-by-rule' ).is_displayed ()
255
259
assert header_html == '<th>Activity</th><th>Ruleset</th><th>Rule</th><th>Explanation</th><th>Path</th>'
0 commit comments