Skip to content

Commit 954730d

Browse files
authored
chore: throw early error selector name clash (#36469)
1 parent cdd1f75 commit 954730d

File tree

2 files changed

+8
-0
lines changed

2 files changed

+8
-0
lines changed

packages/playwright-core/src/client/selectors.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ export class Selectors implements api.Selectors {
3434
}
3535

3636
async register(name: string, script: string | (() => SelectorEngine) | { path?: string, content?: string }, options: { contentScript?: boolean } = {}): Promise<void> {
37+
if (this._selectorEngines.some(engine => engine.name === name))
38+
throw new Error(`selectors.register: "${name}" selector engine has been already registered`);
39+
3740
const source = await evaluationScript(this._platform, script, undefined, false);
3841
const selectorEngine: channels.SelectorEngine = { ...options, name, source };
3942
for (const context of this._contextsForSelectors)

tests/library/selectors-register.spec.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,11 @@ it('should handle errors', async ({ playwright, browser }) => {
145145
await page.close();
146146
});
147147

148+
it('should throw "already registered" error when registering', { annotation: { type: 'issue', description: 'https://github.com/microsoft/playwright/issues/36467' } }, async ({ playwright }) => {
149+
await playwright.selectors.register('alreadyRegistered', createTagSelector);
150+
await expect(playwright.selectors.register('alreadyRegistered', createTagSelector)).rejects.toThrowError('selectors.register: "alreadyRegistered" selector engine has been already registered');
151+
});
152+
148153
it('should not rely on engines working from the root', async ({ playwright, browser }) => {
149154
const page = await browser.newPage();
150155
const createValueEngine = () => ({

0 commit comments

Comments
 (0)