Skip to content

Commit 7fd93de

Browse files
committed
Add UTs for ElementArray and Element[]
1 parent b3d38db commit 7fd93de

File tree

2 files changed

+97
-31
lines changed

2 files changed

+97
-31
lines changed

src/util/formatMessage.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,16 @@ export const getSelector = (el: WebdriverIO.Element | WebdriverIO.ElementArray)
1717
return result
1818
}
1919

20-
export const getSelectors = (el: WebdriverIO.Element | WdioElements) => {
20+
export const getSelectors = (el: WebdriverIO.Element | WdioElements): string => {
21+
2122
const selectors = []
23+
if (Array.isArray(el)) {
24+
for (const element of el) {
25+
selectors.push(getSelectors(element))
26+
}
27+
return selectors.join(', ')
28+
}
29+
2230
let parent: WebdriverIO.ElementArray['parent'] | undefined
2331

2432
if (isElementArray(el)) {

test/matchers/element/toBeDisplayed.test.ts

Lines changed: 88 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -401,47 +401,105 @@ Expected: "displayed"
401401
Received: "not displayed"`)
402402
})
403403

404-
test('success with ElementArray', async () => {
405-
const elementsArray: WebdriverIO.ElementArray = await $$('sel').getElements()
406-
const result = await toBeDisplayed.call({}, elementsArray)
404+
describe('fails with ElementArray', () => {
405+
let elementsArray: WebdriverIO.ElementArray
406+
407+
beforeEach(async () => {
408+
elementsArray = await $$('sel').getElements()
409+
for (const el of elementsArray) {
410+
el.isDisplayed = vi.fn().mockResolvedValue(true)
411+
}
412+
expect(elementsArray).toHaveLength(2)
413+
})
407414

408-
for (const el of elementsArray) {
409-
expect(el.isDisplayed).toHaveBeenCalledWith(
410-
{
411-
withinViewport: false,
412-
contentVisibilityAuto: true,
413-
opacityProperty: true,
414-
visibilityProperty: true
415+
test('success with ElementArray', async () => {
416+
const result = await toBeDisplayed.call({}, elementsArray)
417+
418+
for (const el of elementsArray) {
419+
expect(el.isDisplayed).toHaveBeenCalledWith(
420+
{
421+
withinViewport: false,
422+
contentVisibilityAuto: true,
423+
opacityProperty: true,
424+
visibilityProperty: true
425+
}
426+
)
427+
}
428+
429+
expect(result.pass).toBe(true)
430+
})
431+
432+
test('fails with ElementArray', async () => {
433+
elementsArray[1].isDisplayed = vi.fn().mockResolvedValue(false)
434+
435+
const result = await toBeDisplayed.call({}, elementsArray)
436+
437+
for (const el of elementsArray) {
438+
expect(el.isDisplayed).toHaveBeenCalledWith(
439+
{
440+
withinViewport: false,
441+
contentVisibilityAuto: true,
442+
opacityProperty: true,
443+
visibilityProperty: true
444+
}
445+
)
446+
}
447+
448+
expect(result.pass).toBe(false)
449+
expect(result.message()).toEqual(`\
450+
Expect $$(\`sel, <props>\`) to be displayed
451+
452+
Expected: "displayed"
453+
Received: "not displayed"`)
454+
})
455+
456+
describe('fails with Element[] (filtered elements)', () => {
457+
let filteredElements: WebdriverIO.Element[]
458+
test('success with Element[]', async () => {
459+
filteredElements = await elementsArray.filter((element) => element.isExisting())
460+
461+
const result = await toBeDisplayed.call({}, filteredElements)
462+
463+
for (const el of filteredElements) {
464+
expect(el.isDisplayed).toHaveBeenCalledWith(
465+
{
466+
withinViewport: false,
467+
contentVisibilityAuto: true,
468+
opacityProperty: true,
469+
visibilityProperty: true
470+
}
471+
)
415472
}
416-
)
417-
}
418473

419-
expect(result.pass).toBe(true)
420-
})
474+
expect(result.pass).toBe(true)
475+
})
421476

422-
test('fails with ElementArray', async () => {
423-
const elementsArray: WebdriverIO.ElementArray = await $$('sel').getElements()
424-
elementsArray[1].isDisplayed = vi.fn().mockResolvedValue(false)
477+
test('fails with Element[]', async () => {
478+
filteredElements = await elementsArray.filter((element) => element.isExisting())
425479

426-
const result = await toBeDisplayed.call({}, elementsArray)
480+
filteredElements[1].isDisplayed = vi.fn().mockResolvedValue(false)
427481

428-
for (const el of elementsArray) {
429-
expect(el.isDisplayed).toHaveBeenCalledWith(
430-
{
431-
withinViewport: false,
432-
contentVisibilityAuto: true,
433-
opacityProperty: true,
434-
visibilityProperty: true
482+
const result = await toBeDisplayed.call({}, filteredElements)
483+
484+
for (const el of filteredElements) {
485+
expect(el.isDisplayed).toHaveBeenCalledWith(
486+
{
487+
withinViewport: false,
488+
contentVisibilityAuto: true,
489+
opacityProperty: true,
490+
visibilityProperty: true
491+
}
492+
)
435493
}
436-
)
437-
}
438494

439-
expect(result.pass).toBe(false)
440-
expect(result.message()).toEqual(`\
441-
Expect $$(\`sel, <props>\`) to be displayed
495+
expect(result.pass).toBe(false)
496+
expect(result.message()).toEqual(`\
497+
Expect $(\`sel\`), $$(\`sel\`)[1] to be displayed
442498
443499
Expected: "displayed"
444500
Received: "not displayed"`)
501+
})
502+
})
445503
})
446504
})
447505
})

0 commit comments

Comments
 (0)