Test Results (15 tests)
⏱️ Duration: 318.27s
❌ Error:
fixturefunc = <function add_new_ai_post_tomorrow at 0x7fa29f5d4430>
request = <FixtureRequest for <Function test_ai06_free_user_can_generate_single_ai_post_from_planner>>
kwargs = {'browser': <selenium.webdriver.remote.webdriver.WebDriver (session="9da17b40282db48863c26e941368c651")>}
def call_fixture_func(
fixturefunc: "_FixtureFunc[FixtureValue]", request: FixtureRequest, kwargs
) -> FixtureValue:
if is_generator(fixturefunc):
fixturefunc = cast(
Callable[..., Generator[FixtureValue, None, None]], fixturefunc
)
generator = fixturefunc(**kwargs)
try:
fixture_result = next(generator)
except StopIteration:
raise ValueError(f"{request.fixturename} did not yield a value") from None
finalizer = functools.partial(_teardown_yield_fixture, fixturefunc, generator)
request.addfinalizer(finalizer)
else:
fixturefunc = cast(Callable[..., FixtureValue], fixturefunc)
> fixture_result = fixturefunc(**kwargs)
venv/lib/python3.10/site-packages/_pytest/fixtures.py:917:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/test_planner_page.py:990: in add_new_ai_post_tomorrow
bs_fail_with_traceback(browser, add_new_ai_post_tomorrow, e)
helpers/common_helpers.py:815: in bs_fail_with_traceback
raise exception
tests/test_planner_page.py:988: in add_new_ai_post_tomorrow
generate_single_ai(browser, single_ai_description_input)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
browser = <selenium.webdriver.remote.webdriver.WebDriver (session="9da17b40282db48863c26e941368c651")>
ai_input = 'Funny dogs video'
def generate_single_ai(browser, ai_input: str):
"""
Provides the description and generates a single AI video from the planner pop-up.
Single AI always generates voiceover videos
ai_input ca
📸 Failure Screenshot:
⏱️ Duration: 77.08s
❌ Error:
fixturefunc = <function ai_onboarding_timer at 0x7fa29f92c4c0>
request = <FixtureRequest for <Function test_ai09p_free_user_generates_a_video_based_on_amazon_listing_that_contains_videos[amazon_product_with_videos2]>>
kwargs = {'browser': <selenium.webdriver.remote.webdriver.WebDriver (session="943ff59d73b17565a579320a90a11c98")>}
def call_fixture_func(
fixturefunc: "_FixtureFunc[FixtureValue]", request: FixtureRequest, kwargs
) -> FixtureValue:
if is_generator(fixturefunc):
fixturefunc = cast(
Callable[..., Generator[FixtureValue, None, None]], fixturefunc
)
generator = fixturefunc(**kwargs)
try:
fixture_result = next(generator)
except StopIteration:
raise ValueError(f"{request.fixturename} did not yield a value") from None
finalizer = functools.partial(_teardown_yield_fixture, fixturefunc, generator)
request.addfinalizer(finalizer)
else:
fixturefunc = cast(Callable[..., FixtureValue], fixturefunc)
> fixture_result = fixturefunc(**kwargs)
venv/lib/python3.10/site-packages/_pytest/fixtures.py:917:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/test_autopilot_page.py:335: in ai_onboarding_timer
bs_fail_with_traceback(browser, ai_onboarding_timer, e)
helpers/common_helpers.py:815: in bs_fail_with_traceback
raise exception
tests/test_autopilot_page.py:333: in ai_onboarding_timer
video_generation_screen_displayed(browser)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
browser = <selenium.webdriver.remote.webdriver.WebDriver (session="943ff59d73b17565a579320a90a11c98")>
def video_generation_screen_displayed(browser):
"""
Verify that the video generation screen is displayed
"""
> assert is_visible(browser, AI_GENERATOR_TIMER, 10)
E AssertionError
pages/autopil
📸 Failure Screenshot:
⏱️ Duration: 76.34s
❌ Error:
fixturefunc = <function ai_onboarding_timer at 0x7fa29f92c4c0>
request = <FixtureRequest for <Function test_ai09p_free_user_generates_a_video_based_on_amazon_listing_that_contains_videos[amazon_product_with_videos3]>>
kwargs = {'browser': <selenium.webdriver.remote.webdriver.WebDriver (session="07294e23515eb8c6efd8c9fe2f1ca0c1")>}
def call_fixture_func(
fixturefunc: "_FixtureFunc[FixtureValue]", request: FixtureRequest, kwargs
) -> FixtureValue:
if is_generator(fixturefunc):
fixturefunc = cast(
Callable[..., Generator[FixtureValue, None, None]], fixturefunc
)
generator = fixturefunc(**kwargs)
try:
fixture_result = next(generator)
except StopIteration:
raise ValueError(f"{request.fixturename} did not yield a value") from None
finalizer = functools.partial(_teardown_yield_fixture, fixturefunc, generator)
request.addfinalizer(finalizer)
else:
fixturefunc = cast(Callable[..., FixtureValue], fixturefunc)
> fixture_result = fixturefunc(**kwargs)
venv/lib/python3.10/site-packages/_pytest/fixtures.py:917:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/test_autopilot_page.py:335: in ai_onboarding_timer
bs_fail_with_traceback(browser, ai_onboarding_timer, e)
helpers/common_helpers.py:815: in bs_fail_with_traceback
raise exception
tests/test_autopilot_page.py:333: in ai_onboarding_timer
video_generation_screen_displayed(browser)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
browser = <selenium.webdriver.remote.webdriver.WebDriver (session="07294e23515eb8c6efd8c9fe2f1ca0c1")>
def video_generation_screen_displayed(browser):
"""
Verify that the video generation screen is displayed
"""
> assert is_visible(browser, AI_GENERATOR_TIMER, 10)
E AssertionError
pages/autopil
📸 Failure Screenshot:
⏱️ Duration: 84.14s
❌ Error:
fixturefunc = <function select_custom_posts at 0x7fa29f8d9870>
request = <FixtureRequest for <Function test_ai13_new_user_tries_ai_generation_from_homepage_with_custom_dates__release>>
kwargs = {'amount': '5', 'browser': <selenium.webdriver.remote.webdriver.WebDriver (session="07ec30b8c8191a346253e57136ebfd33")>}
def call_fixture_func(
fixturefunc: "_FixtureFunc[FixtureValue]", request: FixtureRequest, kwargs
) -> FixtureValue:
if is_generator(fixturefunc):
fixturefunc = cast(
Callable[..., Generator[FixtureValue, None, None]], fixturefunc
)
generator = fixturefunc(**kwargs)
try:
fixture_result = next(generator)
except StopIteration:
raise ValueError(f"{request.fixturename} did not yield a value") from None
finalizer = functools.partial(_teardown_yield_fixture, fixturefunc, generator)
request.addfinalizer(finalizer)
else:
fixturefunc = cast(Callable[..., FixtureValue], fixturefunc)
> fixture_result = fixturefunc(**kwargs)
venv/lib/python3.10/site-packages/_pytest/fixtures.py:917:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/test_autopilot_page.py:102: in select_custom_posts
bs_fail_with_traceback(browser, select_custom_posts, e)
helpers/common_helpers.py:815: in bs_fail_with_traceback
raise exception
tests/test_autopilot_page.py:99: in select_custom_posts
select_custom_dates_posts(browser, int(amount))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
browser = <selenium.webdriver.remote.webdriver.WebDriver (session="07ec30b8c8191a346253e57136ebfd33")>
amount = 5
def select_custom_dates_posts(browser, amount: int):
"""
Selects random dates from the next month in the post plan pop-up
Assertion for aria-selected is added to prevent performing next actions before element
📸 Failure Screenshot:
⏱️ Duration: 194.75s
❌ Error:
browser = <selenium.webdriver.remote.webdriver.WebDriver (session="77c383e325a7fa30a03972f4cb5bf5a7")>
def go_to_my_account(browser):
"""
Goes to My Account page with screenshot upload on failure
"""
time.sleep(4)
# Close any modals/popups that might be blocking the menu
skip_offer_modal(browser)
time.sleep(1)
# Try to find and hover over username menu with retry logic and screenshots
max_attempts = 5
for attempt in range(max_attempts):
if is_visible(browser, USERNAME_MENU, 10):
do_hover(browser, USERNAME_MENU, 5)
break
else:
print(f"USERNAME_MENU not visible in go_to_my_account, attempt {attempt + 1}/{max_attempts}")
# Take screenshot and upload to R2
timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
job_id = os.getenv('CI_JOB_ID', 'local')
filename = f"my_account_username_missing_{job_id}_{timestamp}_attempt{attempt}.png"
screenshot_url = upload_screenshot_to_r2(browser, filename)
print(f"Screenshot uploaded: {screenshot_url}")
if attempt < max_attempts - 1:
browser.refresh()
time.sleep(4)
skip_offer_modal(browser)
else:
# Final screenshot before failing
timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
job_id = os.getenv('CI_JOB_ID', 'local')
filename = f"my_account_username_final_fail_{job_id}_{timestamp}.png"
screenshot_url = upload_screenshot_to_r2(browser, filename)
print(f"Final failure screenshot: {screenshot_url}")
# If username menu never appeared, user might not be logged in
raise AssertionError("USERNAME_MENU never became visible. User may not be logged in.")
# Click My Account
📸 Failure Screenshot:
⏱️ Duration: 86.83s
❌ Error:
fixturefunc = <function ai_onboarding_timer at 0x7f5d9cfd8940>
request = <FixtureRequest for <Function test_ai09p_free_user_generates_a_video_based_on_amazon_listing_that_contains_videos[amazon_product_with_videos]>>
kwargs = {'browser': <selenium.webdriver.remote.webdriver.WebDriver (session="6774ff8561ffcf08f07c16443c61cfad")>}
def call_fixture_func(
fixturefunc: "_FixtureFunc[FixtureValue]", request: FixtureRequest, kwargs
) -> FixtureValue:
if is_generator(fixturefunc):
fixturefunc = cast(
Callable[..., Generator[FixtureValue, None, None]], fixturefunc
)
generator = fixturefunc(**kwargs)
try:
fixture_result = next(generator)
except StopIteration:
raise ValueError(f"{request.fixturename} did not yield a value") from None
finalizer = functools.partial(_teardown_yield_fixture, fixturefunc, generator)
request.addfinalizer(finalizer)
else:
fixturefunc = cast(Callable[..., FixtureValue], fixturefunc)
> fixture_result = fixturefunc(**kwargs)
venv/lib/python3.10/site-packages/_pytest/fixtures.py:917:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/test_autopilot_page.py:335: in ai_onboarding_timer
bs_fail_with_traceback(browser, ai_onboarding_timer, e)
helpers/common_helpers.py:815: in bs_fail_with_traceback
raise exception
tests/test_autopilot_page.py:333: in ai_onboarding_timer
video_generation_screen_displayed(browser)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
browser = <selenium.webdriver.remote.webdriver.WebDriver (session="6774ff8561ffcf08f07c16443c61cfad")>
def video_generation_screen_displayed(browser):
"""
Verify that the video generation screen is displayed
"""
> assert is_visible(browser, AI_GENERATOR_TIMER, 10)
E AssertionError
pages/autopilo
📸 Failure Screenshot:
⏱️ Duration: 459.21s
❌ Error:
fixturefunc = <function user_redirected_after_video_generation at 0x7f5d9cfd95a0>
request = <FixtureRequest for <Function test_ai14_new_user_tries_ai_generation_from_homepage_for_amazon_product>>
kwargs = {'browser': <selenium.webdriver.remote.webdriver.WebDriver (session="3ea79de87b8747dfc1123046cdbdc76f")>}
def call_fixture_func(
fixturefunc: "_FixtureFunc[FixtureValue]", request: FixtureRequest, kwargs
) -> FixtureValue:
if is_generator(fixturefunc):
fixturefunc = cast(
Callable[..., Generator[FixtureValue, None, None]], fixturefunc
)
generator = fixturefunc(**kwargs)
try:
fixture_result = next(generator)
except StopIteration:
raise ValueError(f"{request.fixturename} did not yield a value") from None
finalizer = functools.partial(_teardown_yield_fixture, fixturefunc, generator)
request.addfinalizer(finalizer)
else:
fixturefunc = cast(Callable[..., FixtureValue], fixturefunc)
> fixture_result = fixturefunc(**kwargs)
venv/lib/python3.10/site-packages/_pytest/fixtures.py:917:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/test_autopilot_page.py:400: in user_redirected_after_video_generation
bs_fail_with_traceback(browser, user_redirected_after_video_generation, e)
helpers/common_helpers.py:815: in bs_fail_with_traceback
raise exception
tests/test_autopilot_page.py:398: in user_redirected_after_video_generation
ai_generated_posts_in_planner(browser, 300)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
browser = <selenium.webdriver.remote.webdriver.WebDriver (session="3ea79de87b8747dfc1123046cdbdc76f")>
waiting_time = 300
def ai_generated_posts_in_planner(browser, waiting_time: int):
"""
Verifies if AI posts are visible in Planner
waiting_time (int) = chosen value in se
📸 Failure Screenshot: