|
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
using Microsoft.Playwright;
using Xunit;
namespace Aspire.Dashboard.Tests.Integration.Playwright;
public class PlaywrightTestsBase : IClassFixture<DashboardServerFixture>, IClassFixture<PlaywrightFixture>, IAsyncDisposable
{
public DashboardServerFixture DashboardServerFixture { get; }
public PlaywrightFixture PlaywrightFixture { get; }
private IBrowserContext? _context;
public PlaywrightTestsBase(DashboardServerFixture dashboardServerFixture, PlaywrightFixture playwrightFixture)
{
DashboardServerFixture = dashboardServerFixture;
PlaywrightFixture = playwrightFixture;
}
public async Task RunTestAsync(Func<IPage, Task> test)
{
var page = await CreateNewPageAsync();
try
{
await test(page);
}
finally
{
await page.CloseAsync();
}
}
private async Task<IPage> CreateNewPageAsync()
{
_context ??= await PlaywrightFixture.Browser.NewContextAsync(new BrowserNewContextOptions
{
IgnoreHTTPSErrors = true,
BaseURL = DashboardServerFixture.DashboardApp.FrontendEndPointAccessor().Address
});
return await _context.NewPageAsync();
}
public async ValueTask DisposeAsync()
{
if (_context is not null)
{
await _context.DisposeAsync();
}
}
}
|