@@ -46,7 +46,11 @@ def login(cls):
46
46
47
47
# Wait for the ASWebAuthenticationSession context to appear
48
48
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 )
49
51
contexts = driver .contexts
52
+ driver .switch_to .context (driver .contexts [- 1 ])
53
+ print ("Current context:" , driver .current_context )
50
54
51
55
target_context = None
52
56
@@ -89,6 +93,23 @@ def login(cls):
89
93
# If target context was not found, raise an error
90
94
if not target_context :
91
95
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" )
92
113
93
114
def test_1_pkce_login (self ):
94
115
# Select use PKCE auth
@@ -116,4 +137,122 @@ def test_4_imx_functions(self):
116
137
self .test_2_imx_functions ()
117
138
118
139
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