feat(console api): support locator.filter (#19389)

This commit is contained in:
Dmitry Gozman 2022-12-09 15:25:12 -08:00 committed by GitHub
parent 256e9fd443
commit 3c17a2603a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 10 additions and 10 deletions

View File

@ -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<void>;
}
@ -89,6 +81,7 @@ class ConsoleAPI {
resume: () => this._resume(),
...new Locator(injectedScript, ''),
};
delete window.playwright.filter;
}
private _querySelector(selector: string, strict: boolean): (Element | undefined) {

View File

@ -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('<span>Hello</span><span title="world">World</span>');
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');
});