diff --git a/src/common/FrameManager.ts b/src/common/FrameManager.ts index 02d76a68612..8c96832d569 100644 --- a/src/common/FrameManager.ts +++ b/src/common/FrameManager.ts @@ -43,6 +43,7 @@ import { } from './EvalTypes.js'; const UTILITY_WORLD_NAME = '__puppeteer_utility_world__'; +const xPathPattern = /^\(\/\/[^\)]+\)|^\/\//; /** * We use symbols to prevent external parties listening to these events. @@ -1068,16 +1069,13 @@ export class Frame { options: Record = {}, ...args: SerializableOrJSHandle[] ): Promise { - const xPathPattern = '//'; - console.warn( 'waitFor is deprecated and will be removed in a future release. See https://github.com/puppeteer/puppeteer/issues/6214 for details and how to migrate your code.' ); if (helper.isString(selectorOrFunctionOrTimeout)) { const string = selectorOrFunctionOrTimeout; - if (string.startsWith(xPathPattern)) - return this.waitForXPath(string, options); + if (xPathPattern.test(string)) return this.waitForXPath(string, options); return this.waitForSelector(string, options); } if (helper.isNumber(selectorOrFunctionOrTimeout)) diff --git a/test/waittask.spec.ts b/test/waittask.spec.ts index ee76bbb64d5..bce546adbb4 100644 --- a/test/waittask.spec.ts +++ b/test/waittask.spec.ts @@ -58,6 +58,18 @@ describe('waittask specs', function () { await waitFor; expect(found).toBe(true); }); + it('should allow you to select an element with parenthesis-starting xpath', async () => { + const { page, server } = getTestState(); + let found = false; + const waitFor = page.waitFor('(//img)[200]').then(() => { + found = true; + }); + await page.goto(server.EMPTY_PAGE); + expect(found).toBe(false); + await page.goto(server.PREFIX + '/grid.html'); + await waitFor; + expect(found).toBe(true); + }); it('should not allow you to select an element with single slash xpath', async () => { const { page } = getTestState();