Test Results (3 tests)
⏱️ Duration: 36.70s
❌ Error:
self = <tests.test_active_stock.TestActiveStock object at 0x7f0252384430>
page = <Page url='https://test03.testingpromo.com/active-stock'>
base_url = 'https://test03.testingpromo.com'
def test_as01_smoke_logged_in_create_page(self, page: Page, base_url: str) -> None:
"""Logged-in user on /active-stock sees header nav, 20+ grid items, recreate-btn on hover, and lands on /generate-from/."""
LoginPage(page).login_directly(base_url, general_mail(), get_password())
active_stock = ActiveStockPage(page)
active_stock.navigate_to_active_stock(base_url)
active_stock.assert_header_nav_items()
> active_stock.assert_grid_has_at_least_20_items()
tests/test_active_stock.py:27:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/active_stock_page.py:82: in assert_grid_has_at_least_20_items
self.page.locator(self.GRID_ITEM).nth(19).wait_for(
/usr/local/lib/python3.10/dist-packages/playwright/sync_api/_generated.py:20298: in wait_for
self._sync(
/usr/local/lib/python3.10/dist-packages/playwright/_impl/_locator.py:741: 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/playwright/_impl/_connection.py:69: in send
return await self._connection.wrap_api_call(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <playwright._impl._connection.Connection object at 0x7f0252386440>
cb = <function Channel.send.<locals>.<lambda> at 0x7f025176f5b0>
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 await cb()
task = asyncio.current_task(self._loop)
st: List[inspect.FrameInfo] = getattr(
task, "__pw_stack__", N
📸 Failure Screenshot:
⏱️ Duration: 32.11s
❌ Error:
self = <tests.test_active_stock.TestActiveStock object at 0x7f02523857e0>
page = <Page url='https://test03.testingpromo.com/active-stock'>
base_url = 'https://test03.testingpromo.com'
def test_as02_smoke_not_logged_in_showcase(self, page: Page, base_url: str) -> None:
"""Unauthenticated user sees showcase CTA, 20+ grid items, recreate-btn on hover, and lands on /generate-from/."""
active_stock = ActiveStockPage(page)
active_stock.navigate_to_active_stock(base_url)
active_stock.assert_showcase_cta_visible()
> active_stock.assert_grid_has_at_least_20_items()
tests/test_active_stock.py:36:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/active_stock_page.py:82: in assert_grid_has_at_least_20_items
self.page.locator(self.GRID_ITEM).nth(19).wait_for(
/usr/local/lib/python3.10/dist-packages/playwright/sync_api/_generated.py:20298: in wait_for
self._sync(
/usr/local/lib/python3.10/dist-packages/playwright/_impl/_locator.py:741: 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/playwright/_impl/_connection.py:69: in send
return await self._connection.wrap_api_call(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <playwright._impl._connection.Connection object at 0x7f0252386440>
cb = <function Channel.send.<locals>.<lambda> at 0x7f0250408820>
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 await cb()
task = asyncio.current_task(self._loop)
st: List[inspect.FrameInfo] = getattr(
task, "__pw_stack__", None
) or inspect.stack(0)
parsed_st = _extract_stack_trace_informatio
📸 Failure Screenshot:
⏱️ Duration: 22.04s
❌ Error:
self = <tests.test_active_stock.TestActiveStock object at 0x7f0252385ea0>
page = <Page url='https://test03.testingpromo.com/active-stock/generate?imageId=1072528872&imageSource=getty&imageTitle=The+m...qpUiWJ_XLJMBk3be4snkQ4bnF_7AwcIxQC5elQhldck%3D&term=Bizarre&searchType=search&searchTerm=Bizarre&searchRatio=vertical'>
base_url = 'https://test03.testingpromo.com'
@pytest.mark.skip_smoke
def test_as04_generate_page_controls_after_image_activation(self, page: Page, base_url: str) -> None:
"""Logged-in user activates an image from the create grid and verifies all generator controls are visible."""
LoginPage(page).login_directly(base_url, general_mail(), get_password())
active_stock = ActiveStockPage(page)
active_stock.navigate_to_create(base_url)
active_stock.assert_grid_has_at_least_20_items()
active_stock.hover_second_item_and_assert_activate_btn()
> active_stock.activate_image_and_assert_generate_page()
tests/test_active_stock.py:60:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pages.active_stock_page.ActiveStockPage object at 0x7f0250446980>
def activate_image_and_assert_generate_page(self) -> None:
"""Clicks activate-image, then asserts URL, all generator controls visible, and crop/link controls absent."""
with self.page.expect_navigation(timeout=self.T_NETWORK):
self.page.locator(self.ACTIVATE_IMAGE_BTN).first.click(force=True)
self.page.wait_for_load_state("networkidle", timeout=self.T_NETWORK)
assert "/active-stock/generate?imageId=" in self.page.url, (
f"Expected URL to contain '/active-stock/generate?imageId=', got: {self.page.url}"
)
visible_selectors = [
self.CHANGE_IMAGE_BTN,
self.GENERATE_VIDEO_BTN,
self.ACTION_TEMPLATE_SELECTOR,
self.CAMERA_MOVEMENT_SELECTOR,
self.SCENE_ACTION_INPUT,
self.
📸 Failure Screenshot: