@@ -6,21 +6,26 @@ export async function assertPage(ctx: TestContext, test: AssertPage) {
6
6
const page = getPage ( ctx ) ;
7
7
const pageUrl = new URL ( page . url ( ) ) ;
8
8
const html = page . locator ( "html" ) ;
9
-
10
- expect ( await html . getAttribute ( "q:version" ) ) . toBeDefined ( ) ;
11
- expect ( await html . getAttribute ( "q:base" ) ) . toBeDefined ( ) ;
12
- expect ( await html . getAttribute ( "q:id" ) ) . toBeDefined ( ) ;
13
-
14
9
const head = html . locator ( "head" ) ;
15
- expect ( await head . getAttribute ( "q:id" ) ) . toBeDefined ( ) ;
16
10
17
11
if ( test . pathname ) {
18
- expect ( pageUrl . pathname ) . toBe ( test . pathname ) ;
12
+ await expect ( html ) . toHaveAttribute ( "q:version" ) ;
13
+ await expect ( html ) . toHaveAttribute ( "q:base" ) ;
14
+
15
+ // Build expected URL with or without search params
16
+ let expectedHref = pageUrl . origin + test . pathname ;
17
+ if ( test . searchParams && test . searchParams !== "empty" ) {
18
+ const searchParams = new URLSearchParams ( ) ;
19
+ for ( const [ key , value ] of Object . entries ( test . searchParams ) ) {
20
+ searchParams . append ( key , value ) ;
21
+ }
22
+ expectedHref += "?" + searchParams . toString ( ) ;
23
+ }
24
+
25
+ await expect ( page ) . toHaveURL ( expectedHref ) ;
19
26
20
27
const canonical = head . locator ( 'link[rel="canonical"]' ) ;
21
- const href = await canonical . getAttribute ( "href" ) ;
22
- const canonicalUrl = new URL ( href ! ) ;
23
- expect ( canonicalUrl . pathname ) . toBe ( test . pathname ) ;
28
+ await expect ( canonical ) . toHaveAttribute ( "href" , expectedHref ) ;
24
29
}
25
30
26
31
if ( test . searchParams ) {
@@ -35,52 +40,58 @@ export async function assertPage(ctx: TestContext, test: AssertPage) {
35
40
36
41
if ( test . title ) {
37
42
const title = head . locator ( "title" ) ;
38
- expect ( await title . innerText ( ) ) . toBe ( test . title ) ;
43
+ await expect ( title ) . toHaveText ( test . title , {
44
+ useInnerText : true ,
45
+ } ) ;
39
46
}
40
47
41
48
let parentLocator = page . locator ( "body" ) ;
42
49
if ( test . layoutHierarchy ) {
43
50
for ( const layoutName of test . layoutHierarchy ) {
44
51
const selector = `[data-test-layout="${ layoutName } "]` ;
45
52
parentLocator = parentLocator . locator ( selector ) ;
46
- expect (
47
- await parentLocator . isVisible ( ) ,
53
+ await expect (
54
+ parentLocator ,
48
55
`Incorrect layout hierarchy, did not find "${ selector } ", pathname: ${ pageUrl . pathname } ` ,
49
- ) . toBe ( true ) ;
56
+ ) . toBeVisible ( ) ;
50
57
}
51
58
52
59
const noFindChildLayout = parentLocator . locator ( `[data-test-layout]` ) ;
53
60
if ( await noFindChildLayout . isVisible ( ) ) {
54
61
const layoutName =
55
62
await noFindChildLayout . getAttribute ( "data-test-layout" ) ! ;
56
- expect (
57
- layoutName ,
63
+
64
+ await expect (
65
+ noFindChildLayout ,
58
66
`Should not be another nested layout, but found [data-test-layout="${ layoutName } "], pathname: ${ pageUrl . pathname } ` ,
59
- ) . toBe ( null ) ;
67
+ ) . not . toHaveAttribute ( "data-test-layout" ) ;
60
68
}
61
69
}
62
70
63
71
if ( test . h1 ) {
64
72
const h1 = parentLocator . locator ( "h1" ) ;
65
- expect ( await h1 . innerText ( ) ) . toBe ( test . h1 ) ;
73
+ await expect ( h1 ) . toHaveText ( test . h1 , {
74
+ useInnerText : true ,
75
+ } ) ;
66
76
}
67
77
68
78
const activeLink = locator (
69
79
ctx ,
70
80
`header [data-test-header-links] a[class="active"]` ,
71
81
) ;
72
82
if ( typeof test . activeHeaderLink === "string" ) {
73
- if ( await activeLink . isVisible ( ) ) {
74
- expect ( await activeLink . innerText ( ) ) . toBe ( test . activeHeaderLink ) ;
75
- } else {
76
- expect ( true , `Header link " ${ test . activeHeaderLink } " not active` ) . toBe (
77
- false ,
78
- ) ;
79
- }
83
+ await expect (
84
+ activeLink ,
85
+ `Header link " ${ test . activeHeaderLink } " not active` ,
86
+ ) . toBeVisible ( ) ;
87
+ await expect ( activeLink ) . toHaveText ( test . activeHeaderLink , {
88
+ useInnerText : true ,
89
+ } ) ;
80
90
} else if ( test . activeHeaderLink === false ) {
81
- if ( await activeLink . isVisible ( ) ) {
82
- expect ( true , `There should not be an active header link` ) . toBe ( false ) ;
83
- }
91
+ await expect (
92
+ activeLink ,
93
+ `There should not be an active header link` ,
94
+ ) . not . toBeVisible ( ) ;
84
95
}
85
96
}
86
97
@@ -101,9 +112,7 @@ export async function linkNavigate(
101
112
const page = getPage ( ctx ) ;
102
113
const link = page . locator ( linkSelector ) ;
103
114
104
- if ( ! ( await link . isVisible ( ) ) ) {
105
- expect ( true , `Link selector ${ linkSelector } not found` ) . toBe ( false ) ;
106
- }
115
+ await expect ( link , `Link selector ${ linkSelector } not found` ) . toBeVisible ( ) ;
107
116
108
117
const href = ( await link . getAttribute ( "href" ) ) ! ;
109
118
console . log ( ` nav> ${ href } ` ) ;
0 commit comments