{"record":{"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/1fa9837ec26533512fdcad8baebf249771bd340a/packages/browser/src/client/tester/context.ts#L443-L479","documentation":"page.elementLocator converts a DOM Element into a Vitest Locator. The default page stub throws because building a Locator requires provider-specific binding (Playwright/WebDriverIO wrap the element in their own locator handles). The stub is replaced when a full provider's plugin calls page.extend or overrides the method directly.","triggerScenarios":"Calling page.elementLocator(el) while provider is 'preview'; using convertToLocator (which delegates to page.elementLocator) under preview; calling expect(element).toBeVisible() style assertions that internally resolve via elementLocator.","commonSituations":"Passing a raw Element to a Locator-based API under the preview provider; mixing Locator and Element APIs without a full provider; default provider config.","solutions":["Switch test.browser.provider to 'playwright' or 'webdriverio' so elementLocator returns a real Locator.","Under preview, operate on the Element directly (e.g. assert on el.outerHTML or attributes) instead of converting to a Locator.","Avoid passing raw Elements into expect() chains that require Locators."],"exampleFix":"// before\nconst loc = page.elementLocator(myEl)  // preview throws\n// after (switch provider)\n// test.browser.provider = 'playwright'\nconst loc = page.elementLocator(myEl)","handlingStrategy":"validation","validationCode":"if (getBrowserState().provider === 'preview') {\n  // operate on the Element directly instead of converting to a Locator\n} else {\n  page.elementLocator(myEl)\n}","typeGuard":"function supportsLocators(): boolean {\n  return ['playwright', 'webdriverio'].includes(getBrowserState().provider ?? '')\n}","tryCatchPattern":null,"preventionTips":["Configure a full provider before using elementLocator.","Avoid passing raw Elements into Locator-based assertion chains under preview.","Document which assertions require Locators."],"tags":["browser","locators","provider","preview"],"backgroundTag":null,"analyzedSha":"1fa9837ec26533512fdcad8baebf249771bd340a","analyzedAt":"2026-08-11T16:11:39.638Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}