@@ -6,19 +6,39 @@ import type {
66 UserEventDragAndDropOptions ,
77 UserEventFillOptions ,
88} from '@vitest/browser/context'
9- import { page } from '@vitest/browser/context'
9+ import { page , server } from '@vitest/browser/context'
1010import type { BrowserRPC } from '@vitest/browser/client'
11+ import {
12+ Ivya ,
13+ type ParsedSelector ,
14+ asLocator ,
15+ getByAltTextSelector ,
16+ getByLabelSelector ,
17+ getByPlaceholderSelector ,
18+ getByRoleSelector ,
19+ getByTestIdSelector ,
20+ getByTextSelector ,
21+ getByTitleSelector ,
22+ } from 'ivya'
1123import type { WorkerGlobalState } from 'vitest'
1224import type { BrowserRunnerState } from '../../utils'
1325import { getBrowserState , getWorkerState } from '../../utils'
14- import { getByAltTextSelector , getByLabelSelector , getByPlaceholderSelector , getByRoleSelector , getByTestIdSelector , getByTextSelector , getByTitleSelector } from './playwright-selector/locatorUtils'
15- import type { ParsedSelector } from './playwright-selector/selectorParser'
16- import { parseSelector } from './playwright-selector/selectorParser'
17- import { PlaywrightSelector } from './playwright-selector/selector'
18- import { asLocator } from './playwright-selector/locatorGenerators'
1926
20- // we prefer using playwright locators because they are more powerful and support Shdow DOM
21- export const selectorEngine = new PlaywrightSelector ( )
27+ // we prefer using playwright locators because they are more powerful and support Shadow DOM
28+ export const selectorEngine = Ivya . create ( {
29+ browser : ( ( name : string ) => {
30+ switch ( name ) {
31+ case 'edge' :
32+ case 'chrome' :
33+ return 'chromium'
34+ case 'safari' :
35+ return 'webkit'
36+ default :
37+ return name as 'webkit' | 'firefox' | 'chromium'
38+ }
39+ } ) ( server . config . browser . name ) ,
40+ testIdAttribute : server . config . browser . locators . testIdAttribute ,
41+ } )
2242
2343export abstract class Locator {
2444 public abstract selector : string
@@ -110,7 +130,7 @@ export abstract class Locator {
110130 }
111131
112132 public getByTestId ( testId : string | RegExp ) : Locator {
113- return this . locator ( getByTestIdSelector ( page . config . browser . locators . testIdAttribute , testId ) )
133+ return this . locator ( getByTestIdSelector ( server . config . browser . locators . testIdAttribute , testId ) )
114134 }
115135
116136 public getByText ( text : string | RegExp , options ?: LocatorOptions ) : Locator {
@@ -125,7 +145,7 @@ export abstract class Locator {
125145 if ( this . _forceElement ) {
126146 return this . _forceElement
127147 }
128- const parsedSelector = this . _parsedSelector || ( this . _parsedSelector = parseSelector ( this . _pwSelector || this . selector ) )
148+ const parsedSelector = this . _parsedSelector || ( this . _parsedSelector = selectorEngine . parseSelector ( this . _pwSelector || this . selector ) )
129149 return selectorEngine . querySelector ( parsedSelector , document . body , true )
130150 }
131151
@@ -141,7 +161,7 @@ export abstract class Locator {
141161 if ( this . _forceElement ) {
142162 return [ this . _forceElement ]
143163 }
144- const parsedSelector = this . _parsedSelector || ( this . _parsedSelector = parseSelector ( this . _pwSelector || this . selector ) )
164+ const parsedSelector = this . _parsedSelector || ( this . _parsedSelector = selectorEngine . parseSelector ( this . _pwSelector || this . selector ) )
145165 return selectorEngine . querySelectorAll ( parsedSelector , document . body )
146166 }
147167
0 commit comments