Azure Resource Manager Playwright Dotnet

by microsoft354361d83247MITListed Oct 8, 2026Updated Oct 8, 2026

Azure Resource Manager SDK for Microsoft Playwright Testing in .NET. Use for MANAGEMENT PLANE operations: creating/managing Playwright Testing workspaces, checking name availability, and managing workspace quotas via Azure Resource Manager. NOT for running Playwright tests - use Azure.Developer.MicrosoftPlaywrightTesting.NUnit for that. Triggers: "Playwright workspace", "create Playwright Testing workspace", "manage Playwright resources", "ARM Playwright", "PlaywrightWorkspaceResource", "provision Playwright Testing".

FeaturedInstructions only

Azure.ResourceManager.Playwright (.NET)

Management plane SDK for provisioning and managing Microsoft Playwright Testing workspaces via Azure Resource Manager.

⚠️ Management vs Test Execution

  • This SDK (Azure.ResourceManager.Playwright): Create workspaces, manage quotas, check name availability
  • Test Execution SDK (Azure.Developer.MicrosoftPlaywrightTesting.NUnit): Run Playwright tests at scale on cloud browsers

Installation

bash
dotnet add package Azure.ResourceManager.Playwrightdotnet add package Azure.Identity

Current Versions: Stable v1.0.0, Preview v1.0.0-beta.1

Environment Variables

bash
AZURE_SUBSCRIPTION_ID=<your-subscription-id>  # Required: Azure subscription IDAZURE_TOKEN_CREDENTIALS=prod  # Required only if DefaultAzureCredential is used in productionAZURE_TENANT_ID=<tenant-id>  # For service principal auth (optional)AZURE_CLIENT_ID=<client-id>  # For service principal auth (optional)AZURE_CLIENT_SECRET=<client-secret>  # For service principal auth (optional)

Authentication

csharp
using Azure.Identity;using Azure.ResourceManager;using Azure.ResourceManager.Playwright;
// Local dev: DefaultAzureCredential. Production: set AZURE_TOKEN_CREDENTIALS=prod or AZURE_TOKEN_CREDENTIALS=<specific_credential>var credential = new DefaultAzureCredential(    DefaultAzureCredential.DefaultEnvironmentVariableName);// Or use a specific credential directly in production:// See https://learn.microsoft.com/dotnet/api/overview/azure/identity-readme?view=azure-dotnet#credential-classes// var credential = new ManagedIdentityCredential();var armClient = new ArmClient(credential);
// Get subscriptionvar subscriptionId = Environment.GetEnvironmentVariable("AZURE_SUBSCRIPTION_ID");var subscription = armClient.GetSubscriptionResource(    new ResourceIdentifier($"/subscriptions/{subscriptionId}"));

Resource Hierarchy

ArmClient└── SubscriptionResource    ├── PlaywrightQuotaResource (subscription-level quotas)    └── ResourceGroupResource        └── PlaywrightWorkspaceResource            └── PlaywrightWorkspaceQuotaResource (workspace-level quotas)

Core Workflow

1. Create Playwright Workspace

csharp
using Azure.ResourceManager.Playwright;using Azure.ResourceManager.Playwright.Models;
// Get resource groupvar resourceGroup = await subscription    .GetResourceGroupAsync("my-resource-group");
// Define workspacevar workspaceData = new PlaywrightWorkspaceData(AzureLocation.WestUS3){    // Optional: Configure regional affinity and local auth    RegionalAffinity = PlaywrightRegionalAffinity.Enabled,    LocalAuth = PlaywrightLocalAuth.Enabled,    Tags =    {        ["Team"] = "Dev Exp",        ["Environment"] = "Production"    }};
// Create workspace (long-running operation)var workspaceCollection = resourceGroup.Value.GetPlaywrightWorkspaces();var operation = await workspaceCollection.CreateOrUpdateAsync(    WaitUntil.Completed,    "my-playwright-workspace",    workspaceData);
PlaywrightWorkspaceResource workspace = operation.Value;
// Get the data plane URI for running testsConsole.WriteLine($"Data Plane URI: {workspace.Data.DataplaneUri}");Console.WriteLine($"Workspace ID: {workspace.Data.WorkspaceId}");

2. Get Existing Workspace

csharp
// Get by namevar workspace = await workspaceCollection.GetAsync("my-playwright-workspace");
// Or check if exists firstbool exists = await workspaceCollection.ExistsAsync("my-playwright-workspace");if (exists){    var existingWorkspace = await workspaceCollection.GetAsync("my-playwright-workspace");    Console.WriteLine($"Workspace found: {existingWorkspace.Value.Data.Name}");}

3. List Workspaces

csharp
// List in resource groupawait foreach (var workspace in workspaceCollection.GetAllAsync()){    Console.WriteLine($"Workspace: {workspace.Data.Name}");    Console.WriteLine($"  Location: {workspace.Data.Location}");    Console.WriteLine($"  State: {workspace.Data.ProvisioningState}");    Console.WriteLine($"  Data Plane URI: {workspace.Data.DataplaneUri}");}
// List across subscriptionawait foreach (var workspace in subscription.GetPlaywrightWorkspacesAsync()){    Console.WriteLine($"Workspace: {workspace.Data.Name}");}

4. Update Workspace

