Skip to content
This repository was archived by the owner on Aug 20, 2024. It is now read-only.

Commit baf54f7

Browse files
authored
Add promise support to selector matchers (#113)
1 parent e1f67df commit baf54f7

File tree

4 files changed

+31
-8
lines changed

4 files changed

+31
-8
lines changed

src/matchers/toHaveSelector/index.test.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,18 @@ describe("toHaveSelector", () => {
88
await page.setContent(`<div id="foobar">Bar</div>`)
99
await expect(page).toHaveSelector("#foobar")
1010
})
11+
it("positive in frame", async () => {
12+
await page.setContent(`<iframe src="https://example.com"></iframe>`)
13+
const selector = "a:text-is('More information...')"
14+
15+
const handle = page.$("iframe")
16+
await expect(handle).toHaveSelector(selector)
17+
await expect(await handle).toHaveSelector(selector)
18+
19+
const frame = (await handle)?.contentFrame()
20+
await expect(frame).toHaveSelector(selector)
21+
await expect(await frame).toHaveSelector(selector)
22+
})
1123
it("negative", async () => {
1224
await assertSnapshot(() =>
1325
expect(page).toHaveSelector("#foobar", { timeout: 1000 })

src/matchers/toHaveSelector/index.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
import { SyncExpectationResult } from "expect/build/types"
2-
import type { Page } from "playwright-core"
32
import { PageWaitForSelectorOptions } from "../../../global"
3+
import { ExpectInputType, getFrame } from "../utils"
44

55
const toHaveSelector: jest.CustomMatcher = async function (
6-
page: Page,
6+
arg: ExpectInputType,
77
selector: string,
88
options: PageWaitForSelectorOptions = {}
99
): Promise<SyncExpectationResult> {
10-
const pass = await page
10+
const frame = await getFrame(arg)
11+
const pass = await frame!
1112
.waitForSelector(selector, {
1213
state: this.isNot ? "hidden" : "visible",
1314
...options,

src/matchers/toHaveSelectorCount/index.test.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,16 @@ describe("toHaveSelectorCount", () => {
1111
)
1212
await expect(page).toHaveSelectorCount(".foobar", 2)
1313
})
14+
it("positive in frame", async () => {
15+
await page.setContent(`<iframe src="https://example.com"></iframe>`)
16+
const handle = page.$("iframe")
17+
await expect(handle).toHaveSelectorCount("p", 2)
18+
await expect(await handle).toHaveSelectorCount("p", 2)
19+
20+
const frame = (await handle)?.contentFrame()
21+
await expect(frame).toHaveSelectorCount("p", 2)
22+
await expect(await frame).toHaveSelectorCount("p", 2)
23+
})
1424
it("negative", async () => {
1525
await page.setContent(`<div class="foobar">Bar</div>`)
1626
await assertSnapshot(() => expect(page).toHaveSelectorCount(".foobar", 2))

src/matchers/toHaveSelectorCount/index.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
import { SyncExpectationResult } from "expect/build/types"
2-
import { getMessage, quote } from "../utils"
3-
import type { Page } from "playwright-core"
42
import { PageWaitForSelectorOptions } from "../../../global"
3+
import { ExpectInputType, getFrame, getMessage, quote } from "../utils"
54

65
const toHaveSelectorCount: jest.CustomMatcher = async function (
7-
page: Page,
6+
arg: ExpectInputType,
87
selector: string,
98
expectedValue: number,
109
options: PageWaitForSelectorOptions = {}
1110
): Promise<SyncExpectationResult> {
1211
try {
13-
await page.waitForSelector(selector, { state: "attached", ...options })
12+
const frame = (await getFrame(arg))!
13+
await frame.waitForSelector(selector, { state: "attached", ...options })
1414
/* istanbul ignore next */
15-
const actualCount = await page.$$eval(selector, (el) => el.length)
15+
const actualCount = await frame.$$eval(selector, (el) => el.length)
1616

1717
return {
1818
pass: actualCount === expectedValue,

0 commit comments

Comments
 (0)