PlaywrightContrib.PageObjects 1.0.0

Install-Package PlaywrightContrib.PageObjects -Version 1.0.0
dotnet add package PlaywrightContrib.PageObjects --version 1.0.0
<PackageReference Include="PlaywrightContrib.PageObjects" Version="1.0.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add PlaywrightContrib.PageObjects --version 1.0.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: PlaywrightContrib.PageObjects, 1.0.0"
#r directive can be used in F# Interactive, C# scripting and .NET Interactive. Copy this into the interactive tool or source code of the script to reference the package.
// Install PlaywrightContrib.PageObjects as a Cake Addin
#addin nuget:?package=PlaywrightContrib.PageObjects&version=1.0.0

// Install PlaywrightContrib.PageObjects as a Cake Tool
#tool nuget:?package=PlaywrightContrib.PageObjects&version=1.0.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.

PlaywrightContrib.PageObjects 🎭🧪

build CodeFactor

PlaywrightContrib.PageObjects is a library for writing browser tests using the page object pattern with the Playwright API.

using FluentAssertions;
using Microsoft.Playwright;
using PlaywrightContrib.FluentAssertions;
using PlaywrightContrib.PageObjects;
using System.Threading.Tasks;

var playwright = await Playwright.CreateAsync();
var browser = await playwright.Chromium.LaunchAsync();
var page = await browser.NewPageAsync();

var repoPage = await page.GotoAsync<GitHubRepoPage>("");
var link = await repoPage.Link;
await link.Should().HaveContentAsync("playwright-dotnet");
await link.Should().HaveAttributeValueAsync("href", "/microsoft/playwright-dotnet");

var actionsPage = await repoPage.GotoActionsAsync();
var latestStatus = await actionsPage.GetLatestWorkflowRunStatusAsync();
latestStatus.Should().Be("This workflow run completed successfully.");

public class GitHubRepoPage : PageObject
    [Selector("h1 strong a")]
    public virtual Task<IElementHandle> Link { get; }

    [Selector("a span[data-content='Actions']")]
    public virtual Task<IElementHandle> Actions { get; }

    public async Task<GitHubActionsPage> GotoActionsAsync()
        await (await Actions).ClickAsync();
        return await Page.WaitForNavigationAsync<GitHubActionsPage>();

public class GitHubActionsPage : PageObject
    public async Task<string> GetLatestWorkflowRunStatusAsync()
        var status = await Page.QuerySelectorAsync("#partial-actions-workflow-runs .Box-row div[title]");
        return await status.GetAttributeAsync("title");

Extensions for IPage 📄

Where T is a PageObject:

  • GoToAsync<T>
  • RunAndWaitForNavigationAsync<T>
  • RunAndWaitForResponseAsync<T>
  • To<T>
  • WaitForNavigationAsync<T>
  • WaitForResponseAsync<T>

Where T is an ElementObject:

  • QuerySelectorAllAsync<T>
  • QuerySelectorAsync<T>
  • WaitForSelectorAsync<T>

Extensions for IElementHandle 📑

Where T is an ElementObject:

  • To<T>
  • QuerySelectorAllAsync<T>
  • QuerySelectorAsync<T>
  • WaitForSelectorAsync<T>

Would you like to know more? 🤔

Further documentation is available at

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.0.0 108 6/28/2021

Initial release 🎉