Test Results (22 tests)
⏱️ Duration: 39.88s
❌ Error:
self = <tests.test_chat_based_editor.TestChatBasedEditor object at 0x7f68c8aa68f0>
login_page = <pages.login_page.LoginPage object at 0x7f68c8a91690>
autopilot_page = <pages.autopilot_page.AutopilotPage object at 0x7f68c8a93070>
base_url = 'https://promo.com', prompt_key = 'caption'
@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 post
→ 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_ai_post(1)
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:85:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pages.autopilot_page.AutopilotPage object at 0x7f68c8a93070>
timeout = 30000
def verify_cbe_save_enabled(self, timeout: int = 30_000):
"""
Verifie
📸 Failure Screenshot:
⏱️ Duration: 38.72s
❌ Error:
self = <tests.test_chat_based_editor.TestChatBasedEditor object at 0x7f68c8aa67a0>
login_page = <pages.login_page.LoginPage object at 0x7f68c25ca590>
autopilot_page = <pages.autopilot_page.AutopilotPage object at 0x7f68c25cb130>
base_url = 'https://promo.com', prompt_key = 'linebreak'
@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 post
→ 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_ai_post(1)
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:85:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pages.autopilot_page.AutopilotPage object at 0x7f68c25cb130>
timeout = 30000
def verify_cbe_save_enabled(self, timeout: int = 30_000):
"""
Verif
📸 Failure Screenshot:
⏱️ Duration: 39.34s
❌ Error:
self = <tests.test_chat_based_editor.TestChatBasedEditor object at 0x7f68c8aa6050>
login_page = <pages.login_page.LoginPage object at 0x7f68c37de020>
autopilot_page = <pages.autopilot_page.AutopilotPage object at 0x7f68c3783130>
base_url = 'https://promo.com', prompt_key = 'remove_scene'
@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 post
→ 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_ai_post(1)
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:85:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pages.autopilot_page.AutopilotPage object at 0x7f68c3783130>
timeout = 30000
def verify_cbe_save_enabled(self, timeout: int = 30_000):
"""
Ve
📸 Failure Screenshot:
⏱️ Duration: 39.21s
❌ Error:
self = <tests.test_chat_based_editor.TestChatBasedEditor object at 0x7f68c8aa4df0>
login_page = <pages.login_page.LoginPage object at 0x7f68c1291b70>
autopilot_page = <pages.autopilot_page.AutopilotPage object at 0x7f68c12930d0>
base_url = 'https://promo.com', prompt_key = 'text_color'
@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 post
→ 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_ai_post(1)
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:85:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pages.autopilot_page.AutopilotPage object at 0x7f68c12930d0>
timeout = 30000
def verify_cbe_save_enabled(self, timeout: int = 30_000):
"""
Veri
📸 Failure Screenshot:
⏱️ Duration: 69.05s
❌ Error:
self = <tests.test_chat_based_editor.TestChatBasedEditor object at 0x7f68c8aa4d00>
login_page = <pages.login_page.LoginPage object at 0x7f68c2462380>
autopilot_page = <pages.autopilot_page.AutopilotPage object at 0x7f68c24604c0>
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 post
→ 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_ai_post(1)
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:85:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pages.autopilot_page.AutopilotPage object at 0x7f68c24604c0>
timeout = 60000
def verify_cbe_save_enabled(self, timeout: int = 30_000):
"""
Verif
📸 Failure Screenshot:
⏱️ Duration: 69.24s
❌ Error:
self = <tests.test_chat_based_editor.TestChatBasedEditor object at 0x7f68c8aa5120>
login_page = <pages.login_page.LoginPage object at 0x7f68c8a921a0>
autopilot_page = <pages.autopilot_page.AutopilotPage object at 0x7f68c8a93f70>
base_url = 'https://promo.com', prompt_key = 'text_position'
@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 post
→ 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_ai_post(1)
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:85:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pages.autopilot_page.AutopilotPage object at 0x7f68c8a93f70>
timeout = 60000
def verify_cbe_save_enabled(self, timeout: int = 30_000):
"""
V
📸 Failure Screenshot:
⏱️ Duration: 38.31s
❌ Error:
self = <tests.test_chat_based_editor.TestChatBasedEditor object at 0x7f68c8aa51e0>
login_page = <pages.login_page.LoginPage object at 0x7f68c89abb80>
autopilot_page = <pages.autopilot_page.AutopilotPage object at 0x7f68c89abca0>
base_url = 'https://promo.com', prompt_key = 'translation'
@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 post
→ 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_ai_post(1)
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:85:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pages.autopilot_page.AutopilotPage object at 0x7f68c89abca0>
timeout = 30000
def verify_cbe_save_enabled(self, timeout: int = 30_000):
"""
Ver
📸 Failure Screenshot:
⏱️ Duration: 39.62s
❌ Error:
self = <tests.test_chat_based_editor.TestChatBasedEditor object at 0x7f68c8aa52a0>
login_page = <pages.login_page.LoginPage object at 0x7f68c8a92320>
autopilot_page = <pages.autopilot_page.AutopilotPage object at 0x7f68c8a93040>
base_url = 'https://promo.com', prompt_key = 'add_scene'
@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 post
→ 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_ai_post(1)
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:85:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pages.autopilot_page.AutopilotPage object at 0x7f68c8a93040>
timeout = 30000
def verify_cbe_save_enabled(self, timeout: int = 30_000):
"""
Verif
📸 Failure Screenshot:
⏱️ Duration: 52.22s
❌ Error:
self = <tests.test_chat_based_editor.TestChatBasedEditor object at 0x7f68c8aa5720>
login_page = <pages.login_page.LoginPage object at 0x7f68c8a91b70>
autopilot_page = <pages.autopilot_page.AutopilotPage object at 0x7f68c8d3cf40>
base_url = 'https://promo.com', ratio = 'wide'
@pytest.mark.parametrize("ratio", ["wide", "vertical"])
def test_cbe02_cbe_should_work_in_all_ratios(
self, login_page, autopilot_page, base_url, ratio
):
"""
CBE02 CBE should work in all ratios
Login as AI user → open Planner → open the first AI post from #2
onward that isn't a voice-over post → change ratio → open CBE →
send caption prompt → 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(min_count=2)
> autopilot_page.open_first_ai_post_with_cbe(start=2, skip_voice_over=True)
tests/test_chat_based_editor.py:103:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pages.autopilot_page.AutopilotPage object at 0x7f68c8d3cf40>, start = 2
max_scan = 7, 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 post index (e.g.
always post #3) will eventually land on a Rated post and time out on
`open_cbe()`
📸 Failure Screenshot:
⏱️ Duration: 51.78s
❌ Error:
self = <tests.test_chat_based_editor.TestChatBasedEditor object at 0x7f68c8aa58a0>
login_page = <pages.login_page.LoginPage object at 0x7f68c125e2c0>
autopilot_page = <pages.autopilot_page.AutopilotPage object at 0x7f68c125f370>
base_url = 'https://promo.com', ratio = 'vertical'
@pytest.mark.parametrize("ratio", ["wide", "vertical"])
def test_cbe02_cbe_should_work_in_all_ratios(
self, login_page, autopilot_page, base_url, ratio
):
"""
CBE02 CBE should work in all ratios
Login as AI user → open Planner → open the first AI post from #2
onward that isn't a voice-over post → change ratio → open CBE →
send caption prompt → 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(min_count=2)
> autopilot_page.open_first_ai_post_with_cbe(start=2, skip_voice_over=True)
tests/test_chat_based_editor.py:103:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pages.autopilot_page.AutopilotPage object at 0x7f68c125f370>, start = 2
max_scan = 7, 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 post index (e.g.
always post #3) will eventually land on a Rated post and time out on
`open_cbe
📸 Failure Screenshot:
⏱️ Duration: 66.81s
❌ Error:
self = <tests.test_chat_based_editor.TestChatBasedEditor object at 0x7f68c8aa4400>
login_page = <pages.login_page.LoginPage object at 0x7f68c37c5060>
autopilot_page = <pages.autopilot_page.AutopilotPage object at 0x7f68c37c6980>
base_url = 'https://promo.com'
def test_cbe05_voice_changes_not_possible_for_non_narrated_videos(
self, login_page, autopilot_page, base_url
):
"""
CBE05 Voice changes not possible for non-narrated videos
Login as AI user → go to planner → open 1st AI post → open CBE
→ send 'change_voice' prompt → verify save button is disabled
→ verify voice apply button is not shown in CBE panel.
"""
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(1)
autopilot_page.open_cbe()
> autopilot_page.send_cbe_prompt_and_wait(CBE_PROMPTS["change_voice"])
tests/test_chat_based_editor.py:184:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pages.autopilot_page.AutopilotPage object at 0x7f68c37c6980>
prompt = 'Please add a voice to this video'
def send_cbe_prompt_and_wait(self, prompt: str):
"""
Types a prompt in the chat input, sends it, then waits for the AI response
and asserts no error message is shown.
The CBE chat history persists on the post across sessions, so on a post
that has already been through prior prompts (e.g. test_cbe01's chained
parametrized runs against the same post) the panel can already contain
icons/messages from earlier turns. Waiting on a fixed index (old:
`AICHAT_CHAT_ICON_PINK.nth(1)`) or a bare visibility check would then be
satisfied by that stale history and return immediately, without ever
waiting for the reply to *this* prompt. Instead, capture counts before
s
📸 Failure Screenshot: