DEV Community

Kishan Srivastava
Kishan Srivastava

Posted on

Automate

import time
from playwright.sync_api import sync_playwright, TimeoutError as PlaywrightTimeoutError

SITE_URL = "https://YOUR-SITE-URL-HERE"

EMAIL = "kishan-a.srivastava@db.com"
PASSWORD = "abc123"


def wait_for_page(page, timeout=120_000):
    try:
        page.wait_for_load_state("domcontentloaded", timeout=timeout)
    except PlaywrightTimeoutError:
        print("Page is taking longer than expected to load...")
        print("Continuing anyway.")


with sync_playwright() as p:
    browser = p.chromium.launch(
        headless=False,
        slow_mo=100
    )

    page = browser.new_page()

    page.set_default_timeout(60_000)
    page.set_default_navigation_timeout(120_000)

    print("Opening website...")

    page.goto(
        SITE_URL,
        wait_until="domcontentloaded",
        timeout=120_000
    )

    print("Website opened.")

    print("Looking for 'Continue with DWS UAT'...")

    continue_button = page.locator(
        'button[type="submit"]'
    ).filter(
        has_text="Continue with DWS UAT"
    )

    continue_button.wait_for(state="visible")
    continue_button.click()

    print("Clicked 'Continue with DWS UAT'.")

    wait_for_page(page)

    print("Waiting for email field...")

    email_field = page.locator(
        'input#i0116[type="email"]'
    )

    email_field.wait_for(state="visible")
    email_field.fill(EMAIL)

    print("Email entered.")

    next_button = page.locator(
        'input#idSIButton9[type="submit"]'
    )

    next_button.wait_for(state="visible")
    next_button.click()

    print("Next clicked.")

    wait_for_page(page)

    print("Waiting for password field...")

    password_field = page.locator(
        'input#i0118[type="password"]'
    )

    try:
        password_field.wait_for(
            state="visible",
            timeout=60_000
        )

    except PlaywrightTimeoutError:
        print()
        print("Password field has not appeared yet.")
        print("A company verification/MFA step may be running.")
        print("Complete the verification manually if required.")
        print("Waiting for the password field...")
        print()

        password_field.wait_for(
            state="visible",
            timeout=300_000
        )

    print("Password field found.")

    password_field.fill(PASSWORD)

    print("Password entered.")

    submit_button = page.locator(
        'input#idSIButton9[type="submit"]'
    )

    submit_button.wait_for(state="visible")
    submit_button.click()

    print("Password submitted.")

    print("Waiting for final page to load...")

    wait_for_page(page, timeout=120_000)

    time.sleep(5)

    print()
    print("==========================================")
    print("LOGIN FLOW COMPLETED")
    print("==========================================")
    print("Current URL:")
    print(page.url)
    print()
    print("Browser will remain open for 30 seconds...")

    time.sleep(30)

    browser.close()
Enter fullscreen mode Exit fullscreen mode

Top comments (0)