···1414import type { Locator as LocatorAPI } from './locators/index'
1515import { getElementLocatorSelectors } from '@vitest/browser/utils'
1616import { ensureAwaited, getBrowserState, getWorkerState } from '../utils'
1717-import { convertElementToCssSelector, processTimeoutOptions } from './utils'
1717+import { convertToSelector, processTimeoutOptions } from './utils'
18181919// this file should not import anything directly, only types and utils
2020···292292 const name
293293 = options.path || `${taskName.replace(/[^a-z0-9]/gi, '-')}-${number}.png`
294294295295+ const normalizedOptions = 'mask' in options
296296+ ? {
297297+ ...options,
298298+ mask: (options.mask as Array<Element | Locator>).map(convertToSelector),
299299+ }
300300+ : options
301301+295302 return ensureAwaited(error => triggerCommand(
296303 '__vitest_screenshot',
297304 [
298305 name,
299306 processTimeoutOptions({
300300- ...options,
307307+ ...normalizedOptions,
301308 element: options.element
302309 ? convertToSelector(options.element)
303310 : undefined,
···346353 return page.elementLocator(element)
347354 }
348355 return element
349349-}
350350-351351-function convertToSelector(elementOrLocator: Element | Locator): string {
352352- if (!elementOrLocator) {
353353- throw new Error('Expected element or locator to be defined.')
354354- }
355355- if (elementOrLocator instanceof Element) {
356356- return convertElementToCssSelector(elementOrLocator)
357357- }
358358- if ('selector' in elementOrLocator) {
359359- return (elementOrLocator as any).selector
360360- }
361361- throw new Error('Expected element or locator to be an instance of Element or Locator.')
362356}
363357364358function getTaskFullName(task: RunnerTask): string {
+14
packages/browser/src/client/tester/utils.ts
···11+import type { Locator } from '@vitest/browser/context'
12import type { BrowserRPC } from '../client'
23import { getBrowserState, getWorkerState } from '../utils'
34···196197 return escapeRegexForSelector(text)
197198 }
198199 return `${JSON.stringify(text)}${exact ? 's' : 'i'}`
200200+}
201201+202202+export function convertToSelector(elementOrLocator: Element | Locator): string {
203203+ if (!elementOrLocator) {
204204+ throw new Error('Expected element or locator to be defined.')
205205+ }
206206+ if (elementOrLocator instanceof Element) {
207207+ return convertElementToCssSelector(elementOrLocator)
208208+ }
209209+ if ('selector' in elementOrLocator) {
210210+ return (elementOrLocator as any).selector
211211+ }
212212+ throw new Error('Expected element or locator to be an instance of Element or Locator.')
199213}