tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

test_1954533_copaair_com.py (5998B)


      1 import pytest
      2 
      3 URL = "https://www.copaair.com/en-gs/enrollment/"
      4 
      5 COOKIES_CSS = ".MuiBox-root:has(img[src*=Cookies])"
      6 CAPTCHA_CSS = "iframe[src*='Incapsula_Resource']"
      7 NAME_CSS = "#input-name"
      8 SURNAME_CSS = "#input-lastName"
      9 YEAR_SELECTOR_CSS = "#year"
     10 YEAR_CSS = "#year-open [data-value='1978']"
     11 MONTH_SELECTOR_CSS = "#month"
     12 MONTH_CSS = "#month-open [data-value='3']"
     13 DAY_SELECTOR_CSS = "#day"
     14 DAY_CSS = "#day-open [data-value='6']"
     15 GENDER_SELECTOR_CSS = "#gender"
     16 GENDER_MALE_CSS = "#menu-gender [data-value='Male']"
     17 COUNTRY_SELECTOR_CSS = "[aria-label='enrollmentFormNationalityWCAG'] #option"
     18 COUNTRY_CSS = "#option-open [data-value='CA'], #option-open [data-value='0']"
     19 COUNTRY_RESIDENCE_SELECTOR_CSS = (
     20    "[aria-label='enrollmentFormResidenceCountryWCAG'] #option"
     21 )
     22 COUNTRY_RESIDENCE_CSS = "#option-open [data-value='CA'], #option-open [data-value='0']"
     23 DOC_SELECTOR_CSS = "#memberDoc"
     24 DOC_CSS = "#memberDoc-open [aria-label='Passport']"
     25 DOC_NUMBER_CSS = "[id='input-memberDoc.documentId']"
     26 DOC_COUNTRY_SELECTOR_CSS = "[id='memberDoc.issuingCountry']"
     27 DOC_COUNTRY_CSS = "[id='memberDoc.issuingCountry-open'] [data-value='CA'], [id='memberDoc.issuingCountry-open'] [data-value='0']"
     28 DOC_YEAR_SELECTOR_CSS = "div:has(+ input[name='memberDoc.validUntil.year'])"
     29 DOC_YEAR_CSS = "#year-open [data-value='2035']"
     30 DOC_MONTH_SELECTOR_CSS = "div:has(+ input[name='memberDoc.validUntil.month'])"
     31 DOC_MONTH_CSS = "#month-open [data-value='7']"
     32 DOC_DAY_SELECTOR_CSS = "div:has(+ input[name='memberDoc.validUntil.day'])"
     33 DOC_DAY_CSS = "#day-open [data-value='12']"
     34 EMAIL_CSS = "#input-email"
     35 PASSWORD_CSS = "#password-input-password"
     36 CREATE_BUTTON_TEXT = "Create an account"
     37 ACCEPT_BUTTON_TEXT = "Accept"
     38 OOPS_CSS = "img[alt='Connectmiles Logo']"
     39 DIALOG_BUTTONS_CSS = "#contentContainerModal+.MuiBox-root button"
     40 FAIL_MSG = """TypeError: can't access property "innerText", document.querySelector(...) is null"""
     41 
     42 
     43 async def get_accept_button(client, in_headless_mode):
     44    await client.make_preload_script("delete navigator.__proto__.webdriver")
     45    await client.make_preload_script(
     46        "Object.defineProperty(window, 'y', {get: () => document.head, configurable:true})"
     47    )
     48    await client.navigate(URL)
     49    captcha, name = client.await_first_element_of(
     50        [
     51            client.css(CAPTCHA_CSS),
     52            client.css(NAME_CSS),
     53        ],
     54        is_displayed=True,
     55    )
     56    if captcha:
     57        if in_headless_mode:
     58            pytest.xfail("Captcha cannot be done in headless mode")
     59            return
     60        print(
     61            "Please do Captcha...\a\n"
     62        )  # beep to let the user know to do the reCAPTCHA
     63    client.hide_elements(COOKIES_CSS)
     64    client.await_css(NAME_CSS, is_displayed=True).send_keys("webcompat")
     65    client.await_css(SURNAME_CSS, is_displayed=True).send_keys("tester")
     66    client.click(client.await_css(YEAR_SELECTOR_CSS, is_displayed=True), force=True)
     67    client.click(client.await_css(YEAR_CSS, is_displayed=True), force=True)
     68    client.click(client.await_css(MONTH_SELECTOR_CSS, is_displayed=True), force=True)
     69    client.click(client.await_css(MONTH_CSS, is_displayed=True), force=True)
     70    client.click(client.await_css(DAY_SELECTOR_CSS, is_displayed=True), force=True)
     71    client.click(client.await_css(DAY_CSS, is_displayed=True), force=True)
     72    client.click(client.await_css(GENDER_SELECTOR_CSS, is_displayed=True), force=True)
     73    client.click(client.await_css(GENDER_MALE_CSS, is_displayed=True), force=True)
     74    client.click(client.await_css(COUNTRY_SELECTOR_CSS, is_displayed=True), force=True)
     75    client.soft_click(client.await_css(COUNTRY_CSS, is_displayed=True))
     76    client.click(
     77        client.await_css(COUNTRY_RESIDENCE_SELECTOR_CSS, is_displayed=True), force=True
     78    )
     79    client.soft_click(client.await_css(COUNTRY_RESIDENCE_CSS, is_displayed=True))
     80    client.click(client.await_css(DOC_SELECTOR_CSS, is_displayed=True), force=True)
     81    client.click(client.await_css(DOC_CSS, is_displayed=True), force=True)
     82    client.await_css(DOC_NUMBER_CSS, is_displayed=True).send_keys("1235123")
     83    client.click(
     84        client.await_css(DOC_COUNTRY_SELECTOR_CSS, is_displayed=True), force=True
     85    )
     86    client.click(client.await_css(DOC_COUNTRY_CSS, is_displayed=True), force=True)
     87    client.click(client.await_css(DOC_YEAR_SELECTOR_CSS, is_displayed=True), force=True)
     88    client.click(client.await_css(DOC_YEAR_CSS, is_displayed=True), force=True)
     89    client.click(
     90        client.await_css(DOC_MONTH_SELECTOR_CSS, is_displayed=True), force=True
     91    )
     92    client.click(client.await_css(DOC_MONTH_CSS, is_displayed=True), force=True)
     93    client.click(client.await_css(DOC_DAY_SELECTOR_CSS, is_displayed=True), force=True)
     94    client.click(client.await_css(DOC_DAY_CSS, is_displayed=True), force=True)
     95    client.await_css(EMAIL_CSS, is_displayed=True).send_keys(
     96        "webcompatTester@gmail.com"
     97    )
     98    client.await_css(PASSWORD_CSS, is_displayed=True).send_keys("A1b2_xxx")
     99    create = client.await_text(CREATE_BUTTON_TEXT, is_displayed=True)
    100    client.execute_async_script(
    101        """
    102      const [btn, done] = arguments;
    103      timer = setInterval(() => {
    104        if (!btn.hasAttribute("disabled")) {
    105          clearInterval(timer);
    106          done();
    107        }
    108      }, 100);
    109    """,
    110        create,
    111    )
    112    await client.stall(1)
    113    client.soft_click(create)
    114    return client.await_css(
    115        DIALOG_BUTTONS_CSS,
    116        condition=f"elem.innerText.includes('{ACCEPT_BUTTON_TEXT}')",
    117        is_displayed=True,
    118    )
    119 
    120 
    121 @pytest.mark.asyncio
    122 @pytest.mark.with_interventions
    123 async def test_with_interventions(client, in_headless_mode):
    124    client.soft_click(await get_accept_button(client, in_headless_mode))
    125    assert client.await_css(OOPS_CSS, is_displayed=True)
    126 
    127 
    128 @pytest.mark.asyncio
    129 @pytest.mark.without_interventions
    130 async def test_disabled(client, in_headless_mode):
    131    client.soft_click(await get_accept_button(client, in_headless_mode))
    132    await (await client.promise_console_message_listener(FAIL_MSG))