C3D.Extensions.Playwright.AspNetCore.Xunit 0.1.32

dotnet add package C3D.Extensions.Playwright.AspNetCore.Xunit --version 0.1.32
NuGet\Install-Package C3D.Extensions.Playwright.AspNetCore.Xunit -Version 0.1.32
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="C3D.Extensions.Playwright.AspNetCore.Xunit" Version="0.1.32" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add C3D.Extensions.Playwright.AspNetCore.Xunit --version 0.1.32
#r "nuget: C3D.Extensions.Playwright.AspNetCore.Xunit, 0.1.32"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install C3D.Extensions.Playwright.AspNetCore.Xunit as a Cake Addin
#addin nuget:?package=C3D.Extensions.Playwright.AspNetCore.Xunit&version=0.1.32

// Install C3D.Extensions.Playwright.AspNetCore.Xunit as a Cake Tool
#tool nuget:?package=C3D.Extensions.Playwright.AspNetCore.Xunit&version=0.1.32

C3D.Extensions.Playwright.AspNetCore.Xunit

Adds Xunit logging and fixture support to C3D.Extensions.Playwright.AspNetCore to allow easy unit testing of AspNetCore web applications using Xunit.

Usage

Basic

Create an Xunit est with a class fixture. Use Playwright with tracing support to check a page title.

public class UnitTestDefault : IClassFixture<PlaywrightFixture<Program>>
{
    private readonly PlaywrightFixture<Program> webApplication;
    private readonly ITestOutputHelper outputHelper;

    public UnitTestDefault(PlaywrightFixture<Program> webApplication, ITestOutputHelper outputHelper)
    {
        this.webApplication = webApplication;
        this.outputHelper = outputHelper;
    }

    [Fact]
    public async Task CanTrace()
    {
        var page = await webApplication.CreatePlaywrightPageAsync();
        await using var trace = await page.TraceAsync($"Testing Tracing on {webApplication.BrowserType}", true, true, true);

        outputHelper.WriteLine($"Tracing to {trace.TraceName}");

        Assert.Equal("CanTrace.zip", trace.TraceName);

        await page.GotoAsync("/");
        Assert.Equal("Home page", await page.TitleAsync());

        Assert.True(System.IO.File.Exists(trace.TraceName));
    }
}

Advanced

Create a base fixture wrapping your program.

public abstract class ProgramFixtureBase : PlaywrightFixture<Program> {
    protected ProgramFixtureBase(IMessageSink output) : base(output) {}
}

Create multiple fixtures for each combination of Environment and/or browser that you desire.

public class ProgramFixtureChrome : ProgramFixtureBase {
    public ProgramFixtureChrome(IMessageSink output) : base(output) {}
}
public class ProgramFixtureFirefox : ProgramFixtureBase {
    public ProgramFixtureFirefox(IMessageSink output) : base(output) {}
    public override PlaywrightBrowserType BrowserType => PlaywrightBrowserType.Firefox;
}
public class ProgramFixtureWebkit : ProgramFixtureBase {
    public ProgramFixtureWebkit(IMessageSink output) : base(output) {}
    public override PlaywrightBrowserType BrowserType => PlaywrightBrowserType.Webkit;
}

Create a base unit test class

public abstract class UnitTestBase 
{
    protected readonly ProgramFixtureBase webApplication;
    protected readonly ITestOutputHelper outputHelper;

    protected UnitTestBase(ProgramFixtureBase webApplication, ITestOutputHelper outputHelper)
    {
        this.webApplication = webApplication;
        this.outputHelper = outputHelper;
    }

    [Fact]
    public async Task TestRootTitle()
    {
        var page = await webApplication.CreatePlaywrightPageAsync();

        await page.GotoAsync("/");
        Assert.Equal("Home page", await page.TitleAsync());
    }
}

Create a unit test class for each fixture

public class UnitTestChrome : UnitTestBase, IClassFixture<ProgramFixtureChrome>
{
    public UnitTestChrome(ProgramFixtureChrome webApplication, ITestOutputHelper outputHelper) : 
        base(webApplication, outputHelper)
    {
    }
}
public class UnitTestFirefox : UnitTestBase, IClassFixture<ProgramFixtureFirefox>
{
    public UnitTestFirefox(ProgramFixtureFirefox webApplication, ITestOutputHelper outputHelper) : 
        base(webApplication, outputHelper)
    {
    }
}
public class UnitTestWebkit : UnitTestBase, IClassFixture<ProgramFixtureWebkit>
{
    public UnitTestWebkit(ProgramFixtureWebkit webApplication, ITestOutputHelper outputHelper) : 
        base(webApplication, outputHelper)
    {
    }
}

Now each test in UnitTestBase will be run for each browser.

If using tracing, in order to prevent clashes between tests which will have the same name by default, use the overload taking the type of the fixture.

There is an overload that takes an object and calls ToString to get the prefix. Using this with the fixture class will return

{Environment}_{BrowserType}_{typeof(TProgram).FullName}

You can override this in your base fixture depending on what variants you have defined.

Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 is compatible.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories (1)

Showing the top 1 popular GitHub repositories that depend on C3D.Extensions.Playwright.AspNetCore.Xunit:

Repository Stars
FritzAndFriends/TagzApp
An application that discovers content on social media for hashtags
Version Downloads Last updated
0.1.32 257 12/28/2023
0.1.31 96 12/28/2023
0.1.30 1,246 9/26/2023
0.1.29 121 9/18/2023
0.1.28 707 9/16/2023
0.1.26 715 8/21/2023
0.1.25 463 8/13/2023
0.1.24 144 8/12/2023
0.1.22 157 8/12/2023
0.1.7 147 8/11/2023