PuppeteerSharp.Contrib.PageObjects
5.0.0
See the version list below for details.
dotnet add package PuppeteerSharp.Contrib.PageObjects --version 5.0.0
NuGet\Install-Package PuppeteerSharp.Contrib.PageObjects -Version 5.0.0
<PackageReference Include="PuppeteerSharp.Contrib.PageObjects" Version="5.0.0" />
paket add PuppeteerSharp.Contrib.PageObjects --version 5.0.0
#r "nuget: PuppeteerSharp.Contrib.PageObjects, 5.0.0"
// Install PuppeteerSharp.Contrib.PageObjects as a Cake Addin #addin nuget:?package=PuppeteerSharp.Contrib.PageObjects&version=5.0.0 // Install PuppeteerSharp.Contrib.PageObjects as a Cake Tool #tool nuget:?package=PuppeteerSharp.Contrib.PageObjects&version=5.0.0
PuppeteerSharp.Contrib.PageObjects
PuppeteerSharp.Contrib.PageObjects
is a library for writing browser tests using the page object pattern with the Puppeteer Sharp API.
Content
- Installation
- Page Objects
- Element Objects
- Selector Attributes
- XPath Attributes
- Extensions for
Page
- Extensions for
ElementHandle
- Samples
- Further Reading
Installation
Page Objects
A page object wraps a PuppeteerSharp.Page
and should encapsulate the way tests interact with a web page.
Create page objects by inheriting PageObject
and declare properties decorated with [Selector]
or [XPath]
attributes.
public class GitHubStartPage : PageObject
{
[Selector("h1")]
public virtual Task<ElementHandle> Heading { get; }
[Selector(".HeaderMenu")]
public virtual Task<GitHubHeaderMenu> HeaderMenu { get; }
}
Element Objects
An element object wraps an PuppeteerSharp.ElementHandle
and should encapsulate the way tests interact with an element of a web page.
Create element objects by inheriting ElementObject
and declare properties decorated with [Selector]
or [XPath]
attributes.
public class GitHubHeaderMenu : ElementObject
{
[Selector("input.header-search-input")]
public virtual Task<ElementHandle> SearchInput { get; }
public async Task<GitHubSearchPage> Search(string text)
{
var input = await SearchInput;
if (await input.IsHiddenAsync()) await Page.ClickAsync(".octicon-three-bars");
await input.TypeAsync(text);
await input.PressAsync(Key.Enter);
return await Page.WaitForNavigationAsync<GitHubSearchPage>();
}
}
Selector Attributes
[Selector]
attributes can be applied to properties on a PageObject
or ElementObject
.
Properties decorated with a [Selector]
attribute must be a:
- public
- virtual
- asynchronous
- getter
that returns:
Task<ElementHandle>
Task<ElementHandle[]>
Task<ElementObject>
orTask<ElementObject[]>
Example:
[Selector("#foo")]
public virtual Task<ElementHandle> SelectorForElementHandle { get; }
[Selector(".bar")]
public virtual Task<ElementHandle[]> SelectorForElementHandleArray { get; }
[Selector("#foo")]
public virtual Task<FooElementObject> SelectorForElementObject { get; }
[Selector(".bar")]
public virtual Task<BarElementObject[]> SelectorForElementObjectArray { get; }
XPath Attributes
[XPath]
attributes can be applied to properties on a PageObject
or ElementObject
.
Properties decorated with a [XPath]
attribute must be a:
- public
- virtual
- asynchronous
- getter
that returns:
Task<ElementHandle[]>
orTask<ElementObject[]>
Example:
[XPath("//div")]
public virtual Task<ElementHandle[]> XPathForElementHandleArray { get; }
[XPath("//div")]
public virtual Task<FooElementObject[]> XPathForElementObjectArray { get; }
Extensions for Page
Where T
is a PageObject
:
GoBackAsync<T>
GoForwardAsync<T>
GoToAsync<T>
ReloadAsync<T>
WaitForNavigationAsync<T>
WaitForResponseAsync<T>
Where T
is an ElementObject
:
QuerySelectorAllAsync<T>
QuerySelectorAsync<T>
WaitForSelectorAsync<T>
WaitForXPathAsync<T>
XPathAsync<T>
Extensions for ElementHandle
Where T
is an ElementObject
:
QuerySelectorAllAsync<T>
QuerySelectorAsync<T>
WaitForSelectorAsync<T>
XPathAsync<T>
Samples
A sample project with NUnit
is located in the samples
folder:
PageObjects.cs
contains the page and element objectsPuppeteerSharpRepoPageObjectTests.cs
contains the tests using the page object pattern
Further Reading
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. 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 was computed. 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 was computed. 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. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Castle.Core (>= 5.1.0)
- PuppeteerSharp (>= 7.1.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
⬆️ Bump PuppeteerSharp to 7.1.0
New extensions for Page:
◼️ GoBackAsync<T>
◼️ GoForwardAsync<T>
◼️ ReloadAsync<T>
◼️ WaitForResponseAsync<T>
New extensions for ElementHandle:
◼️ WaitForSelectorAsync<T>