16
16
# under the License.
17
17
18
18
import re
19
+ from typing import Callable
20
+ from typing import List
21
+ from typing import Tuple
22
+ from typing import Union
19
23
20
24
from selenium .common .exceptions import NoAlertPresentException
21
25
from selenium .common .exceptions import NoSuchElementException
22
26
from selenium .common .exceptions import NoSuchFrameException
23
27
from selenium .common .exceptions import StaleElementReferenceException
24
28
from selenium .common .exceptions import WebDriverException
29
+ from selenium .webdriver import Chrome
30
+ from selenium .webdriver import Edge
31
+ from selenium .webdriver import Firefox
32
+ from selenium .webdriver import Ie
33
+ from selenium .webdriver import Safari
34
+ from selenium .webdriver .common .alert import Alert
25
35
from selenium .webdriver .remote .webdriver import WebElement
26
36
37
+ # All driver types
38
+ AnyDriver = Union [Chrome , Firefox , Safari , Ie , Edge ]
39
+
27
40
"""
28
41
* Canned "Expected Conditions" which are generally useful within webdriver
29
42
* tests.
30
43
"""
31
44
32
45
33
- def title_is (title : str ):
46
+ def title_is (title : str ) -> Callable [[ AnyDriver ], bool ] :
34
47
"""An expectation for checking the title of a page.
35
48
36
49
title is the expected title, which must be an exact match returns
@@ -43,7 +56,7 @@ def _predicate(driver):
43
56
return _predicate
44
57
45
58
46
- def title_contains (title : str ):
59
+ def title_contains (title : str ) -> Callable [[ AnyDriver ], bool ] :
47
60
"""An expectation for checking that the title contains a case-sensitive
48
61
substring.
49
62
@@ -57,7 +70,7 @@ def _predicate(driver):
57
70
return _predicate
58
71
59
72
60
- def presence_of_element_located (locator ) :
73
+ def presence_of_element_located (locator : Tuple [ str , str ]) -> Callable [[ AnyDriver ], WebElement ] :
61
74
"""An expectation for checking that an element is present on the DOM of a
62
75
page. This does not necessarily mean that the element is visible.
63
76
@@ -71,7 +84,7 @@ def _predicate(driver):
71
84
return _predicate
72
85
73
86
74
- def url_contains (url : str ):
87
+ def url_contains (url : str ) -> Callable [[ AnyDriver ], bool ] :
75
88
"""An expectation for checking that the current url contains a case-
76
89
sensitive substring.
77
90
@@ -85,7 +98,7 @@ def _predicate(driver):
85
98
return _predicate
86
99
87
100
88
- def url_matches (pattern : str ):
101
+ def url_matches (pattern : str ) -> Callable [[ AnyDriver ], bool ] :
89
102
"""An expectation for checking the current url.
90
103
91
104
pattern is the expected pattern. This finds the first occurrence of
@@ -99,7 +112,7 @@ def _predicate(driver):
99
112
return _predicate
100
113
101
114
102
- def url_to_be (url : str ):
115
+ def url_to_be (url : str ) -> Callable [[ AnyDriver ], bool ] :
103
116
"""An expectation for checking the current url.
104
117
105
118
url is the expected url, which must be an exact match returns True
@@ -112,7 +125,7 @@ def _predicate(driver):
112
125
return _predicate
113
126
114
127
115
- def url_changes (url : str ):
128
+ def url_changes (url : str ) -> Callable [[ AnyDriver ], bool ] :
116
129
"""An expectation for checking the current url.
117
130
118
131
url is the expected url, which must not be an exact match returns
@@ -125,7 +138,7 @@ def _predicate(driver):
125
138
return _predicate
126
139
127
140
128
- def visibility_of_element_located (locator ) :
141
+ def visibility_of_element_located (locator : Tuple [ str , str ]) -> Callable [[ AnyDriver ], Union [ WebElement , bool ]] :
129
142
"""An expectation for checking that an element is present on the DOM of a
130
143
page and visible. Visibility means that the element is not only displayed
131
144
but also has a height and width that is greater than 0.
@@ -143,7 +156,7 @@ def _predicate(driver):
143
156
return _predicate
144
157
145
158
146
- def visibility_of (element ) :
159
+ def visibility_of (element : WebElement ) -> Callable [[ AnyDriver ], Union [ WebElement , bool ]] :
147
160
"""An expectation for checking that an element, known to be present on the
148
161
DOM of a page, is visible.
149
162
@@ -158,11 +171,11 @@ def _predicate(_):
158
171
return _predicate
159
172
160
173
161
- def _element_if_visible (element , visibility = True ):
174
+ def _element_if_visible (element : WebElement , visibility : bool = True ) -> Union [ WebElement , bool ] :
162
175
return element if element .is_displayed () == visibility else False
163
176
164
177
165
- def presence_of_all_elements_located (locator ) :
178
+ def presence_of_all_elements_located (locator : Tuple [ str , str ]) -> Callable [[ AnyDriver ], List [ WebElement ]] :
166
179
"""An expectation for checking that there is at least one element present
167
180
on a web page.
168
181
@@ -176,7 +189,7 @@ def _predicate(driver):
176
189
return _predicate
177
190
178
191
179
- def visibility_of_any_elements_located (locator ) :
192
+ def visibility_of_any_elements_located (locator : Tuple [ str , str ]) -> Callable [[ AnyDriver ], List [ WebElement ]] :
180
193
"""An expectation for checking that there is at least one element visible
181
194
on a web page.
182
195
@@ -190,7 +203,9 @@ def _predicate(driver):
190
203
return _predicate
191
204
192
205
193
- def visibility_of_all_elements_located (locator ):
206
+ def visibility_of_all_elements_located (
207
+ locator : Tuple [str , str ]
208
+ ) -> Callable [[AnyDriver ], Union [bool , List [WebElement ]]]:
194
209
"""An expectation for checking that all elements are present on the DOM of
195
210
a page and visible. Visibility means that the elements are not only
196
211
displayed but also has a height and width that is greater than 0.
@@ -212,7 +227,7 @@ def _predicate(driver):
212
227
return _predicate
213
228
214
229
215
- def text_to_be_present_in_element (locator , text_ ) :
230
+ def text_to_be_present_in_element (locator : Tuple [ str , str ], text_ : str ) -> Callable [[ AnyDriver ], bool ] :
216
231
"""An expectation for checking if the given text is present in the
217
232
specified element.
218
233
@@ -229,7 +244,7 @@ def _predicate(driver):
229
244
return _predicate
230
245
231
246
232
- def text_to_be_present_in_element_value (locator , text_ ) :
247
+ def text_to_be_present_in_element_value (locator : Tuple [ str , str ], text_ : str ) -> Callable [[ AnyDriver ], bool ] :
233
248
"""An expectation for checking if the given text is present in the
234
249
element's value.
235
250
@@ -246,7 +261,9 @@ def _predicate(driver):
246
261
return _predicate
247
262
248
263
249
- def text_to_be_present_in_element_attribute (locator , attribute_ , text_ ):
264
+ def text_to_be_present_in_element_attribute (
265
+ locator : Tuple [str , str ], attribute_ : str , text_ : str
266
+ ) -> Callable [[AnyDriver ], bool ]:
250
267
"""An expectation for checking if the given text is present in the
251
268
element's attribute.
252
269
@@ -265,7 +282,7 @@ def _predicate(driver):
265
282
return _predicate
266
283
267
284
268
- def frame_to_be_available_and_switch_to_it (locator ) :
285
+ def frame_to_be_available_and_switch_to_it (locator : Union [ Tuple [ str , str ], str ]) -> Callable [[ AnyDriver ], bool ] :
269
286
"""An expectation for checking whether the given frame is available to
270
287
switch to.
271
288
@@ -286,7 +303,9 @@ def _predicate(driver):
286
303
return _predicate
287
304
288
305
289
- def invisibility_of_element_located (locator ):
306
+ def invisibility_of_element_located (
307
+ locator : Union [WebElement , Tuple [str , str ]]
308
+ ) -> Callable [[AnyDriver ], Union [WebElement , bool ]]:
290
309
"""An Expectation for checking that an element is either invisible or not
291
310
present on the DOM.
292
311
@@ -298,7 +317,7 @@ def _predicate(driver):
298
317
target = locator
299
318
if not isinstance (target , WebElement ):
300
319
target = driver .find_element (* target )
301
- return _element_if_visible (target , False )
320
+ return _element_if_visible (target , visibility = False )
302
321
except (NoSuchElementException , StaleElementReferenceException ):
303
322
# In the case of NoSuchElement, returns true because the element is
304
323
# not present in DOM. The try block checks if the element is present
@@ -310,7 +329,9 @@ def _predicate(driver):
310
329
return _predicate
311
330
312
331
313
- def invisibility_of_element (element ):
332
+ def invisibility_of_element (
333
+ element : Union [WebElement , Tuple [str , str ]]
334
+ ) -> Callable [[AnyDriver ], Union [WebElement , bool ]]:
314
335
"""An Expectation for checking that an element is either invisible or not
315
336
present on the DOM.
316
337
@@ -319,7 +340,7 @@ def invisibility_of_element(element):
319
340
return invisibility_of_element_located (element )
320
341
321
342
322
- def element_to_be_clickable (mark ) :
343
+ def element_to_be_clickable (mark : Union [ WebElement , Tuple [ str , str ]]) -> Callable [[ AnyDriver ], Union [ WebElement , bool ]] :
323
344
"""An Expectation for checking an element is visible and enabled such that
324
345
you can click it.
325
346
@@ -340,7 +361,7 @@ def _predicate(driver):
340
361
return _predicate
341
362
342
363
343
- def staleness_of (element ) :
364
+ def staleness_of (element : WebElement ) -> Callable [[ AnyDriver ], bool ] :
344
365
"""Wait until an element is no longer attached to the DOM.
345
366
346
367
element is the element to wait for. returns False if the element is
@@ -358,7 +379,7 @@ def _predicate(_):
358
379
return _predicate
359
380
360
381
361
- def element_to_be_selected (element ) :
382
+ def element_to_be_selected (element : WebElement ) -> Callable [[ AnyDriver ], bool ] :
362
383
"""An expectation for checking the selection is selected.
363
384
364
385
element is WebElement object
@@ -370,7 +391,7 @@ def _predicate(_):
370
391
return _predicate
371
392
372
393
373
- def element_located_to_be_selected (locator ) :
394
+ def element_located_to_be_selected (locator : Tuple [ str , str ]) -> Callable [[ AnyDriver ], bool ] :
374
395
"""An expectation for the element to be located is selected.
375
396
376
397
locator is a tuple of (by, path)
@@ -382,7 +403,7 @@ def _predicate(driver):
382
403
return _predicate
383
404
384
405
385
- def element_selection_state_to_be (element , is_selected ) :
406
+ def element_selection_state_to_be (element : WebElement , is_selected : bool ) -> Callable [[ AnyDriver ], bool ] :
386
407
"""An expectation for checking if the given element is selected.
387
408
388
409
element is WebElement object is_selected is a Boolean.
@@ -394,7 +415,7 @@ def _predicate(_):
394
415
return _predicate
395
416
396
417
397
- def element_located_selection_state_to_be (locator , is_selected ) :
418
+ def element_located_selection_state_to_be (locator : Tuple [ str , str ], is_selected : bool ) -> Callable [[ AnyDriver ], bool ] :
398
419
"""An expectation to locate an element and check if the selection state
399
420
specified is in that state.
400
421
@@ -411,7 +432,7 @@ def _predicate(driver):
411
432
return _predicate
412
433
413
434
414
- def number_of_windows_to_be (num_windows ) :
435
+ def number_of_windows_to_be (num_windows : int ) -> Callable [[ AnyDriver ], bool ] :
415
436
"""An expectation for the number of windows to be a certain value."""
416
437
417
438
def _predicate (driver ):
@@ -420,7 +441,7 @@ def _predicate(driver):
420
441
return _predicate
421
442
422
443
423
- def new_window_is_opened (current_handles ) :
444
+ def new_window_is_opened (current_handles : List [ str ]) -> Callable [[ AnyDriver ], bool ] :
424
445
"""An expectation that a new window will be opened and have the number of
425
446
windows handles increase."""
426
447
@@ -430,7 +451,7 @@ def _predicate(driver):
430
451
return _predicate
431
452
432
453
433
- def alert_is_present ():
454
+ def alert_is_present () -> Callable [[ AnyDriver ], Union [ Alert , bool ]] :
434
455
"""An expectation for checking if an alert is currently present and
435
456
switching to it."""
436
457
@@ -443,7 +464,7 @@ def _predicate(driver):
443
464
return _predicate
444
465
445
466
446
- def element_attribute_to_include (locator , attribute_ ) :
467
+ def element_attribute_to_include (locator : Tuple [ str , str ], attribute_ : str ) -> Callable [[ AnyDriver ], bool ] :
447
468
"""An expectation for checking if the given attribute is included in the
448
469
specified element.
449
470
@@ -460,7 +481,7 @@ def _predicate(driver):
460
481
return _predicate
461
482
462
483
463
- def any_of (* expected_conditions ):
484
+ def any_of (* expected_conditions ) -> Callable [[ AnyDriver ], Union [ WebElement , bool ]] :
464
485
"""An expectation that any of multiple expected conditions is true.
465
486
466
487
Equivalent to a logical 'OR'. Returns results of the first matching
@@ -480,7 +501,7 @@ def any_of_condition(driver):
480
501
return any_of_condition
481
502
482
503
483
- def all_of (* expected_conditions ):
504
+ def all_of (* expected_conditions ) -> Callable [[ AnyDriver ], Union [ WebElement , bool ]] :
484
505
"""An expectation that all of multiple expected conditions is true.
485
506
486
507
Equivalent to a logical 'AND'.
@@ -503,7 +524,7 @@ def all_of_condition(driver):
503
524
return all_of_condition
504
525
505
526
506
- def none_of (* expected_conditions ):
527
+ def none_of (* expected_conditions ) -> Callable [[ AnyDriver ], bool ] :
507
528
"""An expectation that none of 1 or multiple expected conditions is true.
508
529
509
530
Equivalent to a logical 'NOT-OR'. Returns a Boolean
0 commit comments