csharp
var patch = new PlaywrightWorkspacePatch{    Tags =    {        ["Team"] = "Dev Exp",        ["Environment"] = "Staging",        ["UpdatedAt"] = DateTime.UtcNow.ToString("o")    }};
var updatedWorkspace = await workspace.Value.UpdateAsync(patch);

5. Check Name Availability

csharp
using Azure.ResourceManager.Playwright.Models;
var checkRequest = new PlaywrightCheckNameAvailabilityContent{    Name = "my-new-workspace",    ResourceType = "Microsoft.LoadTestService/playwrightWorkspaces"};
var result = await subscription.CheckPlaywrightNameAvailabilityAsync(checkRequest);
if (result.Value.IsNameAvailable == true){    Console.WriteLine("Name is available!");}else{    Console.WriteLine($"Name unavailable: {result.Value.Message}");    Console.WriteLine($"Reason: {result.Value.Reason}");}

6. Get Quota Information

csharp
// Subscription-level quotasawait foreach (var quota in subscription.GetPlaywrightQuotasAsync(AzureLocation.WestUS3)){    Console.WriteLine($"Quota: {quota.Data.Name}");    Console.WriteLine($"  Limit: {quota.Data.Limit}");    Console.WriteLine($"  Used: {quota.Data.Used}");}
// Workspace-level quotasvar workspaceQuotas = workspace.Value.GetAllPlaywrightWorkspaceQuota();await foreach (var quota in workspaceQuotas.GetAllAsync()){    Console.WriteLine($"Workspace Quota: {quota.Data.Name}");}

7. Delete Workspace

csharp
// Delete (long-running operation)await workspace.Value.DeleteAsync(WaitUntil.Completed);

Key Types Reference

TypePurpose
ArmClientEntry point for all ARM operations
PlaywrightWorkspaceResourceRepresents a Playwright Testing workspace
PlaywrightWorkspaceCollectionCollection for workspace CRUD
PlaywrightWorkspaceDataWorkspace creation/response payload
PlaywrightWorkspacePatchWorkspace update payload
PlaywrightQuotaResourceSubscription-level quota information
PlaywrightWorkspaceQuotaResourceWorkspace-level quota information
PlaywrightExtensionsExtension methods for ARM resources
PlaywrightCheckNameAvailabilityContentName availability check request

Workspace Properties

PropertyDescription
DataplaneUriURI for running tests (e.g., https://api.dataplane.{guid}.domain.com)
WorkspaceIdUnique workspace identifier (GUID)
RegionalAffinityEnable/disable regional affinity for test execution
LocalAuthEnable/disable local authentication (access tokens)
ProvisioningStateCurrent provisioning state (Succeeded, Failed, etc.)

Best Practices

  1. Use WaitUntil.Completed for operations that must finish before proceeding
  2. Use WaitUntil.Started when you want to poll manually or run operations in parallel
  3. Always use DefaultAzureCredential — never hardcode keys
  4. Handle RequestFailedException for ARM API errors
  5. Use CreateOrUpdateAsync for idempotent operations
  6. Navigate hierarchy via Get* methods (e.g., resourceGroup.GetPlaywrightWorkspaces())
  7. Store the DataplaneUri after workspace creation for test execution configuration

Error Handling

csharp
using Azure;
try{    var operation = await workspaceCollection.CreateOrUpdateAsync(        WaitUntil.Completed, workspaceName, workspaceData);}catch (RequestFailedException ex) when (ex.Status == 409){    Console.WriteLine("Workspace already exists");}catch (RequestFailedException ex) when (ex.Status == 400){    Console.WriteLine($"Bad request: {ex.Message}");}catch (RequestFailedException ex){    Console.WriteLine($"ARM Error: {ex.Status} - {ex.ErrorCode}: {ex.Message}");}

Integration with Test Execution

After creating a workspace, use the DataplaneUri to configure your Playwright tests:

csharp
// 1. Create workspace (this SDK)var workspace = await workspaceCollection.CreateOrUpdateAsync(    WaitUntil.Completed, "my-workspace", workspaceData);
// 2. Get the service URLvar serviceUrl = workspace.Value.Data.DataplaneUri;
// 3. Set environment variable for test executionEnvironment.SetEnvironmentVariable("PLAYWRIGHT_SERVICE_URL", serviceUrl.ToString());
// 4. Run tests using Azure.Developer.MicrosoftPlaywrightTesting.NUnit// (separate package for test execution)

Related SDKs

SDKPurposeInstall
Azure.ResourceManager.PlaywrightManagement plane (this SDK)dotnet add package Azure.ResourceManager.Playwright
Azure.Developer.MicrosoftPlaywrightTesting.NUnitRun NUnit Playwright tests at scaledotnet add package Azure.Developer.MicrosoftPlaywrightTesting.NUnit --prerelease
Azure.Developer.PlaywrightPlaywright client librarydotnet add package Azure.Developer.Playwright

API Information

  • Resource Provider: Microsoft.LoadTestService
  • Default API Version: 2025-09-01
  • Resource Type: Microsoft.LoadTestService/playwrightWorkspaces

Documentation Links

Source and attribution

Source:microsoft/skillsin.github/plugins/azure-sdk-dotnet/skills/azure-resource-manager-playwright-dotnetat commit354361d

License: MIT

Content belongs to its original authors. SourceWeft indexes it from a public repository.

Report or request removal

Azure Resource Manager Playwright Dotnet Agent Skill | SourceWeft