From ffd72812500b46c111c20f14be7875773f1972f1 Mon Sep 17 00:00:00 2001 From: Fire162 Date: Wed, 14 Oct 2026 14:50:49 +0530 Subject: [PATCH] fix: accept pseudo option in LocatorAssertions.not_to_have_css (#3244) --- playwright/_impl/_assertions.py | 3 ++- playwright/async_api/_generated.py | 5 ++++- playwright/sync_api/_generated.py | 5 ++++- tests/async/test_assertions.py | 14 ++++++++++++++ tests/sync/test_assertions.py | 14 ++++++++++++++ 5 files changed, 38 insertions(+), 3 deletions(-) diff --git a/playwright/_impl/_assertions.py b/playwright/_impl/_assertions.py index 44c7c4a9b..9f386cbc7 100644 --- a/playwright/_impl/_assertions.py +++ b/playwright/_impl/_assertions.py @@ -505,9 +505,10 @@ async def not_to_have_css( name: str, value: Union[str, Pattern[str]], timeout: float = None, + pseudo: Literal["after", "before"] = None, ) -> None: __tracebackhide__ = True - await self._not.to_have_css(name, value, timeout) + await self._not.to_have_css(name, value, timeout=timeout, pseudo=pseudo) async def to_have_id( self, diff --git a/playwright/async_api/_generated.py b/playwright/async_api/_generated.py index f1c3b2576..14524c3ce 100644 --- a/playwright/async_api/_generated.py +++ b/playwright/async_api/_generated.py @@ -14104,6 +14104,7 @@ async def not_to_have_css( name: str, value: typing.Union[str, typing.Pattern[str]], *, + pseudo: typing.Optional[Literal["after", "before"]] = None, timeout: typing.Optional[typing.Union[float, datetime.timedelta]] = None, ) -> None: """LocatorAssertions.not_to_have_css @@ -14116,13 +14117,15 @@ async def not_to_have_css( CSS property name. value : Union[Pattern[str], str] CSS property value. + pseudo : Union["after", "before", None] + Pseudo-element to read computed styles from. timeout : Union[float, None] Time to retry the assertion for in milliseconds. Defaults to `5000`. """ __tracebackhide__ = True await self._impl_obj.not_to_have_css( - name=name, value=value, timeout=to_milliseconds(timeout) + name=name, value=value, pseudo=pseudo, timeout=to_milliseconds(timeout) ) async def not_to_have_id( diff --git a/playwright/sync_api/_generated.py b/playwright/sync_api/_generated.py index 013766323..3768d4187 100644 --- a/playwright/sync_api/_generated.py +++ b/playwright/sync_api/_generated.py @@ -14178,6 +14178,7 @@ def not_to_have_css( name: str, value: typing.Union[str, typing.Pattern[str]], *, + pseudo: typing.Optional[Literal["after", "before"]] = None, timeout: typing.Optional[typing.Union[float, datetime.timedelta]] = None, ) -> None: """LocatorAssertions.not_to_have_css @@ -14190,6 +14191,8 @@ def not_to_have_css( CSS property name. value : Union[Pattern[str], str] CSS property value. + pseudo : Union["after", "before", None] + Pseudo-element to read computed styles from. timeout : Union[float, None] Time to retry the assertion for in milliseconds. Defaults to `5000`. """ @@ -14197,7 +14200,7 @@ def not_to_have_css( self._sync( self._impl_obj.not_to_have_css( - name=name, value=value, timeout=to_milliseconds(timeout) + name=name, value=value, pseudo=pseudo, timeout=to_milliseconds(timeout) ) ) diff --git a/tests/async/test_assertions.py b/tests/async/test_assertions.py index 9c31b12af..381b1e7dd 100644 --- a/tests/async/test_assertions.py +++ b/tests/async/test_assertions.py @@ -197,6 +197,20 @@ async def test_assertions_locator_to_have_css(page: Page, server: Server) -> Non "color", "rgb(42, 42, 42)", timeout=100 ) + await page.set_content( + "
kek
" + ) + await expect(page.locator("div.foobar")).to_have_css( + "color", "rgb(234, 74, 90)", pseudo="before" + ) + await expect(page.locator("div.foobar")).not_to_have_css( + "color", "rgb(42, 42, 42)", pseudo="before", timeout=100 + ) + with pytest.raises(AssertionError): + await expect(page.locator("div.foobar")).not_to_have_css( + "color", "rgb(234, 74, 90)", pseudo="before", timeout=100 + ) + async def test_assertions_locator_to_have_id(page: Page, server: Server) -> None: await page.goto(server.EMPTY_PAGE) diff --git a/tests/sync/test_assertions.py b/tests/sync/test_assertions.py index 90cf5a3be..d2eb15b6f 100644 --- a/tests/sync/test_assertions.py +++ b/tests/sync/test_assertions.py @@ -180,6 +180,20 @@ def test_assertions_locator_to_have_css(page: Page, server: Server) -> None: "color", "rgb(42, 42, 42)", timeout=100 ) + page.set_content( + "
kek
" + ) + expect(page.locator("div.foobar")).to_have_css( + "color", "rgb(234, 74, 90)", pseudo="before" + ) + expect(page.locator("div.foobar")).not_to_have_css( + "color", "rgb(42, 42, 42)", pseudo="before", timeout=100 + ) + with pytest.raises(AssertionError): + expect(page.locator("div.foobar")).not_to_have_css( + "color", "rgb(234, 74, 90)", pseudo="before", timeout=100 + ) + def test_assertions_locator_to_have_id(page: Page, server: Server) -> None: page.goto(server.EMPTY_PAGE)