Test Results (22 tests)
⏱️ Duration: 74.69s
❌ Error:
self = <tests.test_chat_based_editor.TestChatBasedEditor object at 0x7fcaf51891e0>
login_page = <pages.login_page.LoginPage object at 0x7fcaf4268c40>
autopilot_page = <pages.autopilot_page.AutopilotPage object at 0x7fcaf426b670>
base_url = 'https://promo.com', prompt_key = 'text_font'
@pytest.mark.skip_smoke
@pytest.mark.parametrize("prompt_key", [
"caption",
"linebreak",
"music",
"outro_values",
"remove_scene",
"text_color",
"text_font",
"logo",
"text_position",
"translation",
"add_scene",
"change_watermark",
])
def test_cbe01_cbe_service_chains_sanity(
self, login_page, autopilot_page, base_url, prompt_key
):
"""
CBE01 CBE service chains sanity
Login as AI user → open Planner → ensure AI posts exist → open 1st
non-voice-over AI post that offers CBE
→ open CBE → send prompt → verify AI response → verify save enabled
→ verify discard popup → save video.
"""
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_first_ai_post_with_cbe(start=1, skip_voice_over=True)
autopilot_page.open_cbe()
autopilot_page.send_cbe_prompt_and_wait(CBE_PROMPTS[prompt_key])
# text_font / text_position are known to be slower on the backend to
# apply and enable Save (documented flaky report in migration_log.md);
# give them extra headroom instead of the default 30s.
save_timeout = 60_000 if prompt_key in ("text_font", "text_position") else 30_000
> autopilot_page.verify_cbe_save_enabled(timeout=save_timeout)
tests/test_chat_based_editor.py:86:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pages.autopilot_page.AutopilotPage object at 0x7fcaf426b670>
timeout = 60000
📸 Failure Screenshot:
⏱️ Duration: 164.41s
❌ Error:
self = <tests.test_chat_based_editor.TestChatBasedEditor object at 0x7fcaf518a050>
login_page = <pages.login_page.LoginPage object at 0x7fcaed929630>
autopilot_page = <pages.autopilot_page.AutopilotPage object at 0x7fcaed92a590>
base_url = 'https://promo.com', asset = 'video'
@pytest.mark.parametrize("asset", ["video", "photo"])
def test_cbe04_upload_via_filestack_url(
self, login_page, autopilot_page, base_url, asset
):
"""
CBE04 Upload via Filestack URL
Login as AI user → open Planner → open 1st non-voice-over AI post
with CBE → open CBE
→ send uploaded_video prompt → import asset via Filestack URL
→ verify progress bar + upload complete + tab redirect.
"""
url = filestack_upload_video_url if asset == "video" else filestack_upload_photo_url
login_page.login_directly(base_url, email_ai, get_password())
autopilot_page.go_to_planner(base_url)
autopilot_page.ensure_ai_posts_exist(min_count=1)
> autopilot_page.open_first_ai_post_with_cbe(start=1, skip_voice_over=True)
tests/test_chat_based_editor.py:164:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pages.autopilot_page.AutopilotPage object at 0x7fcaed92a590>, start = 1
max_scan = 13, skip_voice_over = True
def open_first_ai_post_with_cbe(
self, start: int = 1, max_scan: int = None, skip_voice_over: bool = False
) -> int:
"""
Opens AI posts starting at `start`, skipping any that don't offer the
CBE (chat-to-edit) button, and leaves the first eligible one open.
Returns the 1-based index of the post that was opened.
`email_ai` is a shared/persistent prod account: once a post is already
Rated (by this run or an earlier one), Promo's UI removes the chat and
regenerate controls from its preview entirely — confirmed via DOM
inspection, not just a slow render. A hardcoded p
📸 Failure Screenshot:
⏱️ Duration: 164.90s
❌ Error:
self = <tests.test_chat_based_editor.TestChatBasedEditor object at 0x7fcaf51889d0>
login_page = <pages.login_page.LoginPage object at 0x7fcaefefd270>
autopilot_page = <pages.autopilot_page.AutopilotPage object at 0x7fcaefefeef0>
base_url = 'https://promo.com', asset = 'photo'
@pytest.mark.parametrize("asset", ["video", "photo"])
def test_cbe04_upload_via_filestack_url(
self, login_page, autopilot_page, base_url, asset
):
"""
CBE04 Upload via Filestack URL
Login as AI user → open Planner → open 1st non-voice-over AI post
with CBE → open CBE
→ send uploaded_video prompt → import asset via Filestack URL
→ verify progress bar + upload complete + tab redirect.
"""
url = filestack_upload_video_url if asset == "video" else filestack_upload_photo_url
login_page.login_directly(base_url, email_ai, get_password())
autopilot_page.go_to_planner(base_url)
autopilot_page.ensure_ai_posts_exist(min_count=1)
> autopilot_page.open_first_ai_post_with_cbe(start=1, skip_voice_over=True)
tests/test_chat_based_editor.py:164:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pages.autopilot_page.AutopilotPage object at 0x7fcaefefeef0>, start = 1
max_scan = 13, skip_voice_over = True
def open_first_ai_post_with_cbe(
self, start: int = 1, max_scan: int = None, skip_voice_over: bool = False
) -> int:
"""
Opens AI posts starting at `start`, skipping any that don't offer the
CBE (chat-to-edit) button, and leaves the first eligible one open.
Returns the 1-based index of the post that was opened.
`email_ai` is a shared/persistent prod account: once a post is already
Rated (by this run or an earlier one), Promo's UI removes the chat and
regenerate controls from its preview entirely — confirmed via DOM
inspection, not just a slow render. A hardcoded p
📸 Failure Screenshot: