1+ from selenium .webdriver .common .by import By
2+ from selenium .webdriver .support .wait import WebDriverWait
3+ from selenium .webdriver .support import expected_conditions as EC
4+
15
26class Page :
37
48 def __init__ (self , driver ):
59 self .driver = driver
10+ self .wait = WebDriverWait (self .driver , 10 )
611
712 def find_element (self , * locator ):
813 return self .driver .find_element (* locator )
@@ -14,4 +19,65 @@ def click(self, *locator):
1419 self .find_element (* locator ).click ()
1520
1621 def input_text (self , text , * locator ):
17- self .find_element (* locator ).send_keys (text )
22+ self .find_element (* locator ).send_keys (text )
23+
24+ def wait_until_clickable (self , * locator ):
25+ self .wait .until (
26+ EC .element_to_be_clickable (locator ),
27+ message = f'Element not clickable by { locator } '
28+ ).click ()
29+
30+ def wait_until_visible (self , * locator ):
31+ self .wait .until (
32+ EC .visibility_of_element_located (locator ),
33+ f'Element not visible by { locator } '
34+ )
35+
36+ def wait_until_disappears (self , * locator ):
37+ self .wait .until (
38+ EC .invisibility_of_element_located (locator ),
39+ f'Element still visible by { locator } '
40+ )
41+
42+ def get_current_window (self ):
43+ current_window = self .driver .current_window_handle
44+ print ('Current:' , current_window )
45+ print ('ALL windows:' , self .driver .window_handles )
46+ return current_window
47+
48+ def switch_to_new_window (self ):
49+ self .wait .until (EC .new_window_is_opened )
50+ all_windows = self .driver .window_handles # [Win1, Win2, ...]
51+ print ('ALL windows:' , self .driver .window_handles )
52+ print ('Switching to... ' , all_windows [1 ])
53+ self .driver .switch_to .window (all_windows [1 ])
54+
55+ def switch_window_by_id (self , window_id ):
56+ print ('Switching to... ' , window_id )
57+ self .driver .switch_to .window (window_id )
58+
59+ def verify_partial_text (self , expected_text , * locator ):
60+ actual_text = self .find_element (* locator ).text
61+ assert expected_text in actual_text , f'Expected { expected_text } , not in { actual_text } '
62+
63+ def verify_partial_url (self , expected_partial_url ):
64+ self .wait .until (EC .url_contains (expected_partial_url ), message = f'Url doest not contain { expected_partial_url } ' )
65+
66+ def verify_url (self , expected_url ):
67+ self .wait .until (EC .url_matches (expected_url ), message = f'Url does not contain { expected_url } ' )
68+
69+ def save_screenshot (self , name ):
70+ self .driver .save_screenshot (f'{ name } .png' )
71+
72+ def close (self ):
73+ self .driver .close ()
74+
75+ def click_sign_in (self , * locator ):
76+ self .find_element (* locator ).click ()
77+
78+ def side_nav_sign_in_btn (self , * locator ):
79+ self .find_element (* locator ).click ()
80+
81+ def verify_sign_in_shown (self , expected_text , * locator ):
82+ actual_text = self .find_element (* locator ).text
83+ assert expected_text == expected_text , f'Expected { expected_text } but got { actual_text } '
0 commit comments