Source code
Revision control
Copy as Markdown
Other Tools
import pytest
CAPTCHA_CSS = "iframe[src*='Incapsula_Resource']"
NAME_CSS = "#input-name"
SURNAME_CSS = "#input-lastName"
YEAR_SELECTOR_CSS = "#year"
YEAR_CSS = "#year-open [data-value='1978']"
MONTH_SELECTOR_CSS = "#month"
MONTH_CSS = "#month-open [data-value='3']"
DAY_SELECTOR_CSS = "#day"
DAY_CSS = "#day-open [data-value='6']"
COUNTRY_SELECTOR_CSS = "#option"
COUNTRY_CSS = "#option-open [data-value='CA'], #option-open [data-value='0']"
DOC_SELECTOR_CSS = "#memberDoc"
DOC_CSS = "#memberDoc-open [data-value='p']"
DOC_NUMBER_CSS = "[id='input-memberDoc.documentId']"
DOC_COUNTRY_SELECTOR_CSS = "[id='memberDoc.issuingCountry']"
DOC_COUNTRY_CSS = "[id='memberDoc.issuingCountry-open'] [data-value='CA'], [id='memberDoc.issuingCountry-open'] [data-value='0']"
DOC_YEAR_SELECTOR_CSS = "div:has(+ input[name='memberDoc.validUntil.year'])"
DOC_YEAR_CSS = "#year-open [data-value='2035']"
DOC_MONTH_SELECTOR_CSS = "div:has(+ input[name='memberDoc.validUntil.month'])"
DOC_MONTH_CSS = "#month-open [data-value='7']"
DOC_DAY_SELECTOR_CSS = "div:has(+ input[name='memberDoc.validUntil.day'])"
DOC_DAY_CSS = "#day-open [data-value='12']"
EMAIL_CSS = "#input-email"
PASSWORD_CSS = "#password-input-password"
CREATE_BUTTON_TEXT = "Create an account"
ACCEPT_BUTTON_TEXT = "Accept"
OOPS_CSS = "img[alt='Connectmiles Logo']"
DIALOG_BUTTONS_CSS = "#contentContainerModal+.MuiBox-root button"
FAIL_MSG = """TypeError: can't access property "innerText", document.querySelector(...) is null"""
async def get_accept_button(client, in_headless_mode):
await client.make_preload_script("delete navigator.__proto__.webdriver")
await client.make_preload_script(
"Object.defineProperty(window, 'y', {get: () => document.head, configurable:true})"
)
await client.navigate(URL, wait="none")
captcha, name = client.await_first_element_of(
[
client.css(CAPTCHA_CSS),
client.css(NAME_CSS),
],
is_displayed=True,
)
if captcha:
if in_headless_mode:
pytest.xfail("Captcha cannot be done in headless mode")
return
print(
"Please do Captcha...\a\n"
) # beep to let the user know to do the reCAPTCHA
client.await_css(NAME_CSS, is_displayed=True).send_keys("webcompat")
client.await_css(SURNAME_CSS, is_displayed=True).send_keys("tester")
client.click(client.await_css(YEAR_SELECTOR_CSS, is_displayed=True), force=True)
client.click(client.await_css(YEAR_CSS, is_displayed=True), force=True)
client.click(client.await_css(MONTH_SELECTOR_CSS, is_displayed=True), force=True)
client.click(client.await_css(MONTH_CSS, is_displayed=True), force=True)
client.click(client.await_css(DAY_SELECTOR_CSS, is_displayed=True), force=True)
client.click(client.await_css(DAY_CSS, is_displayed=True), force=True)
client.click(client.await_css(COUNTRY_SELECTOR_CSS, is_displayed=True), force=True)
client.click(client.await_css(COUNTRY_CSS, is_displayed=True), force=True)
client.click(client.await_css(DOC_SELECTOR_CSS, is_displayed=True), force=True)
client.click(client.await_css(DOC_CSS, is_displayed=True), force=True)
client.await_css(DOC_NUMBER_CSS, is_displayed=True).send_keys("1235123")
client.click(
client.await_css(DOC_COUNTRY_SELECTOR_CSS, is_displayed=True), force=True
)
client.click(client.await_css(DOC_COUNTRY_CSS, is_displayed=True), force=True)
client.click(client.await_css(DOC_YEAR_SELECTOR_CSS, is_displayed=True), force=True)
client.click(client.await_css(DOC_YEAR_CSS, is_displayed=True), force=True)
client.click(
client.await_css(DOC_MONTH_SELECTOR_CSS, is_displayed=True), force=True
)
client.click(client.await_css(DOC_MONTH_CSS, is_displayed=True), force=True)
client.click(client.await_css(DOC_DAY_SELECTOR_CSS, is_displayed=True), force=True)
client.click(client.await_css(DOC_DAY_CSS, is_displayed=True), force=True)
client.await_css(EMAIL_CSS, is_displayed=True).send_keys(
"webcompatTester@gmail.com"
)
client.await_css(PASSWORD_CSS, is_displayed=True).send_keys("A1b2_xxx")
create = client.await_text(CREATE_BUTTON_TEXT, is_displayed=True)
client.execute_async_script(
"""
const [btn, done] = arguments;
timer = setInterval(() => {
if (!btn.hasAttribute("disabled")) {
clearInterval(timer);
done();
}
}, 100);
""",
create,
)
client.click(create, force=True)
return client.await_css(DIALOG_BUTTONS_CSS, all=True, is_displayed=True)[1]
@pytest.mark.asyncio
@pytest.mark.with_interventions
async def test_enabled(client, in_headless_mode):
await get_accept_button(client, in_headless_mode)
client.await_css(
"button",
condition=f"elem.innerText.includes('{ACCEPT_BUTTON_TEXT}')",
is_displayed=True,
).click()
assert client.await_css(OOPS_CSS, is_displayed=True)
@pytest.mark.asyncio
@pytest.mark.without_interventions
async def test_disabled(client, in_headless_mode):
client.click(await get_accept_button(client, in_headless_mode), force=True)
await (await client.promise_console_message_listener(FAIL_MSG))