@@ -4,8 +4,9 @@ export class NamespacesPage {
4
4
constructor ( private page : Page ) { }
5
5
6
6
async navigateToNamespaces ( ) {
7
- await this . page . click ( 'span:has-text("Cluster")' ) ;
8
7
await this . page . waitForLoadState ( 'load' ) ;
8
+ await this . page . waitForSelector ( 'span:has-text("Cluster")' ) ;
9
+ await this . page . getByText ( 'Cluster' , { exact : true } ) . click ( ) ;
9
10
await this . page . waitForSelector ( 'span:has-text("Namespaces")' ) ;
10
11
await this . page . click ( 'span:has-text("Namespaces")' ) ;
11
12
await this . page . waitForLoadState ( 'load' ) ;
@@ -28,35 +29,59 @@ export class NamespacesPage {
28
29
// This makes it a bit more resilient to flakiness.
29
30
const pageContent = await this . page . content ( ) ;
30
31
if ( pageContent . includes ( name ) ) {
31
- return ;
32
+ throw new Error ( `Test failed: Namespace " ${ name } " already exists.` ) ;
32
33
}
33
34
34
- await expect ( page . getByRole ( 'button' , { name : 'Create' } ) ) . toBeVisible ( ) ;
35
- await page . getByRole ( 'button' , { name : 'Create' } ) . click ( ) ;
35
+ await page . getByText ( 'Create' , { exact : true } ) . click ( ) ;
36
36
37
37
await page . waitForLoadState ( 'load' ) ;
38
38
39
- await expect ( page . getByText ( 'Use minimal editor' ) ) . toBeVisible ( ) ;
40
- await page . getByText ( 'Use minimal editor' ) . click ( ) ;
39
+ // this is a workaround for the checked input not having any unique identifier
40
+ const checkedSpan = await page . $ ( 'span.Mui-checked' ) ;
41
+
42
+ if ( ! checkedSpan ) {
43
+ await expect ( page . getByText ( 'Use minimal editor' ) ) . toBeVisible ( ) ;
44
+
45
+ await page . getByText ( 'Use minimal editor' ) . click ( ) ;
46
+ }
41
47
42
48
await page . waitForLoadState ( 'load' ) ;
49
+
50
+ await page . waitForSelector ( 'textarea[aria-label="yaml Code"]' , { state : 'visible' } ) ;
51
+
52
+ await expect ( page . getByRole ( 'textbox' , { name : 'yaml Code' } ) ) . toBeVisible ( ) ;
43
53
await page . fill ( 'textarea[aria-label="yaml Code"]' , yaml ) ;
44
54
45
55
await expect ( page . getByRole ( 'button' , { name : 'Apply' } ) ) . toBeVisible ( ) ;
46
56
await page . getByRole ( 'button' , { name : 'Apply' } ) . click ( ) ;
47
57
48
- await page . waitForSelector ( `text=Applied ${ name } ` ) ;
58
+ await page . waitForSelector ( `a:has-text("${ name } ")` ) ;
59
+ await expect ( page . locator ( `a:has-text("${ name } ")` ) ) . toBeVisible ( ) ;
49
60
}
50
61
51
62
async deleteNamespace ( name ) {
52
63
const page = this . page ;
53
64
await page . click ( 'span:has-text("Namespaces")' ) ;
54
65
await page . waitForLoadState ( 'load' ) ;
66
+
55
67
await page . waitForSelector ( `text=${ name } ` ) ;
56
68
await page . click ( `a:has-text("${ name } ")` ) ;
57
- await page . click ( 'button[title="Delete"]' ) ;
69
+
70
+ await page . waitForSelector ( 'button[aria-label="Delete"]' ) ;
71
+ await page . click ( 'button[aria-label="Delete"]' ) ;
72
+
73
+ await page . waitForLoadState ( 'load' ) ;
74
+
58
75
await page . waitForSelector ( 'text=Are you sure you want to delete this item?' ) ;
76
+ await page . waitForSelector ( 'button:has-text("Yes")' ) ;
77
+
78
+ await page . waitForLoadState ( 'load' ) ;
79
+
59
80
await page . click ( 'button:has-text("Yes")' ) ;
60
- await page . waitForSelector ( `text=Deleted item ${ name } ` ) ;
81
+
82
+ await page . waitForSelector ( 'h1:has-text("Namespaces")' ) ;
83
+ await page . waitForSelector ( 'td:has-text("Terminating")' ) ;
84
+
85
+ await expect ( page . locator ( `a:has-text("${ name } ")` ) ) . toBeHidden ( ) ;
61
86
}
62
87
}
0 commit comments