{"id":"00a6f19a556b976a","repo":"vitest-dev/vitest","slug":"method-elementlocator-is-not-supported-by-the","errorCode":null,"errorMessage":"Method \"elementLocator\" is not supported by the \"${provider}\" provider.","messagePattern":"Method \"elementLocator\" is not supported by the \"(.+?)\" provider\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/browser/src/client/tester/context.ts","lineNumber":461,"sourceCode":"    throw new Error(`Method \"getByLabelText\" is not supported by the \"${provider}\" provider.`)\n  },\n  getByTestId() {\n    throw new Error(`Method \"getByTestId\" is not supported by the \"${provider}\" provider.`)\n  },\n  getByAltText() {\n    throw new Error(`Method \"getByAltText\" is not supported by the \"${provider}\" provider.`)\n  },\n  getByPlaceholder() {\n    throw new Error(`Method \"getByPlaceholder\" is not supported by the \"${provider}\" provider.`)\n  },\n  getByText() {\n    throw new Error(`Method \"getByText\" is not supported by the \"${provider}\" provider.`)\n  },\n  getByTitle() {\n    throw new Error(`Method \"getByTitle\" is not supported by the \"${provider}\" provider.`)\n  },\n  elementLocator() {\n    throw new Error(`Method \"elementLocator\" is not supported by the \"${provider}\" provider.`)\n  },\n  frameLocator() {\n    throw new Error(`Method \"frameLocator\" is not supported by the \"${provider}\" provider.`)\n  },\n  extend(methods) {\n    for (const key in methods) {\n      (page as any)[key] = (methods as any)[key].bind(page)\n    }\n    return page\n  },\n}\n\nfunction convertToLocator(element: Element | Locator): Locator {\n  if (element instanceof Element) {\n    return page.elementLocator(element)\n  }\n  return element\n}","sourceCodeStart":443,"sourceCodeEnd":479,"githubUrl":"https://github.com/vitest-dev/vitest/blob/d568f8ce3739b532d5bf2c1ee1e45e8a8a473d09/packages/browser/src/client/tester/context.ts#L443-L479","documentation":"page.elementLocator is a throwing stub (packages/browser/src/client/tester/context.ts:460-461). It is meant to be implemented per provider/locator setup; getElementLocatorSelectors (context.ts:511-512) and convertToLocator (context.ts:474-478) both call page.elementLocator, so it must be wired up before locators work. If no locator provider registered an implementation, calling it throws.","triggerScenarios":"Calling page.elementLocator(element) when the locator provider has not initialized elementLocator (e.g. a custom/minimal provider setup, or calling before locators module has loaded).","commonSituations":"Custom browser provider that doesn't implement the locator protocol; calling page.elementLocator during very early module init before the locators module (locators.ts) has patched page.","solutions":["Ensure the standard locators module is imported (it registers elementLocator via the provider) — use the default vitest/browser entry, not a stripped custom one.","If using a custom provider, implement elementLocator on page (return a Locator wrapping the element) before any locator calls.","Register via browser.locators.extend or set page.elementLocator explicitly in setup."],"exampleFix":"// before — custom provider never wires elementLocator\nconst loc = page.elementLocator(document.body)\n// after — register the implementation (default providers do this for you)\nbrowser.locators.extend({\n  elementLocator: (el: Element) => page.locator(convertElementToCssSelector(el)),\n})","handlingStrategy":"validation","validationCode":"// Ensure the standard locators module is loaded (default vitest/browser entry).\n// If using a custom provider, register elementLocator once during setup:\nimport { browser, page } from 'vitest/browser'\nimport { convertElementToCssSelector } from 'vitest/browser'\nif (typeof (page as any).elementLocator !== 'function' || (page as any).elementLocator.__stub) {\n  browser.locators.extend({\n    elementLocator: (el: Element) => page.locator(convertElementToCssSelector(el)),\n  })\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Use the default vitest/browser entry so the locator provider initializes elementLocator.","Custom providers must implement elementLocator before any locator query runs."],"tags":["browser","locators","elementlocator","page","unsupported"],"analyzedSha":"d568f8ce3739b532d5bf2c1ee1e45e8a8a473d09","analyzedAt":"2026-08-03T20:23:56.861Z","schemaVersion":2}