""" Gmail/Google Account UI Selektoren und URLs """ # URLs BASE_URL = "https://accounts.google.com/" REGISTRATION_URL = "https://workspace.google.com/intl/de/gmail/" LOGIN_URL = "https://accounts.google.com/ServiceLogin" # Name Eingabe (Erster Schritt) FIRST_NAME_INPUT = "input[name='firstName']" LAST_NAME_INPUT = "input[name='lastName']" NEXT_BUTTON = "button[jsname='LgbsSe']" NEXT_BUTTON_SPAN = "span:has-text('Weiter')" NEXT_BUTTON_MATERIAL = "div.VfPpkd-RLmnJb" # Material Design Weiter-Button # Geburtsdatum und Geschlecht BIRTHDAY_DAY = "input[name='day']" BIRTHDAY_MONTH = "select[name='month']" BIRTHDAY_YEAR = "input[name='year']" GENDER_SELECT = "select[name='gender']" # Gmail-Adresse erstellen CREATE_GMAIL_RADIO = "div[data-value='createAccount']" GMAIL_USERNAME_INPUT = "input[name='Username']" GMAIL_USERNAME_SUGGESTION_RADIOS = "input[type='radio'][name='usernameRadio']" # Passwort PASSWORD_INPUT = "input[name='Passwd']" PASSWORD_CONFIRM_INPUT = "input[name='PasswdAgain']" # Telefonnummer Verifizierung PHONE_INPUT = "input[id='phoneNumberId']" PHONE_COUNTRY_SELECT = "select[data-id='countryList']" # SMS Verifizierung SMS_CODE_INPUT = "input[name='code']" VERIFY_BUTTON = "button:has-text('Bestätigen')" # Recovery Email (Optional) RECOVERY_EMAIL_INPUT = "input[name='recoveryEmail']" SKIP_BUTTON = "button:has-text('Überspringen')" # Enhanced Skip Button Varianten mit 2025 Updates SKIP_BUTTON_VARIANTS = [ # German "button:has-text('Überspringen')", "button:has-text('Später')", "button:has-text('Vielleicht später')", "button:has-text('Nicht jetzt')", "button:has-text('Jetzt nicht')", "button:has-text('Später hinzufügen')", "button:has-text('Überspringen und fortfahren')", # English "button:has-text('Not now')", "button:has-text('Maybe later')", "button:has-text('Skip')", "button:has-text('Skip for now')", "button:has-text('I'll add it later')", "button:has-text('Remind me later')", "button:has-text('Continue without')", "button:has-text('No thanks')", # Spanish "button:has-text('Omitir')", "button:has-text('Ahora no')", "button:has-text('Más tarde')", "button:has-text('Saltar')", # French "button:has-text('Ignorer')", "button:has-text('Pas maintenant')", "button:has-text('Plus tard')", "button:has-text('Passer')", # Italian "button:has-text('Ignora')", "button:has-text('Non ora')", "button:has-text('Salta')", # Portuguese "button:has-text('Pular')", "button:has-text('Agora não')", "button:has-text('Mais tarde')", # Turkish "button:has-text('Şimdi değil')", "button:has-text('Atla')", "button:has-text('Daha sonra')", # Indonesian "button:has-text('Lewati')", "button:has-text('Nanti saja')", # Russian (Cyrillic) "button:has-text('Пропустить')", "button:has-text('Не сейчас')", "button:has-text('Позже')", # Material Design Button Classes ".VfPpkd-LgbsSe-OWXEXe-k8QpJ:has-text('Skip')", ".VfPpkd-LgbsSe-OWXEXe-k8QpJ:has-text('Überspringen')", # Links and generic text fallbacks "a:has-text('Überspringen')", "a:has-text('Not now')", "a:has-text('Skip')", "a:has-text('Use another verification method')", "a:has-text('Andere Bestätigungsmethode verwenden')", # Div buttons "div[role='button']:has-text('Skip')", "div[role='button']:has-text('Überspringen')", "div[role='button']:has-text('Not now')", # Span elements "span:has-text('Skip for now')", "span:has-text('Jetzt überspringen')", # Text-based fallbacks "text=Überspringen", "text=Not now", "text=Skip", "text=Omitir", "text=Ignorer", "text=Ignora", "text=Şimdi değil", "text=Lewati", "text=Пропустить" ] # Nutzungsbedingungen AGREE_BUTTON = "button:has-text('Ich stimme zu')" TERMS_CHECKBOX = "input[type='checkbox']" # Fehler- und Erfolgsmeldungen ERROR_MESSAGE = "div[jsname='B34EJ'] span" ERROR_MESSAGE_ALT = "div.LXRPh" CAPTCHA_CONTAINER = "div.aCsJod" # Login Seite LOGIN_EMAIL_INPUT = "input[type='email']" LOGIN_PASSWORD_INPUT = "input[type='password'][name='password']" LOGIN_NEXT_BUTTON = "button:has-text('Weiter')" # Allgemeine Elemente LOADING_SPINNER = "div.ANuIbb" FORM_ERROR = "div[jsname='B34EJ']"