[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M69ANQZWE6GP1WD7ZRPCSPQ9":3,"skill-same:01M69ANQZWE6GP1WD7ZRPCSPQ9":86},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":31,"publishedAt":53,"linkOnly":54,"markdownContent":55,"markdownBody":56,"frontMatter":57,"refName":62,"commitSha":63,"skillDirectory":64,"forksCount":65,"repositoryHtmlUrl":66,"repositoryHomepageUrl":67,"ownerHtmlUrl":68,"ownerBlogUrl":69,"ownerDescription":70,"updatedAt":71,"install":72,"resources":85},"01M69ANQZWE6GP1WD7ZRPCSPQ9","azure-resource-manager-playwright-dotnet",null,"Azure Resource Manager SDK for Microsoft Playwright Testing in .NET. Use for MANAGEMENT PLANE operations: creating\u002Fmanaging 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\".","microsoft\u002Fskills","microsoft","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F6154722?v=4","01M698VYDXZ6JW5WH3CRV650R8","Microsoft","01M69AJYYW4E1RMSYCQDJ4FJSH",3202,"MIT","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills\u002Fblob\u002Fmain\u002F.github\u002Fplugins\u002Fazure-sdk-dotnet\u002Fskills\u002Fazure-resource-manager-playwright-dotnet\u002FSKILL.md",[18,23,26],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":27,"categoryName":28,"taxonomyType":29,"taxonomyTypeDesc":30},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,9,52],"playwright","dotnet","azure","azure resource manager playwright dotnet","manager","azure resource manager","playwright testing","running","for","plane","availability","resources","triggers","tests","manage","testing","workspaces","nunit","developer","create","sdk","2026-11-10 10:12:30",false,"---\nname: azure-resource-manager-playwright-dotnet\ndescription: |\n  Azure Resource Manager SDK for Microsoft Playwright Testing in .NET. Use for MANAGEMENT PLANE operations: creating\u002Fmanaging 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\".\nlicense: MIT\nmetadata:\n  author: Microsoft\n  version: \"1.0.0\"\n  package: Azure.ResourceManager.Playwright\n---\n\n# Azure.ResourceManager.Playwright (.NET)\n\nManagement plane SDK for provisioning and managing Microsoft Playwright Testing workspaces via Azure Resource Manager.\n\n> **⚠️ Management vs Test Execution**\n> - **This SDK (Azure.ResourceManager.Playwright)**: Create workspaces, manage quotas, check name availability\n> - **Test Execution SDK (Azure.Developer.MicrosoftPlaywrightTesting.NUnit)**: Run Playwright tests at scale on cloud browsers\n\n## Installation\n\n```bash\ndotnet add package Azure.ResourceManager.Playwright\ndotnet add package Azure.Identity\n```\n\n**Current Versions**: Stable v1.0.0, Preview v1.0.0-beta.1\n\n## Environment Variables\n\n```bash\nAZURE_SUBSCRIPTION_ID=\u003Cyour-subscription-id>  # Required: Azure subscription ID\nAZURE_TOKEN_CREDENTIALS=prod  # Required only if DefaultAzureCredential is used in production\nAZURE_TENANT_ID=\u003Ctenant-id>  # For service principal auth (optional)\nAZURE_CLIENT_ID=\u003Cclient-id>  # For service principal auth (optional)\nAZURE_CLIENT_SECRET=\u003Cclient-secret>  # For service principal auth (optional)\n```\n\n## Authentication\n\n```csharp\nusing Azure.Identity;\nusing Azure.ResourceManager;\nusing Azure.ResourceManager.Playwright;\n\n\u002F\u002F Local dev: DefaultAzureCredential. Production: set AZURE_TOKEN_CREDENTIALS=prod or AZURE_TOKEN_CREDENTIALS=\u003Cspecific_credential>\nvar credential = new DefaultAzureCredential(\n    DefaultAzureCredential.DefaultEnvironmentVariableName\n);\n\u002F\u002F Or use a specific credential directly in production:\n\u002F\u002F See https:\u002F\u002Flearn.microsoft.com\u002Fdotnet\u002Fapi\u002Foverview\u002Fazure\u002Fidentity-readme?view=azure-dotnet#credential-classes\n\u002F\u002F var credential = new ManagedIdentityCredential();\nvar armClient = new ArmClient(credential);\n\n\u002F\u002F Get subscription\nvar subscriptionId = Environment.GetEnvironmentVariable(\"AZURE_SUBSCRIPTION_ID\");\nvar subscription = armClient.GetSubscriptionResource(\n    new ResourceIdentifier($\"\u002Fsubscriptions\u002F{subscriptionId}\"));\n```\n\n## Resource Hierarchy\n\n```\nArmClient\n└── SubscriptionResource\n    ├── PlaywrightQuotaResource (subscription-level quotas)\n    └── ResourceGroupResource\n        └── PlaywrightWorkspaceResource\n            └── PlaywrightWorkspaceQuotaResource (workspace-level quotas)\n```\n\n## Core Workflow\n\n### 1. Create Playwright Workspace\n\n```csharp\nusing Azure.ResourceManager.Playwright;\nusing Azure.ResourceManager.Playwright.Models;\n\n\u002F\u002F Get resource group\nvar resourceGroup = await subscription\n    .GetResourceGroupAsync(\"my-resource-group\");\n\n\u002F\u002F Define workspace\nvar workspaceData = new PlaywrightWorkspaceData(AzureLocation.WestUS3)\n{\n    \u002F\u002F Optional: Configure regional affinity and local auth\n    RegionalAffinity = PlaywrightRegionalAffinity.Enabled,\n    LocalAuth = PlaywrightLocalAuth.Enabled,\n    Tags =\n    {\n        [\"Team\"] = \"Dev Exp\",\n        [\"Environment\"] = \"Production\"\n    }\n};\n\n\u002F\u002F Create workspace (long-running operation)\nvar workspaceCollection = resourceGroup.Value.GetPlaywrightWorkspaces();\nvar operation = await workspaceCollection.CreateOrUpdateAsync(\n    WaitUntil.Completed,\n    \"my-playwright-workspace\",\n    workspaceData);\n\nPlaywrightWorkspaceResource workspace = operation.Value;\n\n\u002F\u002F Get the data plane URI for running tests\nConsole.WriteLine($\"Data Plane URI: {workspace.Data.DataplaneUri}\");\nConsole.WriteLine($\"Workspace ID: {workspace.Data.WorkspaceId}\");\n```\n\n### 2. Get Existing Workspace\n\n```csharp\n\u002F\u002F Get by name\nvar workspace = await workspaceCollection.GetAsync(\"my-playwright-workspace\");\n\n\u002F\u002F Or check if exists first\nbool exists = await workspaceCollection.ExistsAsync(\"my-playwright-workspace\");\nif (exists)\n{\n    var existingWorkspace = await workspaceCollection.GetAsync(\"my-playwright-workspace\");\n    Console.WriteLine($\"Workspace found: {existingWorkspace.Value.Data.Name}\");\n}\n```\n\n### 3. List Workspaces\n\n```csharp\n\u002F\u002F List in resource group\nawait foreach (var workspace in workspaceCollection.GetAllAsync())\n{\n    Console.WriteLine($\"Workspace: {workspace.Data.Name}\");\n    Console.WriteLine($\"  Location: {workspace.Data.Location}\");\n    Console.WriteLine($\"  State: {workspace.Data.ProvisioningState}\");\n    Console.WriteLine($\"  Data Plane URI: {workspace.Data.DataplaneUri}\");\n}\n\n\u002F\u002F List across subscription\nawait foreach (var workspace in subscription.GetPlaywrightWorkspacesAsync())\n{\n    Console.WriteLine($\"Workspace: {workspace.Data.Name}\");\n}\n```\n\n### 4. Update Workspace\n\n```csharp\nvar patch = new PlaywrightWorkspacePatch\n{\n    Tags =\n    {\n        [\"Team\"] = \"Dev Exp\",\n        [\"Environment\"] = \"Staging\",\n        [\"UpdatedAt\"] = DateTime.UtcNow.ToString(\"o\")\n    }\n};\n\nvar updatedWorkspace = await workspace.Value.UpdateAsync(patch);\n```\n\n### 5. Check Name Availability\n\n```csharp\nusing Azure.ResourceManager.Playwright.Models;\n\nvar checkRequest = new PlaywrightCheckNameAvailabilityContent\n{\n    Name = \"my-new-workspace\",\n    ResourceType = \"Microsoft.LoadTestService\u002FplaywrightWorkspaces\"\n};\n\nvar result = await subscription.CheckPlaywrightNameAvailabilityAsync(checkRequest);\n\nif (result.Value.IsNameAvailable == true)\n{\n    Console.WriteLine(\"Name is available!\");\n}\nelse\n{\n    Console.WriteLine($\"Name unavailable: {result.Value.Message}\");\n    Console.WriteLine($\"Reason: {result.Value.Reason}\");\n}\n```\n\n### 6. Get Quota Information\n\n```csharp\n\u002F\u002F Subscription-level quotas\nawait foreach (var quota in subscription.GetPlaywrightQuotasAsync(AzureLocation.WestUS3))\n{\n    Console.WriteLine($\"Quota: {quota.Data.Name}\");\n    Console.WriteLine($\"  Limit: {quota.Data.Limit}\");\n    Console.WriteLine($\"  Used: {quota.Data.Used}\");\n}\n\n\u002F\u002F Workspace-level quotas\nvar workspaceQuotas = workspace.Value.GetAllPlaywrightWorkspaceQuota();\nawait foreach (var quota in workspaceQuotas.GetAllAsync())\n{\n    Console.WriteLine($\"Workspace Quota: {quota.Data.Name}\");\n}\n```\n\n### 7. Delete Workspace\n\n```csharp\n\u002F\u002F Delete (long-running operation)\nawait workspace.Value.DeleteAsync(WaitUntil.Completed);\n```\n\n## Key Types Reference\n\n| Type | Purpose |\n|------|---------|\n| `ArmClient` | Entry point for all ARM operations |\n| `PlaywrightWorkspaceResource` | Represents a Playwright Testing workspace |\n| `PlaywrightWorkspaceCollection` | Collection for workspace CRUD |\n| `PlaywrightWorkspaceData` | Workspace creation\u002Fresponse payload |\n| `PlaywrightWorkspacePatch` | Workspace update payload |\n| `PlaywrightQuotaResource` | Subscription-level quota information |\n| `PlaywrightWorkspaceQuotaResource` | Workspace-level quota information |\n| `PlaywrightExtensions` | Extension methods for ARM resources |\n| `PlaywrightCheckNameAvailabilityContent` | Name availability check request |\n\n## Workspace Properties\n\n| Property | Description |\n|----------|-------------|\n| `DataplaneUri` | URI for running tests (e.g., `https:\u002F\u002Fapi.dataplane.{guid}.domain.com`) |\n| `WorkspaceId` | Unique workspace identifier (GUID) |\n| `RegionalAffinity` | Enable\u002Fdisable regional affinity for test execution |\n| `LocalAuth` | Enable\u002Fdisable local authentication (access tokens) |\n| `ProvisioningState` | Current provisioning state (Succeeded, Failed, etc.) |\n\n## Best Practices\n\n1. **Use `WaitUntil.Completed`** for operations that must finish before proceeding\n2. **Use `WaitUntil.Started`** when you want to poll manually or run operations in parallel\n3. **Always use `DefaultAzureCredential`** — never hardcode keys\n4. **Handle `RequestFailedException`** for ARM API errors\n5. **Use `CreateOrUpdateAsync`** for idempotent operations\n6. **Navigate hierarchy** via `Get*` methods (e.g., `resourceGroup.GetPlaywrightWorkspaces()`)\n7. **Store the DataplaneUri** after workspace creation for test execution configuration\n\n## Error Handling\n\n```csharp\nusing Azure;\n\ntry\n{\n    var operation = await workspaceCollection.CreateOrUpdateAsync(\n        WaitUntil.Completed, workspaceName, workspaceData);\n}\ncatch (RequestFailedException ex) when (ex.Status == 409)\n{\n    Console.WriteLine(\"Workspace already exists\");\n}\ncatch (RequestFailedException ex) when (ex.Status == 400)\n{\n    Console.WriteLine($\"Bad request: {ex.Message}\");\n}\ncatch (RequestFailedException ex)\n{\n    Console.WriteLine($\"ARM Error: {ex.Status} - {ex.ErrorCode}: {ex.Message}\");\n}\n```\n\n## Integration with Test Execution\n\nAfter creating a workspace, use the `DataplaneUri` to configure your Playwright tests:\n\n```csharp\n\u002F\u002F 1. Create workspace (this SDK)\nvar workspace = await workspaceCollection.CreateOrUpdateAsync(\n    WaitUntil.Completed, \"my-workspace\", workspaceData);\n\n\u002F\u002F 2. Get the service URL\nvar serviceUrl = workspace.Value.Data.DataplaneUri;\n\n\u002F\u002F 3. Set environment variable for test execution\nEnvironment.SetEnvironmentVariable(\"PLAYWRIGHT_SERVICE_URL\", serviceUrl.ToString());\n\n\u002F\u002F 4. Run tests using Azure.Developer.MicrosoftPlaywrightTesting.NUnit\n\u002F\u002F (separate package for test execution)\n```\n\n## Related SDKs\n\n| SDK | Purpose | Install |\n|-----|---------|---------|\n| `Azure.ResourceManager.Playwright` | Management plane (this SDK) | `dotnet add package Azure.ResourceManager.Playwright` |\n| `Azure.Developer.MicrosoftPlaywrightTesting.NUnit` | Run NUnit Playwright tests at scale | `dotnet add package Azure.Developer.MicrosoftPlaywrightTesting.NUnit --prerelease` |\n| `Azure.Developer.Playwright` | Playwright client library | `dotnet add package Azure.Developer.Playwright` |\n\n## API Information\n\n- **Resource Provider**: `Microsoft.LoadTestService`\n- **Default API Version**: `2025-09-01`\n- **Resource Type**: `Microsoft.LoadTestService\u002FplaywrightWorkspaces`\n\n## Documentation Links\n\n- [Azure.ResourceManager.Playwright API Reference](https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fdotnet\u002Fapi\u002Fazure.resourcemanager.playwright)\n- [Microsoft Playwright Testing Overview](https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fplaywright-testing\u002Foverview-what-is-microsoft-playwright-testing)\n- [Quickstart: Run Playwright Tests at Scale](https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fplaywright-testing\u002Fquickstart-run-end-to-end-tests)\n","# Azure.ResourceManager.Playwright (.NET)\n\nManagement plane SDK for provisioning and managing Microsoft Playwright Testing workspaces via Azure Resource Manager.\n\n> **⚠️ Management vs Test Execution**\n> - **This SDK (Azure.ResourceManager.Playwright)**: Create workspaces, manage quotas, check name availability\n> - **Test Execution SDK (Azure.Developer.MicrosoftPlaywrightTesting.NUnit)**: Run Playwright tests at scale on cloud browsers\n\n## Installation\n\n```bash\ndotnet add package Azure.ResourceManager.Playwright\ndotnet add package Azure.Identity\n```\n\n**Current Versions**: Stable v1.0.0, Preview v1.0.0-beta.1\n\n## Environment Variables\n\n```bash\nAZURE_SUBSCRIPTION_ID=\u003Cyour-subscription-id>  # Required: Azure subscription ID\nAZURE_TOKEN_CREDENTIALS=prod  # Required only if DefaultAzureCredential is used in production\nAZURE_TENANT_ID=\u003Ctenant-id>  # For service principal auth (optional)\nAZURE_CLIENT_ID=\u003Cclient-id>  # For service principal auth (optional)\nAZURE_CLIENT_SECRET=\u003Cclient-secret>  # For service principal auth (optional)\n```\n\n## Authentication\n\n```csharp\nusing Azure.Identity;\nusing Azure.ResourceManager;\nusing Azure.ResourceManager.Playwright;\n\n\u002F\u002F Local dev: DefaultAzureCredential. Production: set AZURE_TOKEN_CREDENTIALS=prod or AZURE_TOKEN_CREDENTIALS=\u003Cspecific_credential>\nvar credential = new DefaultAzureCredential(\n    DefaultAzureCredential.DefaultEnvironmentVariableName\n);\n\u002F\u002F Or use a specific credential directly in production:\n\u002F\u002F See https:\u002F\u002Flearn.microsoft.com\u002Fdotnet\u002Fapi\u002Foverview\u002Fazure\u002Fidentity-readme?view=azure-dotnet#credential-classes\n\u002F\u002F var credential = new ManagedIdentityCredential();\nvar armClient = new ArmClient(credential);\n\n\u002F\u002F Get subscription\nvar subscriptionId = Environment.GetEnvironmentVariable(\"AZURE_SUBSCRIPTION_ID\");\nvar subscription = armClient.GetSubscriptionResource(\n    new ResourceIdentifier($\"\u002Fsubscriptions\u002F{subscriptionId}\"));\n```\n\n## Resource Hierarchy\n\n```\nArmClient\n└── SubscriptionResource\n    ├── PlaywrightQuotaResource (subscription-level quotas)\n    └── ResourceGroupResource\n        └── PlaywrightWorkspaceResource\n            └── PlaywrightWorkspaceQuotaResource (workspace-level quotas)\n```\n\n## Core Workflow\n\n### 1. Create Playwright Workspace\n\n```csharp\nusing Azure.ResourceManager.Playwright;\nusing Azure.ResourceManager.Playwright.Models;\n\n\u002F\u002F Get resource group\nvar resourceGroup = await subscription\n    .GetResourceGroupAsync(\"my-resource-group\");\n\n\u002F\u002F Define workspace\nvar workspaceData = new PlaywrightWorkspaceData(AzureLocation.WestUS3)\n{\n    \u002F\u002F Optional: Configure regional affinity and local auth\n    RegionalAffinity = PlaywrightRegionalAffinity.Enabled,\n    LocalAuth = PlaywrightLocalAuth.Enabled,\n    Tags =\n    {\n        [\"Team\"] = \"Dev Exp\",\n        [\"Environment\"] = \"Production\"\n    }\n};\n\n\u002F\u002F Create workspace (long-running operation)\nvar workspaceCollection = resourceGroup.Value.GetPlaywrightWorkspaces();\nvar operation = await workspaceCollection.CreateOrUpdateAsync(\n    WaitUntil.Completed,\n    \"my-playwright-workspace\",\n    workspaceData);\n\nPlaywrightWorkspaceResource workspace = operation.Value;\n\n\u002F\u002F Get the data plane URI for running tests\nConsole.WriteLine($\"Data Plane URI: {workspace.Data.DataplaneUri}\");\nConsole.WriteLine($\"Workspace ID: {workspace.Data.WorkspaceId}\");\n```\n\n### 2. Get Existing Workspace\n\n```csharp\n\u002F\u002F Get by name\nvar workspace = await workspaceCollection.GetAsync(\"my-playwright-workspace\");\n\n\u002F\u002F Or check if exists first\nbool exists = await workspaceCollection.ExistsAsync(\"my-playwright-workspace\");\nif (exists)\n{\n    var existingWorkspace = await workspaceCollection.GetAsync(\"my-playwright-workspace\");\n    Console.WriteLine($\"Workspace found: {existingWorkspace.Value.Data.Name}\");\n}\n```\n\n### 3. List Workspaces\n\n```csharp\n\u002F\u002F List in resource group\nawait foreach (var workspace in workspaceCollection.GetAllAsync())\n{\n    Console.WriteLine($\"Workspace: {workspace.Data.Name}\");\n    Console.WriteLine($\"  Location: {workspace.Data.Location}\");\n    Console.WriteLine($\"  State: {workspace.Data.ProvisioningState}\");\n    Console.WriteLine($\"  Data Plane URI: {workspace.Data.DataplaneUri}\");\n}\n\n\u002F\u002F List across subscription\nawait foreach (var workspace in subscription.GetPlaywrightWorkspacesAsync())\n{\n    Console.WriteLine($\"Workspace: {workspace.Data.Name}\");\n}\n```\n\n### 4. Update Workspace\n\n```csharp\nvar patch = new PlaywrightWorkspacePatch\n{\n    Tags =\n    {\n        [\"Team\"] = \"Dev Exp\",\n        [\"Environment\"] = \"Staging\",\n        [\"UpdatedAt\"] = DateTime.UtcNow.ToString(\"o\")\n    }\n};\n\nvar updatedWorkspace = await workspace.Value.UpdateAsync(patch);\n```\n\n### 5. Check Name Availability\n\n```csharp\nusing Azure.ResourceManager.Playwright.Models;\n\nvar checkRequest = new PlaywrightCheckNameAvailabilityContent\n{\n    Name = \"my-new-workspace\",\n    ResourceType = \"Microsoft.LoadTestService\u002FplaywrightWorkspaces\"\n};\n\nvar result = await subscription.CheckPlaywrightNameAvailabilityAsync(checkRequest);\n\nif (result.Value.IsNameAvailable == true)\n{\n    Console.WriteLine(\"Name is available!\");\n}\nelse\n{\n    Console.WriteLine($\"Name unavailable: {result.Value.Message}\");\n    Console.WriteLine($\"Reason: {result.Value.Reason}\");\n}\n```\n\n### 6. Get Quota Information\n\n```csharp\n\u002F\u002F Subscription-level quotas\nawait foreach (var quota in subscription.GetPlaywrightQuotasAsync(AzureLocation.WestUS3))\n{\n    Console.WriteLine($\"Quota: {quota.Data.Name}\");\n    Console.WriteLine($\"  Limit: {quota.Data.Limit}\");\n    Console.WriteLine($\"  Used: {quota.Data.Used}\");\n}\n\n\u002F\u002F Workspace-level quotas\nvar workspaceQuotas = workspace.Value.GetAllPlaywrightWorkspaceQuota();\nawait foreach (var quota in workspaceQuotas.GetAllAsync())\n{\n    Console.WriteLine($\"Workspace Quota: {quota.Data.Name}\");\n}\n```\n\n### 7. Delete Workspace\n\n```csharp\n\u002F\u002F Delete (long-running operation)\nawait workspace.Value.DeleteAsync(WaitUntil.Completed);\n```\n\n## Key Types Reference\n\n| Type | Purpose |\n|------|---------|\n| `ArmClient` | Entry point for all ARM operations |\n| `PlaywrightWorkspaceResource` | Represents a Playwright Testing workspace |\n| `PlaywrightWorkspaceCollection` | Collection for workspace CRUD |\n| `PlaywrightWorkspaceData` | Workspace creation\u002Fresponse payload |\n| `PlaywrightWorkspacePatch` | Workspace update payload |\n| `PlaywrightQuotaResource` | Subscription-level quota information |\n| `PlaywrightWorkspaceQuotaResource` | Workspace-level quota information |\n| `PlaywrightExtensions` | Extension methods for ARM resources |\n| `PlaywrightCheckNameAvailabilityContent` | Name availability check request |\n\n## Workspace Properties\n\n| Property | Description |\n|----------|-------------|\n| `DataplaneUri` | URI for running tests (e.g., `https:\u002F\u002Fapi.dataplane.{guid}.domain.com`) |\n| `WorkspaceId` | Unique workspace identifier (GUID) |\n| `RegionalAffinity` | Enable\u002Fdisable regional affinity for test execution |\n| `LocalAuth` | Enable\u002Fdisable local authentication (access tokens) |\n| `ProvisioningState` | Current provisioning state (Succeeded, Failed, etc.) |\n\n## Best Practices\n\n1. **Use `WaitUntil.Completed`** for operations that must finish before proceeding\n2. **Use `WaitUntil.Started`** when you want to poll manually or run operations in parallel\n3. **Always use `DefaultAzureCredential`** — never hardcode keys\n4. **Handle `RequestFailedException`** for ARM API errors\n5. **Use `CreateOrUpdateAsync`** for idempotent operations\n6. **Navigate hierarchy** via `Get*` methods (e.g., `resourceGroup.GetPlaywrightWorkspaces()`)\n7. **Store the DataplaneUri** after workspace creation for test execution configuration\n\n## Error Handling\n\n```csharp\nusing Azure;\n\ntry\n{\n    var operation = await workspaceCollection.CreateOrUpdateAsync(\n        WaitUntil.Completed, workspaceName, workspaceData);\n}\ncatch (RequestFailedException ex) when (ex.Status == 409)\n{\n    Console.WriteLine(\"Workspace already exists\");\n}\ncatch (RequestFailedException ex) when (ex.Status == 400)\n{\n    Console.WriteLine($\"Bad request: {ex.Message}\");\n}\ncatch (RequestFailedException ex)\n{\n    Console.WriteLine($\"ARM Error: {ex.Status} - {ex.ErrorCode}: {ex.Message}\");\n}\n```\n\n## Integration with Test Execution\n\nAfter creating a workspace, use the `DataplaneUri` to configure your Playwright tests:\n\n```csharp\n\u002F\u002F 1. Create workspace (this SDK)\nvar workspace = await workspaceCollection.CreateOrUpdateAsync(\n    WaitUntil.Completed, \"my-workspace\", workspaceData);\n\n\u002F\u002F 2. Get the service URL\nvar serviceUrl = workspace.Value.Data.DataplaneUri;\n\n\u002F\u002F 3. Set environment variable for test execution\nEnvironment.SetEnvironmentVariable(\"PLAYWRIGHT_SERVICE_URL\", serviceUrl.ToString());\n\n\u002F\u002F 4. Run tests using Azure.Developer.MicrosoftPlaywrightTesting.NUnit\n\u002F\u002F (separate package for test execution)\n```\n\n## Related SDKs\n\n| SDK | Purpose | Install |\n|-----|---------|---------|\n| `Azure.ResourceManager.Playwright` | Management plane (this SDK) | `dotnet add package Azure.ResourceManager.Playwright` |\n| `Azure.Developer.MicrosoftPlaywrightTesting.NUnit` | Run NUnit Playwright tests at scale | `dotnet add package Azure.Developer.MicrosoftPlaywrightTesting.NUnit --prerelease` |\n| `Azure.Developer.Playwright` | Playwright client library | `dotnet add package Azure.Developer.Playwright` |\n\n## API Information\n\n- **Resource Provider**: `Microsoft.LoadTestService`\n- **Default API Version**: `2025-09-01`\n- **Resource Type**: `Microsoft.LoadTestService\u002FplaywrightWorkspaces`\n\n## Documentation Links\n\n- [Azure.ResourceManager.Playwright API Reference](https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fdotnet\u002Fapi\u002Fazure.resourcemanager.playwright)\n- [Microsoft Playwright Testing Overview](https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fplaywright-testing\u002Foverview-what-is-microsoft-playwright-testing)\n- [Quickstart: Run Playwright Tests at Scale](https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fplaywright-testing\u002Fquickstart-run-end-to-end-tests)\n",{"name":5,"license":15,"metadata":58,"description":61},{"author":12,"package":59,"version":60},"Azure.ResourceManager.Playwright","1.0.0","Azure Resource Manager SDK for Microsoft Playwright Testing in .NET. Use for MANAGEMENT PLANE operations: creating\u002Fmanaging 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\".\n","main","3f5b461b2314e01c400564051e92469114c5b68f",".github\u002Fplugins\u002Fazure-sdk-dotnet\u002Fskills\u002Fazure-resource-manager-playwright-dotnet",368,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills","https:\u002F\u002Fmicrosoft.github.io\u002Fskills\u002F","https:\u002F\u002Fgithub.com\u002Fmicrosoft","https:\u002F\u002Fopensource.microsoft.com","Open source projects and samples from Microsoft","2026-11-14 02:08:41",{"source":8,"skillName":5,"commands":73,"prompt":83,"zipAvailable":84},[74,77,80],{"tool":75,"command":76},"npx","npx skills add microsoft\u002Fskills --skill azure-resource-manager-playwright-dotnet",{"tool":78,"command":79},"bunx","bunx skills add microsoft\u002Fskills --skill azure-resource-manager-playwright-dotnet",{"tool":81,"command":82},"pnpm","pnpm dlx skills add microsoft\u002Fskills --skill azure-resource-manager-playwright-dotnet","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills\u002Fblob\u002Fmain\u002F.github\u002Fplugins\u002Fazure-sdk-dotnet\u002Fskills\u002Fazure-resource-manager-playwright-dotnet\u002FSKILL.md",true,[],[87,111,149,176,196,232],{"skillNo":88,"name":89,"nameZh":6,"description":90,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":94,"publishedAt":53},"01M69B4JCRQV5SPXAFCKXQRV0H","skill-creator","Guide for creating effective skills for AI coding agents working with Azure SDKs and Microsoft Foundry services. Use when creating new skills or updating existing skills.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fskill-creator\u002FSKILL.md",[93],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[95,96,97,9,98,99,100,34,101,102,103,104,105,106,107,40,108,109,110],"skill creator","creator","coding agents","foundry","microsoft foundry","ai coding agents","services","coding","guide","use","ai coding","with","sdks","Existing","when","new",{"skillNo":112,"name":113,"nameZh":6,"description":114,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":115,"categories":116,"keywords":127,"publishedAt":53},"01M69B4FD57V1MYKRWAJJECTZ7","podcast-generation","Generate AI-powered podcast-style audio narratives using Azure OpenAI's GPT Realtime Mini model via WebSocket. Use when building text-to-speech features, audio narrative generation, podcast creation from content, or integrating with Azure OpenAI Realtime API for real audio output. Covers full-stack implementation from React frontend to Python FastAPI backend with WebSocket streaming.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fpodcast-generation\u002FSKILL.md",[117,120,123,126],{"categoryNo":118,"categoryName":119,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发",{"categoryNo":121,"categoryName":122,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":124,"categoryName":125,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[128,129,130,131,132,133,134,34,135,136,137,138,139,140,141,142,143,144,145,146,147,109,148],"podcast generation","podcast","generation","frontend","python","react","realtime","azure openai","generate","streaming","api","Audio","stack","text","model","fastapi","creation","python fastapi","narrative","features","fastapi backend",{"skillNo":150,"name":151,"nameZh":6,"description":152,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":153,"categories":154,"keywords":156,"publishedAt":53},"01M69B4CYPM5SESY5ZWEFDXEQZ","microsoft-docs","Understand Microsoft technologies by querying official documentation. Use whenever the user asks how something works, wants tutorials, needs configuration options, limits, quotas, or best practices for any Microsoft technology (Azure, .NET, M365, Windows, Power Platform, etc.)—even if they don't mention \"docs.\" If the question is about understanding a concept rather than writing code, this is the right skill.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fmicrosoft-docs\u002FSKILL.md",[155],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[157,9,158,159,160,161,162,163,164,165,166,34,167,168,169,104,170,75,171,172,173,174,175,40],"docs","microsoft docs","MCP","writing","cli","mcp server","windows","power platform","official","documentation","learn","best practices","question","power","back","technology","platform","learn mcp","concept",{"skillNo":177,"name":178,"nameZh":6,"description":179,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":180,"categories":181,"keywords":183,"publishedAt":53},"01M69B49C3YPD1ZJ3NC0HPCY58","mcp-builder","Guide for creating high-quality MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. Use when building MCP servers to integrate external APIs or services, whether in Python (FastMCP), Node\u002FTypeScript (MCP SDK), or C#\u002F.NET (Microsoft MCP SDK).","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fmcp-builder\u002FSKILL.md",[182],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[159,184,185,186,132,187,52,188,9,189,190,142,191,192,103,104,193,194,195,106,40,109],"mcp builder","builder","typescript","llms","model context protocol","fastmcp","Tools","node","context","integrate","mcp sdk","building mcp servers",{"skillNo":197,"name":198,"nameZh":6,"description":199,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":200,"categories":201,"keywords":212,"publishedAt":53},"01M69B467A7CDMFQ0T6Q0ZA12Q","kql","KQL language expertise for writing correct, efficient Kusto Query Language queries. Covers syntax gotchas, join patterns, dynamic types, datetime pitfalls, regex patterns, serialization, memory management, result-size discipline, and advanced functions (geo, vector, graph). USE THIS SKILL whenever writing, debugging, or reviewing KQL queries — even simple ones — because the gotchas section prevents the most common errors that waste tool calls and cause expensive retry cascades. Trigger on: KQL, Kusto, ADX, Azure Data Explorer, Fabric Real-Time Intelligence, EventHouse, Log Analytics, log analysis, data exploration, time series, anomaly detection, summarize, where clause, join, extend, project, let statement, parse operator, extract function, any mention of pipe-forward query syntax.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fkql\u002FSKILL.md",[202,205,206,209],{"categoryNo":203,"categoryName":204,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":207,"categoryName":208,"taxonomyType":29,"taxonomyTypeDesc":30},"01JBSEEDCAT000000000000033","数据分析师",{"categoryNo":210,"categoryName":211,"taxonomyType":29,"taxonomyTypeDesc":30},"01JBSEEDCAT000000000000036","内容创作者",[198,160,213,214,215,34,216,217,218,219,220,221,222,223,224,225,226,227,228,40,229,230,231],"summarize","memory","analytics","vector","time series","tool","discipline","log","geo","exploration","pipe","time","project","regex","join","datetime","section","anomaly","parse",{"skillNo":233,"name":234,"nameZh":6,"description":235,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":236,"categories":237,"keywords":238,"publishedAt":53},"01M69B44HJQ7897EZ7NE7DWQX3","github-issue-creator","Convert raw notes, error logs, voice dictation, or screenshots into crisp GitHub-flavored markdown issue reports. Use when the user pastes bug info, error messages, or informal descriptions and wants a structured GitHub issue. Supports images\u002FGIFs for visual evidence.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fgithub-issue-creator\u002FSKILL.md",[],[239,240,241,242,96,243,244,245,246,247,248,249,104,250,251,252,253,254,255,40,109],"github","github issue creator","github issue","issue","issue creator","screenshots","notes","logs","error messages","messages","convert","evidence","reports","images","info","visual","error"]