⏱️ Duration: 18.05s
❌ Error:
self = <tests.test_active_cast.TestActiveCast object at 0x7f8a3ee3e9b0>
page = <Page url='https://promo.com/activecast/my-videos'>
base_url = 'https://promo.com'
@pytest.mark.skip_smoke
def test_as03_my_videos_action_buttons(self, page: Page, base_url: str) -> None:
"""Logged-in user navigates to My Videos, confirms at least one video exists, and hovers to reveal action buttons."""
login_page = LoginPage(page)
login_page.login_directly(base_url, general_mail(), get_password())
login_page.assert_logged_in_as(fullname)
active_cast = ActiveCastPage(page)
active_cast.navigate_to_active_cast(base_url)
active_cast.go_to_my_videos()
active_cast.assert_has_at_least_one_video()
> active_cast.hover_first_video_and_assert_action_buttons()
tests/test_active_cast.py:57:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pages.active_cast_page.ActiveCastPage object at 0x7f8a3ee3c220>
def hover_first_video_and_assert_action_buttons(self) -> None:
"""Hovers the first completed video card, asserts recreate + download appear,
then opens the kebab ("Options for ...") menu and asserts delete appears there.
force=True: the My Videos grid keeps reflowing as thumbnails lazy-load,
so plain hover()'s stability check never settles and times out even
though the card is already visible. force=True skips that check and
dispatches the hover event directly at the element's location.
The kebab trigger is opened via a JS-dispatched click, not Playwright's
click() — real mouse movement to the trigger's coordinates drops the
card's :hover state (which the overlay, including the trigger itself,
depends on) before the click registers, leaving the menu closed.
"""
index = self._first_completed_video_index()
assert index is not None, (
"Every loaded My
📸 Failure Screenshot:
⏱️ Duration: 336.11s
❌ Error:
self = <tests.test_active_cast.TestActiveCast object at 0x7f8a3ee3f070>
page = <Page url='https://promo.com/activecast/project/view/6aa9255d7ee495d26b2e9706'>
base_url = 'https://promo.com'
@pytest.mark.skip_smoke
def test_as05_full_generation_flow(self, page: Page, base_url: str) -> None:
"""Logged-in user activates an image, configures Kling 3 Standard generation, and waits for video result."""
login_page = LoginPage(page)
login_page.login_directly(base_url, general_mail(), get_password())
login_page.assert_logged_in_as(fullname)
active_cast = ActiveCastPage(page)
active_cast.navigate_to_active_cast(base_url)
active_cast.click_create_in_nav()
active_cast.assert_grid_has_at_least_20_items()
active_cast.hover_first_item_and_click_activate()
active_cast.select_second_action_template()
active_cast.fill_scene_action(
"The man is indoors, wearing the same pink polo shirt. "
"Preserve his identity, hairstyle, outfit. The man is terrifies and shouts."
)
active_cast.assert_speaker_chip_avatar_visible()
active_cast.fill_scene_text(
"Hi, I'm your ActiveStock Terrified Avatar. "
"I can help you create inspiring content with real footage from places all over the world."
)
active_cast.select_model("Kling 3 Standard")
duration_before_sync = active_cast.get_duration_label()
active_cast.enable_smart_sync()
active_cast.assert_duration_auto_synced_and_locked(duration_before_sync)
active_cast.click_generate_video()
active_cast.assert_generating_in_progress()
> active_cast.wait_for_generation_complete()
tests/test_active_cast.py:102:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pages.active_cast_page.ActiveCastPage object at 0x7f8a3c0b7e80>
def wait_for_generation_complete(self) -> None:
📸 Failure Screenshot: