Test Results (5 tests)
⏱️ Duration: 51.02s
❌ Error:
mobile_page = <Page url='https://promo.com/categories/health-and-fitness?funnel=0'>
base_url = 'https://promo.com'
def test_m01_create_video_and_receive_magic_link(mobile_page: Page, base_url: str) -> None:
"""M01: Logged-in mobile user picks a video, uses it, and gets the magic-link confirmation."""
login_page = LoginPage(mobile_page)
login_page.login_directly(base_url, general_mail(), get_password())
mobile_page.goto(base_url)
mobile_page.wait_for_load_state("domcontentloaded")
_dismiss_cookies(mobile_page)
get_started = mobile_page.locator('[data-cta="ai_sub_CTA_1"]').first
get_started.wait_for(state="visible", timeout=15_000)
get_started.click()
> _select_and_use_video(mobile_page)
tests/test_mobile_view.py:182:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/test_mobile_view.py:158: in _select_and_use_video
search_box.wait_for(state="visible", timeout=10_000)
/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 0x7fb93ad9cfd0>
cb = <function Channel.send.<locals>.<lambda> at 0x7fb93a05e3b0>
is_internal = False, title = None
async def wrap_api_call(
self, cb: Callable[[], Any], is_internal: bool = False, title: str = None
) -> Any:
if self._api_zone.get():
return await cb()
task = asyncio.current_task(self._lo
⏱️ Duration: 51.92s
❌ Error:
page = <Page url='https://promo.com/dashboard/draft/publish/6a9f6d3142d9b65655080822?from=dashboard_published'>
mobile_page = <Page url='about:blank'>, base_url = 'https://promo.com'
def test_m03_shared_video_mobile_view(page: Page, mobile_page: Page, base_url: str) -> None:
"""
M03: Desktop — login, republish a video, get share link from publish page.
Mobile — open share link in iPhone 13 viewport, verify video element visible.
"""
login_page = LoginPage(page)
dashboard_page = DashboardPage(page)
publish_page = PublishPage(page)
login_page.login_directly(base_url, general_mail(), get_password())
dashboard_page.go_to_published(base_url)
dashboard_page.republish_first_video()
publish_page.wait_for_render_and_verify()
> share_link = publish_page.get_share_link()
tests/test_mobile_view.py:204:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/publish_page.py:149: in get_share_link
link_el.wait_for(state="visible", timeout=self.T_ACTION)
/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 0x7fb93ad9cfd0>
cb = <function Channel.send.<locals>.<lambda> at 0x7fb939db40d0>
is_internal = False, title = None
async def wrap_api_call(
self, cb: Callable[[], Any], is_internal: bool = False, title: str = None
) -> Any:
if self._api_zone.
📸 Failure Screenshot:
⏱️ Duration: 17.24s
❌ Error:
mobile_page = <Page url='https://promo.com/signup'>
base_url = 'https://promo.com'
def test_m05_generate_single_ai_post_mobile(mobile_page: Page, base_url: str) -> None:
"""M05: Verify mobile single AI post button for unauthenticated user (Sign up prompt),
then sign up and generate a single AI post.
"""
auto = AutopilotPage(mobile_page)
signup = SignUpPage(mobile_page)
# Part 1: verify mobile AI button prompts signup for unauthenticated user
auto.go_to_my_calendar(base_url)
mobile_page.wait_for_load_state("domcontentloaded")
_dismiss_cookies(mobile_page)
mobile_page.locator('[data-qaid="new-video-mobile-button"]').wait_for(
state="visible", timeout=15_000
)
mobile_page.locator('[data-qaid="new-video-mobile-button"]').click()
# Unauthenticated users see a Sign up CTA
mobile_page.locator('button:has-text("Sign up")').wait_for(state="visible", timeout=10_000)
# Part 2: sign up via standard /signup page
email = random_email()
> signup.create_account(base_url, email, fullname, random_password)
tests/test_mobile_view.py:304:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pages.sign_up_page.SignUpPage object at 0x7fb939ad31f0>
base_url = 'https://promo.com', email = 'promo.auto.383be35d78@gmail.com'
full_name = 'Automate Promo', password = '123456789'
def create_account(self, base_url: str, email: str, full_name: str, password: str):
"""
Creates a new account by navigating directly to /signup.
Mirrors: signup_process_steps_email(browser, random_email)
Test environments (testingpromo.com) are behind Cloudflare Access —
CF headers are injected at the browser-context level in conftest.py.
"""
self.page.goto(f"{base_url}/signup")
self.page.locator(self.FULL_NAME_INPUT).wait_for(state="visible