Test Results (6 tests)
⏱️ Duration: 30.01s
❌ Error:
sign_up_page = <pages.sign_up_page.SignUpPage object at 0x7f878a518460>
pricing_page = <pages.pricing_page.PricingPage object at 0x7f878a281810>
billing_page = <pages.billing_page.BillingPage object at 0x7f878a282230>
base_url = 'https://test03.testingpromo.com'
@pytest.mark.skip_prod
def test_bi02_upgrade_plan_via_change_plan_button(
sign_up_page, pricing_page, billing_page, base_url
):
"""
Bi02 User can upgrade his plan using Change plan button.
Basic Monthly user opens Billing, clicks Change Plan, buys Standard
Annual from the embedded pricing widget, and ends up on the Standard plan.
"""
email = f"promo.auto.bi02.{uuid.uuid4().hex[:8]}@promo.com"
> _signup_and_purchase_plan(
sign_up_page, pricing_page, base_url, email,
PricingPage.BASIC_MONTHLY_CTA, monthly=True,
)
tests/billing/test_billing.py:77:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/billing/test_billing.py:44: in _signup_and_purchase_plan
sign_up_page.create_account(
pages/sign_up_page.py:45: in create_account
self.page.goto(f"{base_url}/signup")
/usr/local/lib/python3.10/dist-packages/playwright/sync_api/_generated.py:9875: in goto
self._sync(
/usr/local/lib/python3.10/dist-packages/playwright/_impl/_page.py:560: in goto
return await self._main_frame.goto(**locals_to_params(locals()))
/usr/local/lib/python3.10/dist-packages/playwright/_impl/_frame.py:156: in goto
await self._channel.send(
/usr/local/lib/python3.10/dist-packages/playwright/_impl/_connection.py:76: in send
return await self._connection.wrap_api_call(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <playwright._impl._connection.Connection object at 0x7f878a2a68f0>
cb = <function Channel.send.<locals>.<lambda> at 0x7f87897d6c20>
is_internal = False, title = None
async def wrap_api_call(
self, cb: Callable[[],
⏱️ Duration: 30.01s
❌ Error:
sign_up_page = <pages.sign_up_page.SignUpPage object at 0x7f8789080ee0>
pricing_page = <pages.pricing_page.PricingPage object at 0x7f87890816c0>
billing_page = <pages.billing_page.BillingPage object at 0x7f8789081720>
base_url = 'https://test03.testingpromo.com'
@pytest.mark.skip_prod
def test_bi03_downgrade_plan_via_change_plan_button(
sign_up_page, pricing_page, billing_page, base_url
):
"""
Bi03 User can downgrade his plan using Change plan button.
Standard Annual user opens Billing, clicks Change Plan, selects Basic
Monthly from the embedded widget, closes the confirmation, and ends up
with a pending downgrade (still on Standard until period end).
"""
email = f"promo.auto.bi03.{uuid.uuid4().hex[:8]}@promo.com"
> _signup_and_purchase_plan(
sign_up_page, pricing_page, base_url, email,
PricingPage.STANDARD_ANNUAL_CTA, monthly=False,
)
tests/billing/test_billing.py:106:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/billing/test_billing.py:44: in _signup_and_purchase_plan
sign_up_page.create_account(
pages/sign_up_page.py:45: in create_account
self.page.goto(f"{base_url}/signup")
/usr/local/lib/python3.10/dist-packages/playwright/sync_api/_generated.py:9875: in goto
self._sync(
/usr/local/lib/python3.10/dist-packages/playwright/_impl/_page.py:560: in goto
return await self._main_frame.goto(**locals_to_params(locals()))
/usr/local/lib/python3.10/dist-packages/playwright/_impl/_frame.py:156: in goto
await self._channel.send(
/usr/local/lib/python3.10/dist-packages/playwright/_impl/_connection.py:76: in send
return await self._connection.wrap_api_call(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <playwright._impl._connection.Connection object at 0x7f878a2a68f0>
cb = <function Channel.send.<locals>.<lambda> at 0x7f8789810820>
is_internal = Fal
⏱️ Duration: 20.21s
❌ Error:
sign_up_page = <pages.sign_up_page.SignUpPage object at 0x7f8788867940>
pricing_page = <pages.pricing_page.PricingPage object at 0x7f8788864c10>
billing_page = <pages.billing_page.BillingPage object at 0x7f8788867760>
base_url = 'https://test03.testingpromo.com'
@pytest.mark.skip_prod
def test_bi04_update_payment_method_and_email(
sign_up_page, pricing_page, billing_page, base_url
):
"""
Bi04 User can update his payment method and email address.
Pro Annual user opens Billing, updates the card to a different valid
test card, updates the billing email, and both changes are reflected.
"""
email = f"promo.auto.bi04.{uuid.uuid4().hex[:8]}@promo.com"
> _signup_and_purchase_plan(
sign_up_page, pricing_page, base_url, email,
PricingPage.PRO_ANNUAL_CTA, monthly=False,
)
tests/billing/test_billing.py:136:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/billing/test_billing.py:44: in _signup_and_purchase_plan
sign_up_page.create_account(
pages/sign_up_page.py:46: in create_account
self.page.locator(self.FULL_NAME_INPUT).wait_for(state="visible", timeout=self.T_SLOW)
/usr/local/lib/python3.10/dist-packages/playwright/sync_api/_generated.py:20539: in wait_for
self._sync(
/usr/local/lib/python3.10/dist-packages/playwright/_impl/_locator.py:748: in wait_for
await self._frame.wait_for_selector(
/usr/local/lib/python3.10/dist-packages/playwright/_impl/_frame.py:394: in wait_for_selector
await self._channel.send(
/usr/local/lib/python3.10/dist-packages/playwright/_impl/_connection.py:76: in send
return await self._connection.wrap_api_call(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <playwright._impl._connection.Connection object at 0x7f878a2a68f0>
cb = <function Channel.send.<locals>.<lambda> at 0x7f87895b2320>
is_internal = False, title = None
async def wrap_
📸 Failure Screenshot:
⏱️ Duration: 20.18s
❌ Error:
sign_up_page = <pages.sign_up_page.SignUpPage object at 0x7f8788d96500>
pricing_page = <pages.pricing_page.PricingPage object at 0x7f8788d96470>
billing_page = <pages.billing_page.BillingPage object at 0x7f8788d96830>
base_url = 'https://test03.testingpromo.com'
@pytest.mark.skip_prod_skip_smoke
def test_bi05_standard_user_redirected_from_upgrade_page(
sign_up_page, pricing_page, billing_page, base_url
):
"""
Bi05 Standard user tries to access upgrade page but is redirected to billing.
A Standard Monthly user (already on the plan the upgrade page sells) is
redirected straight to Billing instead of seeing the upgrade offer.
"""
email = f"promo.auto.bi05.{uuid.uuid4().hex[:8]}@promo.com"
> _signup_and_purchase_plan(
sign_up_page, pricing_page, base_url, email,
PricingPage.STANDARD_MONTHLY_CTA, monthly=True,
)
tests/billing/test_billing.py:165:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/billing/test_billing.py:44: in _signup_and_purchase_plan
sign_up_page.create_account(
pages/sign_up_page.py:46: in create_account
self.page.locator(self.FULL_NAME_INPUT).wait_for(state="visible", timeout=self.T_SLOW)
/usr/local/lib/python3.10/dist-packages/playwright/sync_api/_generated.py:20539: in wait_for
self._sync(
/usr/local/lib/python3.10/dist-packages/playwright/_impl/_locator.py:748: in wait_for
await self._frame.wait_for_selector(
/usr/local/lib/python3.10/dist-packages/playwright/_impl/_frame.py:394: in wait_for_selector
await self._channel.send(
/usr/local/lib/python3.10/dist-packages/playwright/_impl/_connection.py:76: in send
return await self._connection.wrap_api_call(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <playwright._impl._connection.Connection object at 0x7f878a2a68f0>
cb = <function Channel.send.<locals>.<lambda> at 0x7f87895b3490>
is_inte
📸 Failure Screenshot:
⏱️ Duration: 15.68s
❌ Error:
sign_up_page = <pages.sign_up_page.SignUpPage object at 0x7f8788364e80>
pricing_page = <pages.pricing_page.PricingPage object at 0x7f8788366140>
billing_page = <pages.billing_page.BillingPage object at 0x7f87883661a0>
login_page = <pages.login_page.LoginPage object at 0x7f8782013c70>
base_url = 'https://test03.testingpromo.com'
@pytest.mark.skip_prod_skip_smoke
def test_bi07_basic_annual_upgrades_via_upgrade_page(
sign_up_page, pricing_page, billing_page, login_page, base_url
):
"""
Bi07 Basic annual user upgrades plan to standard via the upgrade page.
Covers the signed-out edge case: the upgrade page is reachable while
logged out, attempting to upgrade surfaces an inline login form, and
completing login finishes the upgrade.
Scope note: the source scenario also asserts the Monthly/Annual toggle
is hidden on this page (both signed out and signed back in). Verified
empirically (2026-09-13) that the toggle IS visible for a signed-out
visitor on the current product — that assertion no longer reflects
real behavior (the source itself flagged this exact step as
"to_improve... please review" even at the time it was written), so it
was dropped rather than encoding a false expectation.
"""
email = f"promo.auto.bi07.{uuid.uuid4().hex[:8]}@promo.com"
> _signup_and_purchase_plan(
sign_up_page, pricing_page, base_url, email,
PricingPage.BASIC_ANNUAL_CTA, monthly=False,
)
tests/billing/test_billing.py:226:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/billing/test_billing.py:44: in _signup_and_purchase_plan
sign_up_page.create_account(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pages.sign_up_page.SignUpPage object at 0x7f8788364e80>
base_url = 'https://test03.testingpromo.com'
email = 'promo.auto.bi07.cc7364a