@@ -5,13 +5,28 @@ import { toHaveTitle } from '../../../src/matchers/browser/toHaveTitle'
55const beforeAssertion = vi . fn ( )
66const afterAssertion = vi . fn ( )
77
8+ const browserA = { getTitle : vi . fn ( ) . mockResolvedValue ( 'browserA Title' ) } as unknown as WebdriverIO . Browser
9+ const browserB = { getTitle : vi . fn ( ) . mockResolvedValue ( 'browserB Title' ) } as unknown as WebdriverIO . Browser
10+ const multiRemoteBrowserInstances : Record < string , WebdriverIO . Browser > = {
11+ 'browserA' : browserA ,
12+ 'browserB' : browserB ,
13+ }
14+
815vi . mock ( '@wdio/globals' , ( ) => ( {
916 browser : {
1017 getTitle : vi . fn ( ) . mockResolvedValue ( '' ) ,
1118 } ,
1219 multiremotebrowser : {
1320 isMultiremote : true ,
1421 getTitle : vi . fn ( ) . mockResolvedValue ( [ '' ] ) ,
22+ instances : [ 'browserA' ] ,
23+ getInstance : ( name : string ) => {
24+ const instance = multiRemoteBrowserInstances [ name ]
25+ if ( ! instance ) {
26+ throw new Error ( `No such instance: ${ name } ` )
27+ }
28+ return instance
29+ }
1530 }
1631} ) )
1732
@@ -103,6 +118,9 @@ Received: "some Wrong Title text"`
103118 describe ( 'Multi Remote Browsers' , async ( ) => {
104119 beforeEach ( async ( ) => {
105120 multiremotebrowser . getTitle = vi . fn ( ) . mockResolvedValue ( [ goodTitle ] )
121+ multiremotebrowser . instances = [ 'browserA' ]
122+ browserA . getTitle = vi . fn ( ) . mockResolvedValue ( goodTitle )
123+ browserB . getTitle = vi . fn ( ) . mockResolvedValue ( goodTitle )
106124 } )
107125
108126 describe ( 'given default usage' , async ( ) => {
@@ -113,11 +131,11 @@ Received: "some Wrong Title text"`
113131 } )
114132
115133 test ( 'when failure' , async ( ) => {
116- multiremotebrowser . getTitle = vi . fn ( ) . mockResolvedValue ( [ wrongTitle ] )
134+ browserA . getTitle = vi . fn ( ) . mockResolvedValue ( wrongTitle )
117135 const result = await defaultContext . toHaveTitle ( multiremotebrowser , goodTitle )
118136
119137 expect ( result . pass ) . toBe ( false )
120- expect ( result . message ( ) ) . toEqual ( `Expect window to have title
138+ expect ( result . message ( ) ) . toEqual ( `Expect window to have title for remote "browserA"
121139
122140Expected: "some Title text"
123141Received: "some Wrong Title text"`
@@ -126,6 +144,11 @@ Received: "some Wrong Title text"`
126144 } )
127145
128146 describe ( 'given multiple remote browsers' , async ( ) => {
147+ beforeEach ( async ( ) => {
148+ multiremotebrowser . instances = [ 'browserA' , 'browserB' ]
149+ browserA . getTitle = vi . fn ( ) . mockResolvedValue ( goodTitle )
150+ browserB . getTitle = vi . fn ( ) . mockResolvedValue ( goodTitle )
151+ } )
129152
130153 describe ( 'given one expected value' , async ( ) => {
131154 const goodTitles = [ goodTitle , goodTitle ]
@@ -139,29 +162,42 @@ Received: "some Wrong Title text"`
139162 expect ( result . pass ) . toBe ( true )
140163 } )
141164
142- test ( 'when failure for one browser' , async ( ) => {
143- multiremotebrowser . getTitle = vi . fn ( ) . mockResolvedValue ( [ wrongTitle , goodTitle ] )
165+ test ( 'when failure for browserA' , async ( ) => {
166+ browserA . getTitle = vi . fn ( ) . mockResolvedValue ( wrongTitle )
167+ const result = await defaultContext . toHaveTitle ( multiremotebrowser , goodTitle )
168+
169+ expect ( result . pass ) . toBe ( false )
170+ expect ( result . message ( ) ) . toEqual ( `Expect window to have title for remote "browserA"
171+
172+ Expected: "some Title text"
173+ Received: "some Wrong Title text"`
174+ )
175+ } )
176+
177+ test ( 'when failure for browserB' , async ( ) => {
178+ browserB . getTitle = vi . fn ( ) . mockResolvedValue ( wrongTitle )
144179 const result = await defaultContext . toHaveTitle ( multiremotebrowser , goodTitle )
145180
146181 expect ( result . pass ) . toBe ( false )
147- expect ( result . message ( ) ) . toEqual ( `Expect window to have title
182+ expect ( result . message ( ) ) . toEqual ( `Expect window to have title for remote "browserB"
148183
149184Expected: "some Title text"
150185Received: "some Wrong Title text"`
151186 )
152187 } )
153188
154189 test ( 'when failure for multiple browsers' , async ( ) => {
155- multiremotebrowser . getTitle = vi . fn ( ) . mockResolvedValue ( [ wrongTitle , wrongTitle ] )
190+ browserA . getTitle = vi . fn ( ) . mockResolvedValue ( wrongTitle )
191+ browserB . getTitle = vi . fn ( ) . mockResolvedValue ( wrongTitle )
156192 const result = await defaultContext . toHaveTitle ( multiremotebrowser , goodTitle )
157193
158194 expect ( result . pass ) . toBe ( false )
159- expect ( result . message ( ) ) . toEqual ( `Expect window to have title
195+ expect ( result . message ( ) ) . toEqual ( `Expect window to have title for remote "browserA"
160196
161197Expected: "some Title text"
162198Received: "some Wrong Title text"
163199
164- Expect window to have title
200+ Expect window to have title for remote "browserB"
165201
166202Expected: "some Title text"
167203Received: "some Wrong Title text"`
@@ -196,15 +232,15 @@ Received: "some Wrong Title text"`
196232 } )
197233
198234 test ( 'when failure' , async ( ) => {
199- multiremotebrowser . getTitle = vi . fn ( ) . mockResolvedValue ( [ wrongTitle ] )
235+ browserA . getTitle = vi . fn ( ) . mockResolvedValue ( wrongTitle )
200236 const result = await defaultContext . toHaveTitle (
201237 multiremotebrowser ,
202238 goodTitle ,
203239 options ,
204240 )
205241
206242 expect ( result . pass ) . toBe ( false )
207- expect ( result . message ( ) ) . toEqual ( `Expect window to have title
243+ expect ( result . message ( ) ) . toEqual ( `Expect window to have title for remote "browserA"
208244
209245Expected: "some title text"
210246Received: "some wrong title text"`
@@ -226,11 +262,12 @@ Received: "some wrong title text"`
226262
227263 describe ( 'given multiple expected values' , async ( ) => {
228264 const goodTitle2 = `${ goodTitle } 2`
229- const goodTitles = [ goodTitle , goodTitle2 ]
265+ // const goodTitles = [goodTitle, goodTitle2]
230266 const expectedValues = [ goodTitle , goodTitle2 ]
231267
232268 beforeEach ( async ( ) => {
233- multiremotebrowser . getTitle = vi . fn ( ) . mockResolvedValue ( goodTitles )
269+ browserA . getTitle = vi . fn ( ) . mockResolvedValue ( goodTitle )
270+ browserB . getTitle = vi . fn ( ) . mockResolvedValue ( goodTitle2 )
234271 } )
235272
236273 test ( 'when success' , async ( ) => {
@@ -240,28 +277,31 @@ Received: "some wrong title text"`
240277 } )
241278
242279 test ( 'when failure for one browser' , async ( ) => {
243- multiremotebrowser . getTitle = vi . fn ( ) . mockResolvedValue ( [ wrongTitle , goodTitle2 ] )
280+ browserA . getTitle = vi . fn ( ) . mockResolvedValue ( wrongTitle )
281+
244282 const result = await defaultContext . toHaveTitle ( multiremotebrowser , expectedValues )
245283
246284 expect ( result . pass ) . toBe ( false )
247- expect ( result . message ( ) ) . toEqual ( `Expect window to have title
285+ expect ( result . message ( ) ) . toEqual ( `Expect window to have title for remote "browserA"
248286
249287Expected: "some Title text"
250288Received: "some Wrong Title text"`
251289 )
252290 } )
253291
254292 test ( 'when failure for multiple browsers' , async ( ) => {
255- multiremotebrowser . getTitle = vi . fn ( ) . mockResolvedValue ( [ wrongTitle , wrongTitle ] )
293+ browserA . getTitle = vi . fn ( ) . mockResolvedValue ( wrongTitle )
294+ browserB . getTitle = vi . fn ( ) . mockResolvedValue ( wrongTitle )
295+
256296 const result = await defaultContext . toHaveTitle ( multiremotebrowser , expectedValues )
257297
258298 expect ( result . pass ) . toBe ( false )
259- expect ( result . message ( ) ) . toEqual ( `Expect window to have title
299+ expect ( result . message ( ) ) . toEqual ( `Expect window to have title for remote "browserA"
260300
261301Expected: "some Title text"
262302Received: "some Wrong Title text"
263303
264- Expect window to have title
304+ Expect window to have title for remote "browserB"
265305
266306Expected: "some Title text 2"
267307Received: "some Wrong Title text"`
@@ -296,20 +336,22 @@ Received: "some Wrong Title text"`
296336 } )
297337
298338 test ( 'when failure' , async ( ) => {
299- multiremotebrowser . getTitle = vi . fn ( ) . mockResolvedValue ( [ wrongTitle , wrongTitle ] )
339+ browserA . getTitle = vi . fn ( ) . mockResolvedValue ( wrongTitle )
340+ browserB . getTitle = vi . fn ( ) . mockResolvedValue ( wrongTitle )
341+
300342 const result = await defaultContext . toHaveTitle (
301343 multiremotebrowser ,
302344 expectedValues ,
303345 options ,
304346 )
305347
306348 expect ( result . pass ) . toBe ( false )
307- expect ( result . message ( ) ) . toEqual ( `Expect window to have title
349+ expect ( result . message ( ) ) . toEqual ( `Expect window to have title for remote "browserA"
308350
309351Expected: "some title text"
310352Received: "some wrong title text"
311353
312- Expect window to have title
354+ Expect window to have title for remote "browserB"
313355
314356Expected: "some title text 2"
315357Received: "some wrong title text"`
@@ -416,7 +458,7 @@ Received : "some Title text not expected to be"`
416458 } )
417459 } )
418460
419- describe ( 'Multi Remote Browsers' , async ( ) => {
461+ describe . skip ( 'Multi Remote Browsers' , async ( ) => {
420462 beforeEach ( async ( ) => {
421463 multiremotebrowser . getTitle = vi . fn ( ) . mockResolvedValue ( [ aTitle ] )
422464 } )
0 commit comments