Skip to content

Commit c4fa34a

Browse files
committed
Final cleanup and stability fixes
1 parent dc54c91 commit c4fa34a

File tree

5 files changed

+37
-27
lines changed

5 files changed

+37
-27
lines changed

src/ProjectTemplates/BlazorTemplates.Tests/BlazorServerTemplateTest.cs

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public async Task BlazorServerTemplateWorks_NoAuth(BrowserKind browserKind)
5454
var buildResult = await Project.RunDotNetBuildAsync();
5555
Assert.True(0 == buildResult.ExitCode, ErrorMessages.GetFailedProcessMessage("build", Project, buildResult));
5656

57-
var browser = Fixture.BrowserManager.IsAvailable(browserKind) ?
57+
await using var browser = Fixture.BrowserManager.IsAvailable(browserKind) ?
5858
await Fixture.BrowserManager.GetBrowserInstance(browserKind, BrowserContextInfo) :
5959
null;
6060

@@ -68,7 +68,8 @@ await Fixture.BrowserManager.GetBrowserInstance(browserKind, BrowserContextInfo)
6868

6969
if (Fixture.BrowserManager.IsAvailable(browserKind))
7070
{
71-
var page = await aspNetProcess.VisitInBrowserAsync(browser);
71+
var page = await browser.NewPageAsync();
72+
await aspNetProcess.VisitInBrowserAsync(page);
7273
await TestBasicNavigation(page);
7374
await page.CloseAsync();
7475
}
@@ -87,7 +88,8 @@ await Fixture.BrowserManager.GetBrowserInstance(browserKind, BrowserContextInfo)
8788
await aspNetProcess.AssertStatusCode("/", HttpStatusCode.OK, "text/html");
8889
if (Fixture.BrowserManager.IsAvailable(browserKind))
8990
{
90-
var page = await aspNetProcess.VisitInBrowserAsync(browser);
91+
var page = await browser.NewPageAsync();
92+
await aspNetProcess.VisitInBrowserAsync(page);
9193
await TestBasicNavigation(page);
9294
await page.CloseAsync();
9395
}
@@ -136,7 +138,8 @@ public async Task BlazorServerTemplateWorks_IndividualAuth(BrowserKind browserKi
136138
await aspNetProcess.AssertStatusCode("/", HttpStatusCode.OK, "text/html");
137139
if (Fixture.BrowserManager.IsAvailable(browserKind))
138140
{
139-
var page = await aspNetProcess.VisitInBrowserAsync(browser);
141+
var page = await browser.NewPageAsync();
142+
await aspNetProcess.VisitInBrowserAsync(page);
140143
await TestBasicNavigation(page);
141144
await page.CloseAsync();
142145
}
@@ -155,7 +158,8 @@ public async Task BlazorServerTemplateWorks_IndividualAuth(BrowserKind browserKi
155158
await aspNetProcess.AssertStatusCode("/", HttpStatusCode.OK, "text/html");
156159
if (Fixture.BrowserManager.IsAvailable(browserKind))
157160
{
158-
var page = await aspNetProcess.VisitInBrowserAsync(browser);
161+
var page = await browser.NewPageAsync();
162+
await aspNetProcess.VisitInBrowserAsync(page);
159163
await TestBasicNavigation(page);
160164
await page.CloseAsync();
161165
}
@@ -171,7 +175,13 @@ private async Task TestBasicNavigation(IPage page)
171175
var socket = BrowserContextInfo.Pages[page].WebSockets.SingleOrDefault() ??
172176
(await page.WaitForEventAsync(PageEvent.WebSocket)).WebSocket;
173177

178+
// Receive render batch
174179
await socket.WaitForEventAsync(WebSocketEvent.FrameReceived);
180+
await socket.WaitForEventAsync(WebSocketEvent.FrameSent);
181+
182+
// JS interop call to intercept navigation
183+
await socket.WaitForEventAsync(WebSocketEvent.FrameReceived);
184+
await socket.WaitForEventAsync(WebSocketEvent.FrameSent);
175185

176186
await page.WaitForSelectorAsync("ul");
177187
// <title> element gets project ID injected into it during template execution
@@ -181,22 +191,16 @@ private async Task TestBasicNavigation(IPage page)
181191
await page.WaitForSelectorAsync("h1 >> text=Hello, world!");
182192

183193
// Can navigate to the counter page
184-
await Task.WhenAll(
185-
page.WaitForNavigationAsync("**/counter"),
186-
page.WaitForSelectorAsync("h1+p >> text=Current count: 0"),
187-
page.ClickAsync("a[href=counter] >> text=Counter"));
194+
await page.ClickAsync("a[href=counter] >> text=Counter");
195+
await page.WaitForSelectorAsync("h1+p >> text=Current count: 0");
188196

189197
// Clicking the counter button works
190-
await Task.WhenAll(
191-
socket.WaitForEventAsync(WebSocketEvent.FrameReceived),
192-
page.WaitForSelectorAsync("h1+p >> text=Current count: 1"),
193-
page.ClickAsync("p+button >> text=Click me"));
198+
await page.ClickAsync("p+button >> text=Click me");
199+
await page.WaitForSelectorAsync("h1+p >> text=Current count: 1");
194200

195201
// Can navigate to the 'fetch data' page
196-
await Task.WhenAll(
197-
page.WaitForNavigationAsync("**/fetchdata"),
198-
page.WaitForSelectorAsync("h1 >> text=Weather forecast"),
199-
page.ClickAsync("a[href=fetchdata] >> text=Fetch data"));
202+
await page.ClickAsync("a[href=fetchdata] >> text=Fetch data");
203+
await page.WaitForSelectorAsync("h1 >> text=Weather forecast");
200204

201205
// Asynchronously loads and displays the table of weather forecasts
202206
await page.WaitForSelectorAsync("table>tbody>tr");

src/ProjectTemplates/BlazorTemplates.Tests/BlazorWasmTemplateTest.cs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,8 @@ public async Task BlazorWasmHostedTemplate_Works(BrowserKind browserKind)
121121
if (Fixture.BrowserManager.IsAvailable(browserKind))
122122
{
123123
await using var browser = await Fixture.BrowserManager.GetBrowserInstance(browserKind, BrowserContextInfo);
124-
var page = await aspNetProcess.VisitInBrowserAsync(browser);
124+
var page = await browser.NewPageAsync();
125+
await aspNetProcess.VisitInBrowserAsync(page);
125126
await TestBasicNavigation(project.ProjectName, page);
126127
}
127128
else
@@ -229,7 +230,8 @@ public async Task BlazorWasmHostedPwaTemplate_Works(BrowserKind browserKind)
229230
ErrorMessages.GetFailedProcessMessageOrEmpty("Run published project", serverProject, aspNetProcess.Process));
230231

231232
await aspNetProcess.AssertStatusCode("/", HttpStatusCode.OK, "text/html");
232-
page = await aspNetProcess.VisitInBrowserAsync(browser);
233+
page = await browser.NewPageAsync();
234+
await aspNetProcess.VisitInBrowserAsync(page);
233235
await TestBasicNavigation(project.ProjectName, page);
234236

235237
// Note: we don't want to use aspNetProcess.ListeningUri because that isn't necessarily the HTTPS URI
@@ -350,7 +352,8 @@ private async Task BlazorWasmHostedTemplate_IndividualAuth_Works(BrowserKind bro
350352
await aspNetProcess.AssertStatusCode("/", HttpStatusCode.OK, "text/html");
351353

352354
await using var browser = await Fixture.BrowserManager.GetBrowserInstance(browserKind, BrowserContextInfo);
353-
var page = await aspNetProcess.VisitInBrowserAsync(browser);
355+
var page = await browser.NewPageAsync();
356+
await aspNetProcess.VisitInBrowserAsync(page);
354357
await TestBasicNavigation(project.ProjectName, page, usesAuth: true);
355358
await page.CloseAsync();
356359
}
@@ -510,7 +513,8 @@ protected async Task BuildAndRunTest(string appName, Project project, BrowserKin
510513
if (Fixture.BrowserManager.IsAvailable(browserKind))
511514
{
512515
await using var browser = await Fixture.BrowserManager.GetBrowserInstance(browserKind, BrowserContextInfo);
513-
var page = await aspNetProcess.VisitInBrowserAsync(browser);
516+
var page = await browser.NewPageAsync();
517+
await aspNetProcess.VisitInBrowserAsync(page);
514518
await TestBasicNavigation(appName, page, usesAuth);
515519
await page.CloseAsync();
516520
}

src/ProjectTemplates/Shared/AspNetProcess.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,12 +102,10 @@ public AspNetProcess(
102102
}
103103
}
104104

105-
public async Task<IPage> VisitInBrowserAsync(IBrowserContext context)
105+
public async Task VisitInBrowserAsync(IPage page)
106106
{
107107
_output.WriteLine($"Opening browser at {ListeningUri}...");
108-
var page = await context.NewPageAsync();
109108
await page.GoToAsync(ListeningUri.AbsoluteUri);
110-
return page;
111109
}
112110

113111

src/Shared/BrowserTesting/src/BrowserManager.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ private async Task InitializeAsync()
4646

4747
async Task InitializeCore()
4848
{
49-
Playwright = await PlaywrightSharp.Playwright.CreateAsync(_loggerFactory, debug: "DEBUG=pw:api");
49+
Playwright = await PlaywrightSharp.Playwright.CreateAsync(_loggerFactory, debug: "pw:api");
5050
foreach (var (browserName, options) in _browserManagerConfiguration.BrowserOptions)
5151
{
5252
if (!_launchBrowsers.ContainsKey(browserName))

src/Shared/BrowserTesting/src/BrowserManagerConfiguration.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -313,10 +313,14 @@ private static BrowserContextOptions Combine(BrowserContextOptions defaultOption
313313
Proxy = overrideOptions?.Proxy != default ? overrideOptions.Proxy : defaultOptions.Proxy,
314314
RecordVideo = overrideOptions?.RecordVideo != default ?
315315
new() { Dir = overrideOptions.RecordVideo.Dir, Size = overrideOptions.RecordVideo.Size?.Clone() } :
316-
new() { Dir = defaultOptions.RecordVideo.Dir, Size = defaultOptions.RecordVideo.Size?.Clone() },
316+
defaultOptions != default ?
317+
new() { Dir = defaultOptions.RecordVideo.Dir, Size = defaultOptions.RecordVideo.Size?.Clone() } :
318+
default,
317319
RecordHar = overrideOptions?.RecordHar != default ?
318320
new() { Path = overrideOptions.RecordHar.Path, OmitContent = overrideOptions.RecordHar.OmitContent } :
319-
new() { Path = defaultOptions.RecordHar.Path, OmitContent = defaultOptions.RecordHar.OmitContent },
321+
defaultOptions?.RecordHar != default ?
322+
new() { Path = defaultOptions.RecordHar.Path, OmitContent = defaultOptions.RecordHar.OmitContent } :
323+
default,
320324
ExtraHTTPHeaders = overrideOptions?.ExtraHTTPHeaders != default ? overrideOptions.ExtraHTTPHeaders : defaultOptions.ExtraHTTPHeaders,
321325
Locale = overrideOptions?.Locale != default ? overrideOptions.Locale : defaultOptions.Locale,
322326
ColorScheme = overrideOptions?.ColorScheme != default ? overrideOptions.ColorScheme : defaultOptions.ColorScheme,

0 commit comments

Comments
 (0)