diff --git a/packages/playwright-core/src/server/injected/consoleApi.ts b/packages/playwright-core/src/server/injected/consoleApi.ts index b8767ad086..4059c64709 100644 --- a/packages/playwright-core/src/server/injected/consoleApi.ts +++ b/packages/playwright-core/src/server/injected/consoleApi.ts @@ -53,21 +53,13 @@ class Locator { self.getByText = (text: string | RegExp, options?: { exact?: boolean }): Locator => self.locator(getByTextSelector(text, options)); self.getByTitle = (text: string | RegExp, options?: { exact?: boolean }): Locator => self.locator(getByTitleSelector(text, options)); self.getByRole = (role: string, options: ByRoleOptions = {}): Locator => self.locator(getByRoleSelector(role, options)); + self.filter = (options?: { hasText?: string | RegExp, has?: Locator }): Locator => new Locator(injectedScript, selector, options); } } -type ConsoleAPIInterface = { - $: (selector: string) => void; - $$: (selector: string) => void; - inspect: (selector: string) => void; - selector: (element: Element) => void; - generateLocator: (element: Element, language?: Language) => void; - resume: () => void; -}; - declare global { interface Window { - playwright?: ConsoleAPIInterface; + playwright?: any; inspect: (element: Element | undefined) => void; __pw_resume: () => Promise; } @@ -89,6 +81,7 @@ class ConsoleAPI { resume: () => this._resume(), ...new Locator(injectedScript, ''), }; + delete window.playwright.filter; } private _querySelector(selector: string, strict: boolean): (Element | undefined) { diff --git a/tests/library/inspector/console-api.spec.ts b/tests/library/inspector/console-api.spec.ts index b065eb9fba..8d1bde91a3 100644 --- a/tests/library/inspector/console-api.spec.ts +++ b/tests/library/inspector/console-api.spec.ts @@ -66,3 +66,10 @@ it('should support playwright.locator({ has })', async ({ page }) => { expect(await page.evaluate(`playwright.locator('div', { has: playwright.locator('span') }).element.innerHTML`)).toContain('Hello'); expect(await page.evaluate(`playwright.locator('div', { has: playwright.locator('text=Hello') }).element.innerHTML`)).toContain('span'); }); + +it('should support playwright.getBy*', async ({ page }) => { + await page.setContent('HelloWorld'); + expect(await page.evaluate(`playwright.getByText('hello').element.innerHTML`)).toContain('Hello'); + expect(await page.evaluate(`playwright.getByTitle('world').element.innerHTML`)).toContain('World'); + expect(await page.evaluate(`playwright.locator('span').filter({ hasText: 'hello' }).element.innerHTML`)).toContain('Hello'); +});