diff --git a/packages/playwright-core/src/client/locator.ts b/packages/playwright-core/src/client/locator.ts index 217686f93b..e51804a17d 100644 --- a/packages/playwright-core/src/client/locator.ts +++ b/packages/playwright-core/src/client/locator.ts @@ -52,7 +52,7 @@ export class Locator implements api.Locator { } static getByTestIdSelector(testId: string): string { - return `css=[${Locator._testIdAttributeName}=${testId}]`; + return `css=[${Locator._testIdAttributeName}=${JSON.stringify(testId)}]`; } static getByTextSelector(text: string | RegExp, options?: { exact?: boolean }): string { diff --git a/tests/page/selectors-css.spec.ts b/tests/page/selectors-css.spec.ts index c9bf2915ef..f3ca8afbcc 100644 --- a/tests/page/selectors-css.spec.ts +++ b/tests/page/selectors-css.spec.ts @@ -420,3 +420,8 @@ it('getByTestId should work', async ({ page }) => { await expect(page.mainFrame().getByTestId('Hello')).toHaveText('Hello world'); await expect(page.get('div').getByTestId('Hello')).toHaveText('Hello world'); }); + +it('getByTestId should escape id', async ({ page }) => { + await page.setContent(`