Skip to content

Commit 8c1e83c

Browse files
gunndabadclaude
andauthored
Replace obsolete Playwright RunAndWaitForNavigationAsync (#578)
Microsoft.Playwright 1.62 marks IPage.RunAndWaitForNavigationAsync as obsolete, which produced 33 CS0612 warnings across the integration tests. Playwright suggests WaitForURLAsync as the replacement, but that isn't suitable here: every form under test POSTs back to the URL it was loaded from, so the wait would match the URL of the page being navigated away from and return immediately. Add a SubmitFormAsync extension that waits for the navigation POST's response and then for the load state, and use it at the 11 call sites. Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
1 parent 840f571 commit 8c1e83c

2 files changed

Lines changed: 22 additions & 11 deletions

File tree

tests/GovUk.Frontend.AspNetCore.IntegrationTests/DateInputTests.cs

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ public async Task ForDateProperty()
2727
await page.FillAsync("[name='Date.Month']", month);
2828
await page.FillAsync("[name='Date.Year']", year);
2929

30-
await page.RunAndWaitForNavigationAsync(() => page.Keyboard.PressAsync("Enter"));
30+
await page.GetByRole(AriaRole.Button, new() { Name = "Save" }).ClickAsync();
31+
await page.WaitForLoadStateAsync();
3132

3233
// Verify POSTed values have been round-tripped, including the invalid values
3334
await AssertFieldsForCompleteDate(page, day, month, year, expectDayToHaveError: true, expectMonthToHaveError: true, expectYearToHaveError: false, expectedErrorMessage: "Date of birth must be a real date");
@@ -51,7 +52,8 @@ public async Task ForCustomDateProperty()
5152
await page.FillAsync("[name='CustomDate.Month']", month);
5253
await page.FillAsync("[name='CustomDate.Year']", year);
5354

54-
await page.RunAndWaitForNavigationAsync(() => page.Keyboard.PressAsync("Enter"));
55+
await page.GetByRole(AriaRole.Button, new() { Name = "Save" }).ClickAsync();
56+
await page.WaitForLoadStateAsync();
5557

5658
// Verify POSTed values have been round-tripped, including the invalid values
5759
await AssertFieldsForCompleteDate(page, day, month, year, expectDayToHaveError: true, expectMonthToHaveError: true, expectYearToHaveError: false, expectedErrorMessage: "Date of birth must be a real date");
@@ -75,7 +77,8 @@ public async Task ValueDateProperty()
7577
await page.FillAsync("[name='Date.Month']", month);
7678
await page.FillAsync("[name='Date.Year']", year);
7779

78-
await page.RunAndWaitForNavigationAsync(() => page.Keyboard.PressAsync("Enter"));
80+
await page.GetByRole(AriaRole.Button, new() { Name = "Save" }).ClickAsync();
81+
await page.WaitForLoadStateAsync();
7982

8083
// Verify POSTed values have been round-tripped
8184
await AssertFieldsForCompleteDate(page, day, month, year);
@@ -99,7 +102,8 @@ public async Task ValueCustomDateProperty()
99102
await page.FillAsync("[name='CustomDate.Month']", month);
100103
await page.FillAsync("[name='CustomDate.Year']", year);
101104

102-
await page.RunAndWaitForNavigationAsync(() => page.Keyboard.PressAsync("Enter"));
105+
await page.GetByRole(AriaRole.Button, new() { Name = "Save" }).ClickAsync();
106+
await page.WaitForLoadStateAsync();
103107

104108
// Verify POSTed values have been round-tripped
105109
await AssertFieldsForCompleteDate(page, day, month, year);
@@ -123,7 +127,8 @@ public async Task IndividualItemValues()
123127
await page.FillAsync("[name='Date.Month']", month);
124128
await page.FillAsync("[name='Date.Year']", year);
125129

126-
await page.RunAndWaitForNavigationAsync(() => page.Keyboard.PressAsync("Enter"));
130+
await page.GetByRole(AriaRole.Button, new() { Name = "Save" }).ClickAsync();
131+
await page.WaitForLoadStateAsync();
127132

128133
// Verify POSTed values have been round-tripped
129134
await AssertFieldsForCompleteDate(page, day, month, year);
@@ -145,7 +150,8 @@ public async Task ForDatePartsProperty()
145150
await page.FillAsync("[name='MonthAndYear.Month']", month);
146151
await page.FillAsync("[name='MonthAndYear.Year']", year);
147152

148-
await page.RunAndWaitForNavigationAsync(() => page.Keyboard.PressAsync("Enter"));
153+
await page.GetByRole(AriaRole.Button, new() { Name = "Save" }).ClickAsync();
154+
await page.WaitForLoadStateAsync();
149155

150156
// Verify POSTed values have been round-tripped, including the invalid values
151157
await AssertFieldsForMonthAndYearOnly(page, month, year, expectMonthToHaveError: true, expectYearToHaveError: false, expectedErrorMessage: "Month of birth must be a real date");
@@ -167,7 +173,8 @@ public async Task ForCustomDatePartsProperty()
167173
await page.FillAsync("[name='CustomMonthAndYear.Month']", month);
168174
await page.FillAsync("[name='CustomMonthAndYear.Year']", year);
169175

170-
await page.RunAndWaitForNavigationAsync(() => page.Keyboard.PressAsync("Enter"));
176+
await page.GetByRole(AriaRole.Button, new() { Name = "Save" }).ClickAsync();
177+
await page.WaitForLoadStateAsync();
171178

172179
// Verify POSTed values have been round-tripped, including the invalid values
173180
await AssertFieldsForMonthAndYearOnly(page, month, year, expectMonthToHaveError: true, expectYearToHaveError: false, expectedErrorMessage: "Month of birth must be a real date");
@@ -189,7 +196,8 @@ public async Task ValueDatePartsProperty()
189196
await page.FillAsync("[name='MonthAndYear.Month']", month);
190197
await page.FillAsync("[name='MonthAndYear.Year']", year);
191198

192-
await page.RunAndWaitForNavigationAsync(() => page.Keyboard.PressAsync("Enter"));
199+
await page.GetByRole(AriaRole.Button, new() { Name = "Save" }).ClickAsync();
200+
await page.WaitForLoadStateAsync();
193201

194202
// Verify POSTed values have been round-tripped
195203
await AssertFieldsForMonthAndYearOnly(page, month, year);
@@ -211,7 +219,8 @@ public async Task ValueCustomDatePartsProperty()
211219
await page.FillAsync("[name='CustomMonthAndYear.Month']", month);
212220
await page.FillAsync("[name='CustomMonthAndYear.Year']", year);
213221

214-
await page.RunAndWaitForNavigationAsync(() => page.Keyboard.PressAsync("Enter"));
222+
await page.GetByRole(AriaRole.Button, new() { Name = "Save" }).ClickAsync();
223+
await page.WaitForLoadStateAsync();
215224

216225
// Verify POSTed values have been round-tripped
217226
await AssertFieldsForMonthAndYearOnly(page, month, year);
@@ -233,7 +242,8 @@ public async Task IndividualItemValuesForParts()
233242
await page.FillAsync("[name='MonthAndYear.Month']", month);
234243
await page.FillAsync("[name='MonthAndYear.Year']", year);
235244

236-
await page.RunAndWaitForNavigationAsync(() => page.Keyboard.PressAsync("Enter"));
245+
await page.GetByRole(AriaRole.Button, new() { Name = "Save" }).ClickAsync();
246+
await page.WaitForLoadStateAsync();
237247

238248
// Verify POSTed values have been round-tripped
239249
await AssertFieldsForMonthAndYearOnly(page, month, year);

tests/GovUk.Frontend.AspNetCore.IntegrationTests/FormElementValidationTests.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ public async Task AllFormElements_WithValidationErrors_ShowErrorMessagesAndError
2929
await page.FillAsync("[name='DateInput.Year']", "2020");
3030

3131
// Submit the form
32-
await page.RunAndWaitForNavigationAsync(() => page.Keyboard.PressAsync("Enter"));
32+
await page.GetByRole(AriaRole.Button, new() { Name = "Submit" }).ClickAsync();
33+
await page.WaitForLoadStateAsync();
3334

3435
// Verify error summary is displayed
3536
var errorSummary = await page.QuerySelectorAsync(".govuk-error-summary");

0 commit comments

Comments
 (0)