Test Results (15 tests)
⏱️ Duration: 140.16s
❌ Error:
self = <tests.test_autopilot.TestAutopilot object at 0x7fda8fdb5c60>
autopilot_page = <pages.autopilot_page.AutopilotPage object at 0x7fda8fdb32b0>
login_page = <pages.login_page.LoginPage object at 0x7fda8fdb2830>
base_url = 'https://promo.com'
@pytest.mark.skip_testenv
def test_a01p_verify_actions_on_ai_posts_in_planner(
self, autopilot_page, login_page, base_url
):
"""
A01P Verify actions on the AI posts in planner (prod only)
Same scenario as A01T — runs on prod, skipped on testenv.
"""
login_page.login_directly(base_url, email_ai, get_password())
autopilot_page.go_to_planner(base_url)
autopilot_page.ensure_ai_posts_exist()
# i-icon tooltip
autopilot_page.hover_i_icon(1)
autopilot_page.assert_i_icon_tooltip_visible(1)
autopilot_page.assert_ai_badge_tooltip_visible()
# Post 1: full preview checks + regeneration
autopilot_page.open_ai_post(1)
autopilot_page.assert_ai_post_tag_visible()
autopilot_page.assert_aspect_ratios_visible()
autopilot_page.assert_preview_dropdown_buttons_visible()
autopilot_page.assert_preview_cta_buttons_visible()
autopilot_page.assert_preview_cta_tooltips()
autopilot_page.assert_video_loaded()
autopilot_page.assert_ai_specific_buttons_visible()
autopilot_page.check_single_post_regeneration()
autopilot_page.close_preview()
# Post 2: positive feedback
autopilot_page.open_ai_post(2)
autopilot_page.verify_positive_feedback()
autopilot_page.close_preview()
# Post 3: negative feedback
autopilot_page.open_ai_post(3)
> autopilot_page.verify_negative_feedback()
tests/test_autopilot.py:175:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/autopilot_page.py:866: in verify_negative_feedback
self.click_regenerate()
pages/autopilot_page.py
📸 Failure Screenshot:
⏱️ Duration: 32.55s
❌ Error:
self = <tests.test_autopilot.TestAutopilot object at 0x7fda8fdb4b50>
autopilot_page = <pages.autopilot_page.AutopilotPage object at 0x7fda8c3f2710>
login_page = <pages.login_page.LoginPage object at 0x7fda8c3f0bb0>
base_url = 'https://promo.com'
@pytest.mark.skip_smoke
def test_a04_verify_logo_and_watermark_in_autopilot_wizard(
self, autopilot_page, login_page, base_url
):
"""
A04 Verify logo and watermark functionalities in the autopilot wizard
Feature scenario:
Given AI user is logged in
When I open Planner
And I click Generate video posts in the banner
And I select the "Promo.com" brand (has logo/watermark/colors configured)
Then Business assets logo dropdown is displayed
Then I verify dropdown if 2 options are displayed
And I verify if watermark is filled
And I verify if watermark has dropdown options
Note: the wizard defaults to whichever brand was last selected, and the
"Bed Head" scratch brand on this account has no logo/watermark/colors set.
We explicitly select "Promo.com" (the account's fully-configured brand)
so this test doesn't depend on fragile leftover UI state.
"""
> login_page.login_directly(base_url, email_ai, get_password())
tests/test_autopilot.py:262:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/login_page.py:116: in login_directly
self.page.wait_for_function(
/usr/local/lib/python3.10/dist-packages/playwright/sync_api/_generated.py:12761: in wait_for_function
self._sync(
/usr/local/lib/python3.10/dist-packages/playwright/_impl/_page.py:1151: in wait_for_function
return await self._main_frame.wait_for_function(**locals_to_params(locals()))
/usr/local/lib/python3.10/dist-packages/playwright/_impl/_frame.py:940: in wait_for_function
await self._channel.send("waitForFunction", self._timeout, params)
/usr/local/l
📸 Failure Screenshot:
⏱️ Duration: 53.60s
❌ Error:
self = <tests.test_autopilot.TestAutopilot object at 0x7fda8fdb4160>
autopilot_page = <pages.autopilot_page.AutopilotPage object at 0x7fda8fe19330>
login_page = <pages.login_page.LoginPage object at 0x7fda8fe1bc40>
base_url = 'https://promo.com'
@pytest.mark.skip_smoke
@pytest.mark.skip_sanity
def test_a05_replace_brand_colors_in_autopilot_wizard(
self, autopilot_page, login_page, base_url
):
"""
A05 Replace brand colors in the autopilot wizard
Feature scenario:
Given AI user is logged in
When I open Planner
And I click Generate video posts in the banner
And I select the "Promo.com" brand (has logo/watermark/colors configured)
When I try to replace colors → Brand colors are being replaced
When I try to delete a color → Brand color has been deleted
Then a color is re-added so the brand isn't left empty for the next run
Note: see test_a04 docstring — "Promo.com" is selected explicitly because
it's the account's brand with colors already configured. The color removed
during the delete step is re-added afterwards so this test doesn't strip
the brand's colors bare for the next run (mirrors the empty-brand issue
that broke this test previously).
"""
login_page.login_directly(base_url, email_ai, get_password())
autopilot_page.go_to_planner(base_url)
autopilot_page.click_generate_in_banner()
> autopilot_page.select_existing_brand("Promo.com")
tests/test_autopilot.py:297:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/autopilot_page.py:2343: in select_existing_brand
self.page.locator(self.AI_BUSINESS_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/_loca
📸 Failure Screenshot:
⏱️ Duration: 46.10s
❌ Error:
self = <tests.test_autopilot.TestAutopilot object at 0x7fda8fdb48b0>
autopilot_page = <pages.autopilot_page.AutopilotPage object at 0x7fda8c21da50>
login_page = <pages.login_page.LoginPage object at 0x7fda8c21f910>
publisher_page = <pages.publisher_page.PublisherPage object at 0x7fda8c21f880>
base_url = 'https://promo.com'
@pytest.mark.skip_smoke
@pytest.mark.skip_sanity
def test_a06_schedule_an_ai_post(
self, autopilot_page, login_page, publisher_page, base_url
):
"""
A06 Schedule an AI post
Feature scenario:
Given AI user is logged in
When I open Planner
Then I clean all scheduled posts for the current month
When I click on 2 AI Post
And I click the schedule button
And I schedule an AI post (calendar confirm)
And I complete the schedule flow on the publisher page
And I click the view planner button
Then I verify that user is redirected to the planner
Then Assert amount of scheduled posts in planner: 1
"""
login_page.login_directly(base_url, email_ai, get_password())
autopilot_page.go_to_planner(base_url)
autopilot_page.clean_scheduled_posts()
autopilot_page.open_ai_post(2)
autopilot_page.click_schedule_button()
> autopilot_page.schedule_ai_post()
tests/test_autopilot.py:328:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/autopilot_page.py:1096: in schedule_ai_post
apply_btn.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/p
📸 Failure Screenshot:
⏱️ Duration: 30.00s
❌ Error:
self = <tests.test_autopilot.TestAutopilot object at 0x7fda8fdb4e20>
autopilot_page = <pages.autopilot_page.AutopilotPage object at 0x7fda7f805c90>
sign_up_page = <pages.sign_up_page.SignUpPage object at 0x7fda7f8052d0>
my_account_page = <pages.my_account_page.MyAccountPage object at 0x7fda7f8050c0>
base_url = 'https://promo.com'
@pytest.mark.skip_smoke
def test_a07_free_user_has_no_brand_options_in_wizard(
self, autopilot_page, sign_up_page, my_account_page, base_url
):
"""
A07 Free user does not see my brand or logo options in the autopilot wizard
Feature scenario:
When I create a new account
And I continue without a website (autopilot wizard landing)
Then I verify if there is no option to add brand
When I open the settings page
Then I delete my account
"""
random_email = f"promo.auto.a07.{uuid.uuid4().hex[:8]}@promo.com"
> sign_up_page.create_account(
base_url=base_url,
email=random_email,
full_name=fullname,
password=random_password,
)
tests/test_autopilot.py:353:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/sign_up_page.py:42: 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 0x7fda9003d540>
cb = <function Chann
📸 Failure Screenshot:
⏱️ Duration: 32.65s
❌ Error:
self = <tests.test_autopilot.TestAutopilot object at 0x7fda8fdb75b0>
autopilot_page = <pages.autopilot_page.AutopilotPage object at 0x7fda8fda8af0>
login_page = <pages.login_page.LoginPage object at 0x7fda8fdaa3b0>
base_url = 'https://promo.com'
@pytest.mark.skip_smoke
@pytest.mark.skip_sanity
def test_a08_educational_video_in_planner_banner(
self, autopilot_page, login_page, base_url
):
"""
A08 Educational video should be available in the planner banner
Feature scenario:
Given AI user is logged in
When I open Planner
And I click Watch the video in the banner
Then I verify autoplay of the educational video
"""
> login_page.login_directly(base_url, email_ai, get_password())
tests/test_autopilot.py:379:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/login_page.py:116: in login_directly
self.page.wait_for_function(
/usr/local/lib/python3.10/dist-packages/playwright/sync_api/_generated.py:12761: in wait_for_function
self._sync(
/usr/local/lib/python3.10/dist-packages/playwright/_impl/_page.py:1151: in wait_for_function
return await self._main_frame.wait_for_function(**locals_to_params(locals()))
/usr/local/lib/python3.10/dist-packages/playwright/_impl/_frame.py:940: in wait_for_function
await self._channel.send("waitForFunction", self._timeout, params)
/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 0x7fda9003d540>
cb = <function Channel.send.<locals>.<lambda> at 0x7fda8f08b640>
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
📸 Failure Screenshot:
⏱️ Duration: 45.61s
❌ Error:
self = <tests.test_autopilot.TestAutopilot object at 0x7fda8fdb7b50>
autopilot_page = <pages.autopilot_page.AutopilotPage object at 0x7fda8e0b3820>
login_page = <pages.login_page.LoginPage object at 0x7fda8e0b3e20>
base_url = 'https://promo.com', button_key = 'export', option = 'cbe'
@pytest.mark.skip_smoke
@pytest.mark.parametrize("button_key,option", [
("export", "cbe"),
("upload_to", "voice"),
("embed", "regenerate"),
])
def test_a09_redirect_to_publish_page_via_preview_buttons(
self, autopilot_page, login_page, base_url, button_key, option
):
"""
A09 Verify user is redirected to the publish page when using planner preview buttons
Feature scenario (Scenario Outline):
Given AI user is logged in
When I open Planner
Then I generate AI posts if needed
When I click on 4 AI Post
When I click the "<button>" button in the dropdown
Then Video is being rendered
Then New tab with Publish Page is opened
When I open Planner via link
When I click on 4 rendered AI Post
Then I check that "<option>" is not available
Then I remove the rendered post
Examples: export/cbe | upload_to/voice | embed/regenerate
"""
login_page.login_directly(base_url, email_ai, get_password())
autopilot_page.go_to_planner(base_url)
autopilot_page.ensure_ai_posts_exist()
autopilot_page.open_ai_post(4)
> autopilot_page.click_dropdown_button_open_publish(button_key)
tests/test_autopilot.py:415:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/autopilot_page.py:984: in click_dropdown_button_open_publish
self.wait_for_video_rendering()
pages/autopilot_page.py:992: in wait_for_video_rendering
self.page.locator(self.AI_VIDEO_BEING_RENDERED).wait_for(state="visible", timeout=self.T_NETWORK)
/usr/local/lib/python3.10/di
📸 Failure Screenshot:
⏱️ Duration: 32.69s
❌ Error:
self = <tests.test_autopilot.TestAutopilot object at 0x7fda8fdb4f70>
autopilot_page = <pages.autopilot_page.AutopilotPage object at 0x7fda7f85f100>
login_page = <pages.login_page.LoginPage object at 0x7fda7f85fe80>
base_url = 'https://promo.com', button_key = 'upload_to', option = 'voice'
@pytest.mark.skip_smoke
@pytest.mark.parametrize("button_key,option", [
("export", "cbe"),
("upload_to", "voice"),
("embed", "regenerate"),
])
def test_a09_redirect_to_publish_page_via_preview_buttons(
self, autopilot_page, login_page, base_url, button_key, option
):
"""
A09 Verify user is redirected to the publish page when using planner preview buttons
Feature scenario (Scenario Outline):
Given AI user is logged in
When I open Planner
Then I generate AI posts if needed
When I click on 4 AI Post
When I click the "<button>" button in the dropdown
Then Video is being rendered
Then New tab with Publish Page is opened
When I open Planner via link
When I click on 4 rendered AI Post
Then I check that "<option>" is not available
Then I remove the rendered post
Examples: export/cbe | upload_to/voice | embed/regenerate
"""
> login_page.login_directly(base_url, email_ai, get_password())
tests/test_autopilot.py:411:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/login_page.py:116: in login_directly
self.page.wait_for_function(
/usr/local/lib/python3.10/dist-packages/playwright/sync_api/_generated.py:12761: in wait_for_function
self._sync(
/usr/local/lib/python3.10/dist-packages/playwright/_impl/_page.py:1151: in wait_for_function
return await self._main_frame.wait_for_function(**locals_to_params(locals()))
/usr/local/lib/python3.10/dist-packages/playwright/_impl/_frame.py:940: in wait_for_function
await self._channel.se
📸 Failure Screenshot: