10
10
from seleniumbase .fixtures import constants
11
11
12
12
13
+ def wait_for_ready_state_complete (driver , timeout = settings .EXTREME_TIMEOUT ):
14
+ """
15
+ The DOM (Document Object Model) has a property called "readyState".
16
+ When the value of this becomes "complete", page resources are considered
17
+ fully loaded (although AJAX and other loads might still be happening).
18
+ This method will wait until document.readyState == "complete".
19
+ """
20
+
21
+ start_ms = time .time () * 1000.0
22
+ stop_ms = start_ms + (timeout * 1000.0 )
23
+ for x in range (int (timeout * 10 )):
24
+ try :
25
+ ready_state = driver .execute_script ("return document.readyState" )
26
+ except WebDriverException :
27
+ # Bug fix for: [Permission denied to access property "document"]
28
+ time .sleep (0.03 )
29
+ return True
30
+ if ready_state == u'complete' :
31
+ time .sleep (0.01 ) # Better be sure everything is done loading
32
+ return True
33
+ else :
34
+ now_ms = time .time () * 1000.0
35
+ if now_ms >= stop_ms :
36
+ break
37
+ time .sleep (0.1 )
38
+ raise Exception (
39
+ "Page elements never fully loaded after %s seconds!" % timeout )
40
+
41
+
42
+ def execute_async_script (driver , script , timeout = settings .EXTREME_TIMEOUT ):
43
+ driver .set_script_timeout (timeout )
44
+ return driver .execute_async_script (script )
45
+
46
+
47
+ def wait_for_angularjs (driver , timeout = settings .LARGE_TIMEOUT , ** kwargs ):
48
+ if not settings .WAIT_FOR_ANGULARJS :
49
+ return
50
+
51
+ NG_WRAPPER = '%(prefix)s' \
52
+ 'var $elm=document.querySelector(' \
53
+ '\' [data-ng-app],[ng-app],.ng-scope\' )||document;' \
54
+ 'if(window.angular && angular.getTestability){' \
55
+ 'angular.getTestability($elm).whenStable(%(handler)s)' \
56
+ '}else{' \
57
+ 'var $inj;try{$inj=angular.element($elm).injector()||' \
58
+ 'angular.injector([\' ng\' ])}catch(ex){' \
59
+ '$inj=angular.injector([\' ng\' ])};$inj.get=$inj.get||' \
60
+ '$inj;$inj.get(\' $browser\' ).' \
61
+ 'notifyWhenNoOutstandingRequests(%(handler)s)}' \
62
+ '%(suffix)s'
63
+ def_pre = 'var cb=arguments[arguments.length-1];if(window.angular){'
64
+ prefix = kwargs .pop ('prefix' , def_pre )
65
+ handler = kwargs .pop ('handler' , 'function(){cb(true)}' )
66
+ suffix = kwargs .pop ('suffix' , '}else{cb(false)}' )
67
+ script = NG_WRAPPER % {'prefix' : prefix ,
68
+ 'handler' : handler ,
69
+ 'suffix' : suffix }
70
+ try :
71
+ execute_async_script (driver , script , timeout = timeout )
72
+ except Exception :
73
+ time .sleep (0.05 )
74
+
75
+
13
76
def is_jquery_activated (driver ):
14
77
try :
15
78
driver .execute_script ("jQuery('html')" ) # Fails if jq is not defined
@@ -18,6 +81,22 @@ def is_jquery_activated(driver):
18
81
return False
19
82
20
83
84
+ def wait_for_jquery_active (driver , timeout = None ):
85
+ if not timeout :
86
+ timeout = int (settings .MINI_TIMEOUT * 10.0 )
87
+ else :
88
+ timeout = int (timeout * 10.0 )
89
+ for x in range (timeout ):
90
+ # jQuery needs a small amount of time to activate.
91
+ try :
92
+ driver .execute_script ("jQuery('html')" )
93
+ wait_for_ready_state_complete (driver )
94
+ wait_for_angularjs (driver )
95
+ return
96
+ except Exception :
97
+ time .sleep (0.1 )
98
+
99
+
21
100
def activate_jquery (driver ):
22
101
""" If "jQuery is not defined", use this method to activate it for use.
23
102
This happens because jQuery is not always defined on web sites. """
@@ -92,69 +171,6 @@ def safe_execute_script(driver, script):
92
171
driver .execute_script (script )
93
172
94
173
95
- def wait_for_ready_state_complete (driver , timeout = settings .EXTREME_TIMEOUT ):
96
- """
97
- The DOM (Document Object Model) has a property called "readyState".
98
- When the value of this becomes "complete", page resources are considered
99
- fully loaded (although AJAX and other loads might still be happening).
100
- This method will wait until document.readyState == "complete".
101
- """
102
-
103
- start_ms = time .time () * 1000.0
104
- stop_ms = start_ms + (timeout * 1000.0 )
105
- for x in range (int (timeout * 10 )):
106
- try :
107
- ready_state = driver .execute_script ("return document.readyState" )
108
- except WebDriverException :
109
- # Bug fix for: [Permission denied to access property "document"]
110
- time .sleep (0.03 )
111
- return True
112
- if ready_state == u'complete' :
113
- time .sleep (0.01 ) # Better be sure everything is done loading
114
- return True
115
- else :
116
- now_ms = time .time () * 1000.0
117
- if now_ms >= stop_ms :
118
- break
119
- time .sleep (0.1 )
120
- raise Exception (
121
- "Page elements never fully loaded after %s seconds!" % timeout )
122
-
123
-
124
- def execute_async_script (driver , script , timeout = settings .EXTREME_TIMEOUT ):
125
- driver .set_script_timeout (timeout )
126
- return driver .execute_async_script (script )
127
-
128
-
129
- def wait_for_angularjs (driver , timeout = settings .LARGE_TIMEOUT , ** kwargs ):
130
- if not settings .WAIT_FOR_ANGULARJS :
131
- return
132
-
133
- NG_WRAPPER = '%(prefix)s' \
134
- 'var $elm=document.querySelector(' \
135
- '\' [data-ng-app],[ng-app],.ng-scope\' )||document;' \
136
- 'if(window.angular && angular.getTestability){' \
137
- 'angular.getTestability($elm).whenStable(%(handler)s)' \
138
- '}else{' \
139
- 'var $inj;try{$inj=angular.element($elm).injector()||' \
140
- 'angular.injector([\' ng\' ])}catch(ex){' \
141
- '$inj=angular.injector([\' ng\' ])};$inj.get=$inj.get||' \
142
- '$inj;$inj.get(\' $browser\' ).' \
143
- 'notifyWhenNoOutstandingRequests(%(handler)s)}' \
144
- '%(suffix)s'
145
- def_pre = 'var cb=arguments[arguments.length-1];if(window.angular){'
146
- prefix = kwargs .pop ('prefix' , def_pre )
147
- handler = kwargs .pop ('handler' , 'function(){cb(true)}' )
148
- suffix = kwargs .pop ('suffix' , '}else{cb(false)}' )
149
- script = NG_WRAPPER % {'prefix' : prefix ,
150
- 'handler' : handler ,
151
- 'suffix' : suffix }
152
- try :
153
- execute_async_script (driver , script , timeout = timeout )
154
- except Exception :
155
- time .sleep (0.05 )
156
-
157
-
158
174
def wait_for_css_query_selector (
159
175
driver , selector , timeout = settings .SMALL_TIMEOUT ):
160
176
element = None
@@ -352,10 +368,11 @@ def activate_jquery_confirm(driver):
352
368
353
369
if not is_jquery_activated (driver ):
354
370
add_js_link (driver , jquery_js )
371
+ wait_for_jquery_active (driver , timeout = 0.6 )
355
372
add_css_link (driver , jq_confirm_css )
356
373
add_js_link (driver , jq_confirm_js )
357
374
358
- for x in range (int ( settings . MINI_TIMEOUT * 10.0 ) ):
375
+ for x in range (7 ):
359
376
# jQuery-Confirm needs a small amount of time to load & activate.
360
377
try :
361
378
driver .execute_script ("jconfirm" )
0 commit comments