diff --git a/src/server/common/selectorParser.ts b/src/server/common/selectorParser.ts index d25b78bc00..a238f74a2f 100644 --- a/src/server/common/selectorParser.ts +++ b/src/server/common/selectorParser.ts @@ -26,28 +26,21 @@ export type ParsedSelector = { capture?: number, }; -export function selectorsV2Enabled() { - return true; -} - const customCSSNames = new Set(['not', 'is', 'where', 'has', 'scope', 'light', 'visible', 'text', 'text-matches', 'text-is']); export function parseSelector(selector: string): ParsedSelector { const result = parseSelectorV1(selector); - - if (selectorsV2Enabled()) { - result.parts = result.parts.map(part => { - if (Array.isArray(part)) - return part; - if (part.name === 'css' || part.name === 'css:light') { - if (part.name === 'css:light') - part.body = ':light(' + part.body + ')'; - const parsedCSS = parseCSS(part.body, customCSSNames); - return parsedCSS.selector; - } + result.parts = result.parts.map(part => { + if (Array.isArray(part)) return part; - }); - } + if (part.name === 'css' || part.name === 'css:light') { + if (part.name === 'css:light') + part.body = ':light(' + part.body + ')'; + const parsedCSS = parseCSS(part.body, customCSSNames); + return parsedCSS.selector; + } + return part; + }); return { parts: result.parts, capture: result.capture, diff --git a/test/queryselector.spec.ts b/test/queryselector.spec.ts index 1b829cc7b8..a5fb19035c 100644 --- a/test/queryselector.spec.ts +++ b/test/queryselector.spec.ts @@ -16,7 +16,6 @@ */ import { it, expect } from './fixtures'; -import { selectorsV2Enabled } from '../src/server/common/selectorParser'; it('should throw for non-string selector', async ({page}) => { const error = await page.$(null).catch(e => e); @@ -59,8 +58,6 @@ it('should auto-detect xpath selector with starting parenthesis', async ({page, }); it('should auto-detect xpath selector starting with ..', async ({page, server}) => { - if (selectorsV2Enabled()) - return; // Selectors v2 do not support this. await page.setContent('
test
'); const span = await page.$('"test" >> ../span'); expect(await span.evaluate(e => e.nodeName)).toBe('SPAN'); diff --git a/test/selectors-css.spec.ts b/test/selectors-css.spec.ts index 97274013f5..f79df3dd4f 100644 --- a/test/selectors-css.spec.ts +++ b/test/selectors-css.spec.ts @@ -16,7 +16,6 @@ */ import { it, expect } from './fixtures'; -import { selectorsV2Enabled } from '../src/server/common/selectorParser'; it('should work with large DOM', async ({page, server}) => { await page.evaluate(() => { @@ -240,7 +239,7 @@ it('should work with *', async ({page}) => { expect(await body.$$eval('div *', els => els.length)).toBe(2); // Selectors v2 matches jquery in the sense that matching starts with the element scope, // not the document scope. - expect(await body.$$eval('* > *', els => els.length)).toBe(selectorsV2Enabled() ? 2 : 4); + expect(await body.$$eval('* > *', els => els.length)).toBe(2); // Adding scope makes querySelectorAll work like jquery. expect(await body.$$eval(':scope * > *', els => els.length)).toBe(2); // Note that the following two selectors are following jquery logic even @@ -310,18 +309,13 @@ it('should work with +', async ({page}) => { expect(await page.$$eval(`css=div + #div1`, els => els.length)).toBe(0); expect(await page.$$eval(`css=section > div + div ~ div`, els => els.length)).toBe(4); expect(await page.$$eval(`css=section > div + #div4 ~ div`, els => els.length)).toBe(2); - if (selectorsV2Enabled()) { - // Selectors v1 do not support this. - expect(await page.$$eval(`css=section:has(:scope > div + #div2)`, els => els.length)).toBe(1); - expect(await page.$$eval(`css=section:has(:scope > div + #div1)`, els => els.length)).toBe(0); - } + expect(await page.$$eval(`css=section:has(:scope > div + #div2)`, els => els.length)).toBe(1); + expect(await page.$$eval(`css=section:has(:scope > div + #div1)`, els => els.length)).toBe(0); // TODO: the following does not work. Should it? // expect(await page.$eval(`css=div:has(:scope + #div5)`, e => e.id)).toBe('div4'); }); it('should work with spaces in :nth-child and :not', async ({page, server}) => { - if (!selectorsV2Enabled()) - return; // Selectors v1 do not support this. await page.goto(server.PREFIX + '/deep-shadow.html'); expect(await page.$$eval(`css=span:nth-child(23n +2)`, els => els.length)).toBe(1); expect(await page.$$eval(`css=span:nth-child(23n+ 2)`, els => els.length)).toBe(1); @@ -336,8 +330,6 @@ it('should work with spaces in :nth-child and :not', async ({page, server}) => { }); it('should work with :is', async ({page, server}) => { - if (!selectorsV2Enabled()) - return; // Selectors v1 do not support this. await page.goto(server.PREFIX + '/deep-shadow.html'); expect(await page.$$eval(`css=div:is(#root1)`, els => els.length)).toBe(1); expect(await page.$$eval(`css=div:is(#root1, #target)`, els => els.length)).toBe(1); @@ -352,8 +344,6 @@ it('should work with :is', async ({page, server}) => { }); it('should work with :has', async ({page, server}) => { - if (!selectorsV2Enabled()) - return; // Selectors v1 do not support this. await page.goto(server.PREFIX + '/deep-shadow.html'); expect(await page.$$eval(`css=div:has(#target)`, els => els.length)).toBe(2); expect(await page.$$eval(`css=div:has([data-testid=foo])`, els => els.length)).toBe(3); @@ -361,8 +351,6 @@ it('should work with :has', async ({page, server}) => { }); it('should work with :scope', async ({page, server}) => { - if (!selectorsV2Enabled()) - return; // Selectors v1 do not support this. await page.goto(server.PREFIX + '/deep-shadow.html'); // 'is' does not change the scope, so it remains 'html'. expect(await page.$$eval(`css=div:is(:scope#root1)`, els => els.length)).toBe(0); diff --git a/test/selectors-misc.spec.ts b/test/selectors-misc.spec.ts index 0dfc259f18..7a7f01a20a 100644 --- a/test/selectors-misc.spec.ts +++ b/test/selectors-misc.spec.ts @@ -16,7 +16,6 @@ */ import { it, expect } from './fixtures'; -import { selectorsV2Enabled } from '../src/server/common/selectorParser'; it('should work for open shadow roots', async ({page, server}) => { await page.goto(server.PREFIX + '/deep-shadow.html'); @@ -29,8 +28,6 @@ it('should work for open shadow roots', async ({page, server}) => { }); it('should work with :visible', async ({page}) => { - if (!selectorsV2Enabled()) - return; // Selectors v1 do not support this. await page.setContent(`
@@ -53,9 +50,6 @@ it('should work with :visible', async ({page}) => { it('should work with proximity selectors', test => { test.skip('Not ready yet'); }, async ({page}) => { - if (!selectorsV2Enabled()) - return; // Selectors v1 do not support this. - /* +--+ +--+ diff --git a/test/selectors-text.spec.ts b/test/selectors-text.spec.ts index 0938f42654..55f18632e2 100644 --- a/test/selectors-text.spec.ts +++ b/test/selectors-text.spec.ts @@ -16,7 +16,6 @@ */ import { it, expect } from './fixtures'; -import { selectorsV2Enabled } from '../src/server/common/selectorParser'; it('should work', async ({page}) => { await page.setContent(`
yo
ya
\nye
`); @@ -108,8 +107,6 @@ it('should work', async ({page}) => { }); it('should work in v2', async ({page}) => { - if (!selectorsV2Enabled()) - return; // Selectors v1 do not support this. await page.setContent(`
yo
ya
\nHELLO \n world
`); expect(await page.$eval(`:text("ya")`, e => e.outerHTML)).toBe('
ya
'); expect(await page.$eval(`:text-is("ya")`, e => e.outerHTML)).toBe('
ya
');