@@ -273,16 +273,41 @@ def login():
273273 email_field .send_keys (EMAIL )
274274
275275 # Try to find and click the submit button (arrow button)
276- try :
277- print ("Looking for submit button..." )
278- submit_button = wait .until (EC .element_to_be_clickable ((By .CSS_SELECTOR , 'button[type="submit"], button[data-testid*="submit"], .submit-button, button:has(svg)' )))
279- submit_button .click ()
280- print ("Clicked submit button" )
281- except :
282- print ("Submit button not found, trying Enter key..." )
276+ submit_selectors = [
277+ 'button[type="submit"]' , # Standard submit button
278+ 'button[data-testid*="submit"]' , # Submit button with testid
279+ 'button:has(svg)' , # Button containing SVG (arrow)
280+ '.submit-button' , # Submit button class
281+ 'button[aria-label*="submit"]' , # Submit button with aria-label
282+ 'button[aria-label*="continue"]' , # Continue button
283+ 'form button' , # Any button in form
284+ 'button' # Any button as last resort
285+ ]
286+
287+ button_clicked = False
288+ for selector in submit_selectors :
289+ try :
290+ print (f"Looking for submit button with selector: { selector } " )
291+ submit_button = WebDriverWait (driver , 5 ).until (EC .element_to_be_clickable ((By .CSS_SELECTOR , selector )))
292+ print (f"Found button with selector: { selector } " )
293+ print (f"Button text: '{ submit_button .text } '" )
294+ print (f"Button HTML: { submit_button .get_attribute ('outerHTML' )[:200 ]} ..." )
295+
296+ # Click the button
297+ submit_button .click ()
298+ print (f"Successfully clicked submit button with selector: { selector } " )
299+ button_clicked = True
300+ break
301+ except Exception as e :
302+ print (f"Selector { selector } failed: { e } " )
303+ continue
304+
305+ if not button_clicked :
306+ print ("No submit button found with any selector, trying Enter key..." )
283307 email_field .send_keys (Keys .RETURN )
308+ print ("Pressed Enter key" )
284309
285- print ("Submitted email " )
310+ print ("Email submission attempted " )
286311
287312 # Wait for the OTP to arrive and page to load
288313 print ("Wait for OTP..." )
@@ -293,8 +318,30 @@ def login():
293318 if code :
294319 print (f"Successfully fetched OTP: { code } " )
295320 else :
296- print ("Failed to fetch OTP from MailSlurp" )
297- driver .quit ()
321+ print ("Failed to fetch OTP from MailSlurp - checking if authentication completed anyway..." )
322+
323+ # Sometimes Auth0 doesn't send OTP emails in test environments
324+ # Check if we can proceed anyway or if this is a cached session scenario
325+ try :
326+ # Check if we're already past the OTP stage
327+ current_url = driver .current_url
328+ print (f"Current URL after OTP timeout: { current_url } " )
329+
330+ # If we're at a success/callback page, authentication may have completed
331+ if any (keyword in current_url .lower () for keyword in ['success' , 'callback' , 'complete' , 'checking' ]):
332+ print ("Already at success page - proceeding without OTP" )
333+ print ("Waiting for Unity to receive the callback..." )
334+ time .sleep (10 )
335+ return
336+
337+ # Otherwise this is a real OTP failure
338+ print ("No OTP received and not at success page - authentication failed" )
339+ driver .quit ()
340+ return
341+ except Exception as e :
342+ print (f"Error checking page state after OTP timeout: { e } " )
343+ driver .quit ()
344+ return
298345
299346 print ("Find OTP input..." )
300347 print (f"Current URL after email submission: { driver .current_url } " )
0 commit comments