14
14
import dash_table_experiments as dt
15
15
from selenium import webdriver
16
16
from selenium .webdriver .common .keys import Keys
17
+ import time
17
18
18
19
try :
19
20
from urlparse import urlparse
20
21
except ImportError :
21
22
from urllib .parse import urlparse
22
23
23
24
from .IntegrationTests import IntegrationTests
24
- from .utils import invincible , wait_for , waiter
25
25
26
26
# Download geckodriver: https://github.com/mozilla/geckodriver/releases
27
27
# And add to path:
34
34
35
35
class Tests (IntegrationTests ):
36
36
def setUp (self ):
37
- def wait_for_element_by_id (id ):
38
- wait_for (lambda : None is not invincible (
39
- lambda : self .driver .find_element_by_id (id )
40
- ))
41
- return self .driver .find_element_by_id (id )
42
- self .wait_for_element_by_id = wait_for_element_by_id
43
-
44
- def wait_for_element_by_css_selector (css_selector ):
45
- wait_for (lambda : None is not invincible (
46
- lambda : self .driver .find_element_by_css_selector (css_selector )
47
- ))
48
- return self .driver .find_element_by_css_selector (css_selector )
49
- self .wait_for_element_by_css_selector = (
50
- wait_for_element_by_css_selector
51
- )
37
+ pass
38
+
39
+ def wait_for_element_by_css_selector (self , selector ):
40
+ start_time = time .time ()
41
+ while time .time () < start_time + 20 :
42
+ try :
43
+ return self .driver .find_element_by_css_selector (selector )
44
+ except Exception as e :
45
+ pass
46
+ time .sleep (0.25 )
47
+ raise e
48
+
49
+ def wait_for_text_to_equal (self , selector , assertion_text ):
50
+ start_time = time .time ()
51
+ while time .time () < start_time + 20 :
52
+ el = self .wait_for_element_by_css_selector (selector )
53
+ try :
54
+ return self .assertEqual (el .text , assertion_text )
55
+ except Exception as e :
56
+ pass
57
+ time .sleep (0.25 )
58
+ raise e
52
59
53
60
def snapshot (self , name ):
54
61
if 'PERCY_PROJECT' in os .environ and 'PERCY_TOKEN' in os .environ :
@@ -100,7 +107,9 @@ def update_output(contents):
100
107
df = pd .read_csv (io .StringIO (base64 .b64decode (
101
108
content_string ).decode ('utf-8' )))
102
109
return html .Div ([
103
- dt .DataTable (rows = df .to_dict ('records' )),
110
+ dt .DataTable (
111
+ rows = df .to_dict ('records' ),
112
+ columns = ['city' , 'country' ]),
104
113
html .Hr (),
105
114
html .Div ('Raw Content' ),
106
115
html .Pre (contents , style = pre_style )
@@ -109,7 +118,9 @@ def update_output(contents):
109
118
df = pd .read_excel (io .BytesIO (base64 .b64decode (
110
119
content_string )))
111
120
return html .Div ([
112
- dt .DataTable (rows = df .to_dict ('records' )),
121
+ dt .DataTable (
122
+ rows = df .to_dict ('records' ),
123
+ columns = ['city' , 'country' ]),
113
124
html .Hr (),
114
125
html .Div ('Raw Content' ),
115
126
html .Pre (contents , style = pre_style )
@@ -131,10 +142,10 @@ def update_output(contents):
131
142
self .startServer (app )
132
143
133
144
try :
134
- self .wait_for_element_by_id ( ' waitfor' )
145
+ self .wait_for_element_by_css_selector ( '# waitfor' )
135
146
except Exception as e :
136
- print (self .wait_for_element_by_id (
137
- '_dash-app-content' ).get_attribute ('innerHTML' ))
147
+ print (self .wait_for_element_by_css_selector (
148
+ '# _dash-app-content' ).get_attribute ('innerHTML' ))
138
149
raise e
139
150
140
151
upload_div = self .wait_for_element_by_css_selector (
@@ -189,10 +200,10 @@ def test_upload_gallery(self):
189
200
self .startServer (app )
190
201
191
202
try :
192
- self .wait_for_element_by_id ( ' waitfor' )
203
+ self .wait_for_element_by_css_selector ( '# waitfor' )
193
204
except Exception as e :
194
- print (self .wait_for_element_by_id (
195
- '_dash-app-content' ).get_attribute ('innerHTML' ))
205
+ print (self .wait_for_element_by_css_selector (
206
+ '# _dash-app-content' ).get_attribute ('innerHTML' ))
196
207
raise e
197
208
198
209
self .snapshot ('test_upload_gallery' )
@@ -311,12 +322,7 @@ def test_gallery(self):
311
322
])
312
323
self .startServer (app )
313
324
314
- try :
315
- self .wait_for_element_by_id ('waitfor' )
316
- except Exception as e :
317
- print (self .wait_for_element_by_id (
318
- '_dash-app-content' ).get_attribute ('innerHTML' ))
319
- raise e
325
+ self .wait_for_element_by_css_selector ('#waitfor' )
320
326
321
327
self .snapshot ('gallery' )
322
328
@@ -393,60 +399,55 @@ def update_pathname(n_clicks, current_pathname):
393
399
self .snapshot ('link -- location' )
394
400
395
401
# Check that link updates pathname
396
- self .driver .find_element_by_id ('test-link' ).click ()
397
-
398
- self .snapshot ('link --- /test/pathname' )
402
+ self .wait_for_element_by_css_selector ('#test-link' ).click ()
399
403
self .assertEqual (
400
404
self .driver .current_url .replace ('http://localhost:8050' , '' ),
401
405
'/test/pathname' )
402
- self .assertEqual (
403
- self .driver .find_element_by_id ('test-pathname' ).text ,
404
- '/test/pathname' )
406
+ self .wait_for_text_to_equal ('#test-pathname' , '/test/pathname' )
405
407
406
408
# Check that hash is updated in the Location
407
- self .driver .find_element_by_id ('test-link-hash' ).click ()
408
-
409
+ self .wait_for_element_by_css_selector ('#test-link-hash' ).click ()
410
+ self .wait_for_text_to_equal ('#test-pathname' , '/test/pathname' )
411
+ self .wait_for_text_to_equal ('#test-hash' , '#test' )
409
412
self .snapshot ('link -- /test/pathname#test' )
410
- self .assertEqual (self .driver .find_element_by_id ('test-pathname' ).text , '/test/pathname' )
411
- self .assertEqual (self .driver .find_element_by_id ('test-hash' ).text , '#test' )
412
413
413
414
# Check that search is updated in the Location -- note that this goes through href and therefore wipes the hash
414
- self .driver .find_element_by_id ('test-link-search' ).click ()
415
-
415
+ self .wait_for_element_by_css_selector ('#test-link-search' ).click ()
416
+ self .wait_for_text_to_equal ('#test-search' , '?testQuery=testValue' )
417
+ self .wait_for_text_to_equal ('#test-hash' , '' )
416
418
self .snapshot ('link -- /test/pathname?testQuery=testValue' )
417
- self .assertEqual (self .driver .find_element_by_id ('test-search' ).text , '?testQuery=testValue' )
418
- self .assertEqual (self .driver .find_element_by_id ('test-hash' ).text , '' )
419
419
420
420
# Check that pathname is updated through a Button click via props
421
- self .driver . find_element_by_id ( ' test-button' ).click ()
422
- time . sleep ( 1 ) # Need to wait for the callback to fire TODO is there a better way to wait?
423
-
421
+ self .wait_for_element_by_css_selector ( '# test-button' ).click ()
422
+ self . wait_for_text_to_equal ( '#test-pathname' , '/new/pathname' )
423
+ self . wait_for_text_to_equal ( '#test-search' , '?testQuery=testValue' )
424
424
self .snapshot ('link -- /new/pathname?testQuery=testValue' )
425
- self .assertEqual (self .driver .find_element_by_id ('test-pathname' ).text , '/new/pathname' )
426
- self .assertEqual (self .driver .find_element_by_id ('test-search' ).text , '?testQuery=testValue' )
427
425
428
426
# Check that pathname is updated through an a tag click via props
429
- self .driver .find_element_by_id ('test-a' ).click ()
430
- waiter (self .wait_for_element_by_id )
427
+ self .wait_for_element_by_css_selector ('#test-a' ).click ()
428
+ try :
429
+ self .wait_for_element_by_css_selector ('#waitfor' )
430
+ except Exception as e :
431
+ print (self .wait_for_element_by_css_selector (
432
+ '#_dash-app-content' ).get_attribute ('innerHTML' ))
433
+ raise e
431
434
435
+ self .wait_for_text_to_equal ('#test-pathname' , '/test/pathname/a' )
436
+ self .wait_for_text_to_equal ('#test-search' , '' )
437
+ self .wait_for_text_to_equal ('#test-hash' , '' )
432
438
self .snapshot ('link -- /test/pathname/a' )
433
- self .assertEqual (self .driver .find_element_by_id ('test-pathname' ).text , '/test/pathname/a' )
434
- self .assertEqual (self .driver .find_element_by_id ('test-search' ).text , '' )
435
- self .assertEqual (self .driver .find_element_by_id ('test-hash' ).text , '' )
436
439
437
440
# Check that hash is updated through an a tag click via props
438
- self .driver .find_element_by_id ('test-a-hash' ).click ()
439
-
441
+ self .wait_for_element_by_css_selector ('#test-a-hash' ).click ()
442
+ self .wait_for_text_to_equal ('#test-pathname' , '/test/pathname/a' )
443
+ self .wait_for_text_to_equal ('#test-search' , '' )
444
+ self .wait_for_text_to_equal ('#test-hash' , '#test-hash' )
440
445
self .snapshot ('link -- /test/pathname/a#test-hash' )
441
- self .assertEqual (self .driver .find_element_by_id ('test-pathname' ).text , '/test/pathname/a' )
442
- self .assertEqual (self .driver .find_element_by_id ('test-search' ).text , '' )
443
- self .assertEqual (self .driver .find_element_by_id ('test-hash' ).text , '#test-hash' )
444
446
445
447
# Check that hash is updated through an a tag click via props
446
- self .driver .find_element_by_id ('test-a-query' ).click ()
447
- waiter (self .wait_for_element_by_id )
448
-
448
+ self .wait_for_element_by_css_selector ('#test-a-query' ).click ()
449
+ self .wait_for_element_by_css_selector ('#waitfor' )
450
+ self .wait_for_text_to_equal ('#test-pathname' , '/test/pathname/a' )
451
+ self .wait_for_text_to_equal ('#test-search' , '?queryA=valueA' )
452
+ self .wait_for_text_to_equal ('#test-hash' , '' )
449
453
self .snapshot ('link -- /test/pathname/a?queryA=valueA' )
450
- self .assertEqual (self .driver .find_element_by_id ('test-pathname' ).text , '/test/pathname/a' )
451
- self .assertEqual (self .driver .find_element_by_id ('test-search' ).text , '?queryA=valueA' )
452
- self .assertEqual (self .driver .find_element_by_id ('test-hash' ).text , '' )
0 commit comments