cherry-pick(#12899): chore: make count() work with _vue selectors

This commit is contained in:
Pavel Feldman 2022-03-18 20:22:33 -08:00
parent 39abfd6481
commit ef40d21945
2 changed files with 6 additions and 2 deletions

View file

@ -92,7 +92,7 @@ export class Selectors {
} }
async _queryCount(frame: frames.Frame, info: SelectorInfo, scope?: dom.ElementHandle): Promise<number> { async _queryCount(frame: frames.Frame, info: SelectorInfo, scope?: dom.ElementHandle): Promise<number> {
const context = await frame._utilityContext(); const context = await frame._context(info.world);
const injectedScript = await context.injectedScript(); const injectedScript = await context.injectedScript();
return await injectedScript.evaluate((injected, { parsed, scope }) => { return await injectedScript.evaluate((injected, { parsed, scope }) => {
return injected.querySelectorAll(parsed, scope || document).length; return injected.querySelectorAll(parsed, scope || document).length;

View file

@ -30,10 +30,14 @@ for (const [name, url] of Object.entries(vues)) {
it('should work with single-root elements #smoke', async ({ page }) => { 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.$$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.$$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.$$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); 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 }) => { it('should work with multi-root elements (fragments)', async ({ page }) => {