@@ -46,7 +46,11 @@ def login(cls):
4646
4747 # Wait for the ASWebAuthenticationSession context to appear
4848 WebDriverWait (driver , 30 ).until (lambda d : len (d .contexts ) > 2 )
49+ time .sleep (5 ) # Refresh contexts by waiting before fetching again
50+ print ("Available contexts:" , driver .contexts )
4951 contexts = driver .contexts
52+ driver .switch_to .context (driver .contexts [- 1 ])
53+ print ("Current context:" , driver .current_context )
5054
5155 target_context = None
5256
@@ -89,6 +93,23 @@ def login(cls):
8993 # If target context was not found, raise an error
9094 if not target_context :
9195 raise Exception ("Could not find the email field in any webview context." )
96+
97+ @classmethod
98+ def close_and_open_app (cls ):
99+ driver = cls .appium_driver
100+
101+ # Close app
102+ time .sleep (5 )
103+ print ("Closing app..." )
104+ driver .terminate_app (TestConfig .IOS_BUNDLE_ID )
105+ time .sleep (5 )
106+ print ("Closed app" )
107+
108+ # Reopen app
109+ print ("Opening app..." )
110+ driver .activate_app (TestConfig .IOS_BUNDLE_ID )
111+ time .sleep (10 )
112+ print ("Opened app" )
92113
93114 def test_1_pkce_login (self ):
94115 # Select use PKCE auth
@@ -116,4 +137,122 @@ def test_4_imx_functions(self):
116137 self .test_2_imx_functions ()
117138
118139 def test_5_zkevm_functions (self ):
119- self .test_3_zkevm_functions ()
140+ self .test_3_zkevm_functions ()
141+
142+ def test_6_pkce_relogin (self ):
143+ driver = self .appium_driver
144+
145+ self .close_and_open_app ()
146+
147+ # Restart AltTester
148+ self .altdriver .stop ()
149+ self .altdriver = AltDriver ()
150+ time .sleep (5 )
151+
152+ # # Select use PKCE auth
153+ self .altdriver .find_object (By .NAME , "PKCE" ).tap ()
154+ # Wait for unauthenticated screen
155+ self .altdriver .wait_for_current_scene_to_be ("UnauthenticatedScene" )
156+
157+ # Relogin
158+ print ("Re-logging in..." )
159+ self .altdriver .wait_for_object (By .NAME , "ReloginBtn" ).tap ()
160+
161+ # Wait for authenticated screen
162+ self .altdriver .wait_for_current_scene_to_be ("AuthenticatedScene" )
163+ print ("Re-logged in" )
164+
165+ # Get access token
166+ self .altdriver .find_object (By .NAME , "GetAccessTokenBtn" ).tap ()
167+ output = self .altdriver .find_object (By .NAME , "Output" )
168+ self .assertTrue (len (output .get_text ()) > 50 )
169+
170+ # Click Connect to IMX button
171+ self .altdriver .find_object (By .NAME , "ConnectBtn" ).tap ()
172+ self .assertEqual ("Connected to IMX" , output .get_text ())
173+
174+ self .altdriver .stop ()
175+
176+ def test_7_pkce_reconnect (self ):
177+ self .close_and_open_app ()
178+
179+ # Restart AltTester
180+ self .altdriver .stop ()
181+ self .altdriver = AltDriver ()
182+ time .sleep (5 )
183+
184+ # Select use PKCE auth
185+ self .altdriver .find_object (By .NAME , "PKCE" ).tap ()
186+ # Wait for unauthenticated screen
187+ self .altdriver .wait_for_current_scene_to_be ("UnauthenticatedScene" )
188+
189+ # Reconnect
190+ print ("Reconnecting..." )
191+ self .altdriver .wait_for_object (By .NAME , "ReconnectBtn" ).tap ()
192+
193+ # Wait for authenticated screen
194+ self .altdriver .wait_for_current_scene_to_be ("AuthenticatedScene" )
195+ print ("Reconnected" )
196+
197+ # Get access token
198+ self .altdriver .find_object (By .NAME , "GetAccessTokenBtn" ).tap ()
199+ output = self .altdriver .find_object (By .NAME , "Output" )
200+ self .assertTrue (len (output .get_text ()) > 50 )
201+
202+ # Get address without having to click Connect to IMX button
203+ self .altdriver .find_object (By .NAME , "GetAddressBtn" ).tap ()
204+ self .assertEqual (TestConfig .WALLET_ADDRESS , output .get_text ())
205+
206+ # Logout
207+ print ("Logging out..." )
208+ self .altdriver .find_object (By .NAME , "LogoutBtn" ).tap ()
209+ time .sleep (5 )
210+
211+ # Wait for authenticated screen
212+ self .altdriver .wait_for_current_scene_to_be ("UnauthenticatedScene" )
213+ time .sleep (5 )
214+ print ("Logged out" )
215+
216+ self .altdriver .stop ()
217+
218+ def test_8_pkce_connect_imx (self ):
219+ self .close_and_open_app ()
220+
221+ # Restart AltTester
222+ self .altdriver .stop ()
223+ self .altdriver = AltDriver ()
224+ time .sleep (5 )
225+
226+ # Select use PKCE auth
227+ self .altdriver .find_object (By .NAME , "PKCE" ).tap ()
228+ # Wait for unauthenticated screen
229+ self .altdriver .wait_for_current_scene_to_be ("UnauthenticatedScene" )
230+
231+ # Connect IMX
232+ print ("Logging in and connecting to IMX..." )
233+ self .altdriver .wait_for_object (By .NAME , "ConnectBtn" ).tap ()
234+
235+ self .login ()
236+
237+ # Wait for authenticated screen
238+ self .altdriver .wait_for_current_scene_to_be ("AuthenticatedScene" )
239+ print ("Logged in and connected to IMX" )
240+
241+ # Get access token
242+ self .altdriver .find_object (By .NAME , "GetAccessTokenBtn" ).tap ()
243+ output = self .altdriver .find_object (By .NAME , "Output" )
244+ self .assertTrue (len (output .get_text ()) > 50 )
245+
246+ # Get address without having to click Connect to IMX button
247+ self .altdriver .find_object (By .NAME , "GetAddressBtn" ).tap ()
248+ self .assertEqual (TestConfig .WALLET_ADDRESS , output .get_text ())
249+
250+ # Logout
251+ print ("Logging out..." )
252+ self .altdriver .find_object (By .NAME , "LogoutBtn" ).tap ()
253+ time .sleep (5 )
254+
255+ # Wait for authenticated screen
256+ self .altdriver .wait_for_current_scene_to_be ("UnauthenticatedScene" )
257+ time .sleep (5 )
258+ print ("Logged out" )
0 commit comments