diff --git a/packages/playwright-core/src/server/selectors.ts b/packages/playwright-core/src/server/selectors.ts index 25d1a9a74bf61..f23590cbe46ef 100644 --- a/packages/playwright-core/src/server/selectors.ts +++ b/packages/playwright-core/src/server/selectors.ts @@ -92,7 +92,7 @@ export class Selectors { } async _queryCount(frame: frames.Frame, info: SelectorInfo, scope?: dom.ElementHandle): Promise { - const context = await frame._utilityContext(); + const context = await frame._context(info.world); const injectedScript = await context.injectedScript(); return await injectedScript.evaluate((injected, { parsed, scope }) => { return injected.querySelectorAll(parsed, scope || document).length; diff --git a/tests/page/selectors-vue.spec.ts b/tests/page/selectors-vue.spec.ts index 239632404aa53..eaa2edb63fcbe 100644 --- a/tests/page/selectors-vue.spec.ts +++ b/tests/page/selectors-vue.spec.ts @@ -30,10 +30,14 @@ for (const [name, url] of Object.entries(vues)) { it('should work with single-root elements @smoke', async ({ page }) => { expect(await page.$$eval(`_vue=book-list`, els => els.length)).toBe(1); + expect(await page.locator(`_vue=book-list`).count()).toBe(1); + await expect(page.locator(`_vue=book-list`)).toHaveCount(1); expect(await page.$$eval(`_vue=book-item`, els => els.length)).toBe(3); + expect(await page.locator(`_vue=book-item`).count()).toBe(3); + await expect(page.locator(`_vue=book-item`)).toHaveCount(3); expect(await page.$$eval(`_vue=book-list >> _vue=book-item`, els => els.length)).toBe(3); + expect(await page.locator(`_vue=book-list >> _vue=book-item`).count()).toBe(3); expect(await page.$$eval(`_vue=book-item >> _vue=book-list`, els => els.length)).toBe(0); - }); it('should work with multi-root elements (fragments)', async ({ page }) => {