Playwright.ReactUI.Controls.Extensions
3.3.0
Requires NuGet 2.12 or higher.
dotnet add package Playwright.ReactUI.Controls.Extensions --version 3.3.0
NuGet\Install-Package Playwright.ReactUI.Controls.Extensions -Version 3.3.0
<PackageReference Include="Playwright.ReactUI.Controls.Extensions" Version="3.3.0" />
<PackageVersion Include="Playwright.ReactUI.Controls.Extensions" Version="3.3.0" />
<PackageReference Include="Playwright.ReactUI.Controls.Extensions" />
paket add Playwright.ReactUI.Controls.Extensions --version 3.3.0
#r "nuget: Playwright.ReactUI.Controls.Extensions, 3.3.0"
#:package Playwright.ReactUI.Controls.Extensions@3.3.0
#addin nuget:?package=Playwright.ReactUI.Controls.Extensions&version=3.3.0
#tool nuget:?package=Playwright.ReactUI.Controls.Extensions&version=3.3.0
Playwright.ReactUI.Controls.Extensions
Библиотека предоставляет набор расширений к Playwright.ReactUI.Controls, а также атрибуты для автозаполнения контролов в PageObjects и PageElements
Как использовать
Примеры для компонента Input:
await input.AppendTextAsync("newValue").ConfigureAwait(false);- добавление значенияnewValueк уже существующему в Inputawait input.WaitToBeVisibleAsync().ConfigureAwait(false);- ожидание видимости компонента на страницеawait input.WaitToHaveValueAsync("TODO").ConfigureAwait(false);- ожидание значенияTODOв Input'e
AutoFillControlsAttribute
Чтобы воспользоваться атрибутом AutoFillControls необходимо следующее:
- Страница (PageObject) должна наследоваться от PageBase. Если у вас есть свой базовый класс страницы, то он должен наследовать PageBase
- Составной / сложный компонент (PageElement), т.е. контрол, который состоит из нескольких контролов (см. пример ниже), должен наследоваться от CompoundControlBase, а не ControlBase
- На PageObject / PageElement навесить атрибут [AutoFillControls]
Для заполнения самих контролов существует несколько атрибутов:
- RootByTid - ищет контрол по переданному data-tid'у
- RootByLocator - ищет контрол по переданному селектору (css / xpath)
- ChildByTid - ищет элемент списка по переданному data-tid'у; используется только для инициализации ControlList совместно с RootByTid / RootByLocator
- ChildByLocator - ищет элемент списка по переданному селектору (css / xpath); используется только для инициализации ControlList совместно с RootByTid / RootByLocator
- SkipAutoFillControl - если по каким-то причинам контрол нельзя автозаполнить, то необходимо навесить на него атрибут SkipAutoFillControl и инициализировать в конструкторе
Библиотека предоставляет возможность создать свой атрибут для заполнения контролов. Для этого надо реализовать IRootLocatorAttribute и(или) IChildLocatorAttribute (см. пример ниже)
Если появится желание реализовать свой атрибут, то лучше сначало прийти в меня. Возможно ваш атрибут лучше поместить в библиотеку
Если никакой атрибут заполнения контрола не указан, то AutoFillControls будет искать контрол по data-tid'у имени свойства
Примеры использования AutoFillControlsAttribute
// PageObject
[AutoFillControls]
public class TestPage : PageBase
{
public TestPage(IPage page)
: base(page)
{
}
// Контрол инициализируется с data-tid'ом Compound
public Compound Compound { get; init; }
// Контрол инициализируется с data-tid'ом LinkId
[RootByTid("LinkId")]
public Link Link { get; init; }
// Контрол инициализируется с локатором LocatorId (здесь может быть css / xpath)
[RootByLocator("LocatorId")]
public Input Input { get; init; }
}
// PageElement
[AutoFillControls]
public class Compound : CompoundControlBase
{
public Compound(ILocator rootLocator)
: base(rootLocator)
{
Button = new Button(rootLocator.GetByText("ButtonId"));
}
// Контрол инициализируется в конструкторе и не будет автозаполняться
[SkipAutoFillControl]
public Button Button { get; init; }
// Для создания списка необходимо указать Root* и Child* атрибуты. Child атрибут должен быть обязательно указан
[RootByTid("RootList")]
[ChildByLocator("ChildItem")]
public ControlList<Label> List { get; init; }
}
Пример реализации IRootLocatorAttribute
// Ищет контрол по GetByText
[AttributeUsage(AttributeTargets.Property)]
public class RootByTextAttribute : Attribute, IRootLocatorAttribute
{
public RootByTextAttribute(string selector) => Selector = selector;
public string Selector { get; }
public ILocator Resolve(ILocator locator) => locator.GetByText(Selector);
public ILocator Resolve(IPage page) => page.GetByText(Selector);
}
Минимальные требования
- netstandard2.0 / NET6
- Playwright 1.51.0
- @skbkontur/react-ui 4.25.2 (рекомендуется использовать последние версии)
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. 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 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. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.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
- Playwright.ReactUI.Controls (>= 3.2.0)
-
net6.0
- Playwright.ReactUI.Controls (>= 3.2.0)
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 |
|---|---|---|
| 3.3.0 | 283 | 10/12/2025 |
| 3.2.0 | 4,282 | 6/29/2025 |
| 3.1.1 | 190 | 6/26/2025 |
| 3.1.0 | 189 | 6/16/2025 |
| 3.0.0 | 186 | 6/15/2025 |
| 2.2.0 | 317 | 6/12/2025 |
| 2.1.0 | 330 | 6/11/2025 |
| 2.0.3 | 568 | 4/18/2025 |
| 2.0.2 | 1,498 | 2/14/2025 |
| 2.0.1 | 195 | 11/9/2024 |
| 2.0.0 | 157 | 11/9/2024 |
| 1.2.0 | 1,086 | 5/19/2024 |
| 1.1.1 | 173 | 5/17/2024 |
| 1.1.0 | 210 | 3/20/2024 |
| 1.0.0 | 202 | 3/19/2024 |