[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CS6WBRRYFBMDGF7T69G0MA":3,"skill-same:01M6CS6WBRRYFBMDGF7T69G0MA":114},{"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":23,"publishedAt":33,"linkOnly":34,"markdownContent":35,"markdownBody":36,"frontMatter":37,"refName":40,"commitSha":41,"skillDirectory":42,"forksCount":43,"repositoryHtmlUrl":44,"repositoryHomepageUrl":44,"ownerHtmlUrl":45,"ownerBlogUrl":6,"ownerDescription":46,"updatedAt":47,"install":48,"resources":61},"01M6CS6WBRRYFBMDGF7T69G0MA","azure-resource-manager-playwright-dotnet",null,"Azure Resource Manager SDK for Microsoft Playwright Testing in .NET.","Sam-06060\u002Fjarvis-assistant","Sam-06060","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F208600848?v=4","01M6CRKT7C7FXD21V6HXF293S0","Samson Frank Ganta","01M6CRKTBEKYFD8YX5Z1GT99EE",6,"Apache-2.0","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fazure-resource-manager-playwright-dotnet\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32],"playwright","dotnet","azure","azure resource manager playwright dotnet","testing","sdk","microsoft","playwright testing","community","2026-11-10 10:12:30",false,"---\nname: azure-resource-manager-playwright-dotnet\ndescription: Azure Resource Manager SDK for Microsoft Playwright Testing in .NET.\nrisk: unknown\nsource: community\ndate_added: '2026-02-27'\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>\n# For service principal auth (optional)\nAZURE_TENANT_ID=\u003Ctenant-id>\nAZURE_CLIENT_ID=\u003Cclient-id>\nAZURE_CLIENT_SECRET=\u003Cclient-secret>\n```\n\n## Authentication\n\n```csharp\nusing Azure.Identity;\nusing Azure.ResourceManager;\nusing Azure.ResourceManager.Playwright;\n\n\u002F\u002F Always use DefaultAzureCredential\nvar credential = new DefaultAzureCredential();\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\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\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>\n# For service principal auth (optional)\nAZURE_TENANT_ID=\u003Ctenant-id>\nAZURE_CLIENT_ID=\u003Cclient-id>\nAZURE_CLIENT_SECRET=\u003Cclient-secret>\n```\n\n## Authentication\n\n```csharp\nusing Azure.Identity;\nusing Azure.ResourceManager;\nusing Azure.ResourceManager.Playwright;\n\n\u002F\u002F Always use DefaultAzureCredential\nvar credential = new DefaultAzureCredential();\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\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n",{"name":5,"risk":38,"source":32,"date_added":39,"description":7},"unknown","2026-02-27","main","a50a3aa6b39fb0e1b7db88bef1bfc9c93606e126","modules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fazure-resource-manager-playwright-dotnet",0,"https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant","https:\u002F\u002Fgithub.com\u002FSam-06060","Mobile Application Developer | Kotlin | Flutter, KMP, Swfit, Android,Swift UI | Building at Saar It Resources | Creator of Jarvis (AI Assistant)","2026-06-23 05:13:38",{"source":8,"skillName":5,"commands":49,"prompt":59,"zipAvailable":60},[50,53,56],{"tool":51,"command":52},"npx","npx skills add Sam-06060\u002Fjarvis-assistant --skill azure-resource-manager-playwright-dotnet",{"tool":54,"command":55},"bunx","bunx skills add Sam-06060\u002Fjarvis-assistant --skill azure-resource-manager-playwright-dotnet",{"tool":57,"command":58},"pnpm","pnpm dlx skills add Sam-06060\u002Fjarvis-assistant --skill azure-resource-manager-playwright-dotnet","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fazure-resource-manager-playwright-dotnet\u002FSKILL.md",true,[62,68,74,78,82,86,90,94,98,102,106,110],{"path":63,"resourceType":64,"resourceTypeDesc":65,"sizeBytes":66,"sourceHtmlUrl":67},"assets\u002Fevals\u002Fhyper-debug-cases.jsonl","ASSET","资产文件",12202,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Falpoxdev\u002Fhypercore\u002Fskills\u002Fhyper-debug\u002Fassets\u002Fevals\u002Fhyper-debug-cases.jsonl",{"path":69,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":72,"sourceHtmlUrl":73},"references\u002Fruntime-evidence.ko.md","REFERENCE","参考文档",11519,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Falpoxdev\u002Fhypercore\u002Fskills\u002Fhyper-debug\u002Freferences\u002Fruntime-evidence.ko.md",{"path":75,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":76,"sourceHtmlUrl":77},"references\u002Fruntime-evidence.md",10710,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Falpoxdev\u002Fhypercore\u002Fskills\u002Fhyper-debug\u002Freferences\u002Fruntime-evidence.md",{"path":79,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":80,"sourceHtmlUrl":81},"rules\u002Ffix-and-proof.ko.md",8008,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Falpoxdev\u002Fhypercore\u002Fskills\u002Fhyper-debug\u002Frules\u002Ffix-and-proof.ko.md",{"path":83,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":84,"sourceHtmlUrl":85},"rules\u002Ffix-and-proof.md",7549,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Falpoxdev\u002Fhypercore\u002Fskills\u002Fhyper-debug\u002Frules\u002Ffix-and-proof.md",{"path":87,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":88,"sourceHtmlUrl":89},"rules\u002Fflaky-triage.ko.md",6930,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Falpoxdev\u002Fhypercore\u002Fskills\u002Fhyper-debug\u002Frules\u002Fflaky-triage.ko.md",{"path":91,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":92,"sourceHtmlUrl":93},"rules\u002Fflaky-triage.md",6294,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Falpoxdev\u002Fhypercore\u002Fskills\u002Fhyper-debug\u002Frules\u002Fflaky-triage.md",{"path":95,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":96,"sourceHtmlUrl":97},"rules\u002Fhypotheses-and-escalation.ko.md",7116,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Falpoxdev\u002Fhypercore\u002Fskills\u002Fhyper-debug\u002Frules\u002Fhypotheses-and-escalation.ko.md",{"path":99,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":100,"sourceHtmlUrl":101},"rules\u002Fhypotheses-and-escalation.md",6733,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Falpoxdev\u002Fhypercore\u002Fskills\u002Fhyper-debug\u002Frules\u002Fhypotheses-and-escalation.md",{"path":103,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":104,"sourceHtmlUrl":105},"rules\u002Fworking-loop.ko.md",7324,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Falpoxdev\u002Fhypercore\u002Fskills\u002Fhyper-debug\u002Frules\u002Fworking-loop.ko.md",{"path":107,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":108,"sourceHtmlUrl":109},"rules\u002Fworking-loop.md",6990,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Falpoxdev\u002Fhypercore\u002Fskills\u002Fhyper-debug\u002Frules\u002Fworking-loop.md",{"path":111,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":112,"sourceHtmlUrl":113},"SKILL.ko.md",18855,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Falpoxdev\u002Fhypercore\u002Fskills\u002Fhyper-debug\u002FSKILL.ko.md",[115,124,140,167,186,213],{"skillNo":116,"name":117,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":118,"categories":119,"keywords":121,"publishedAt":33},"01M6GDRVS6FXX3ESH0C9DW01C0","test_skill","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fscratch\u002Ftest_skill\u002FSKILL.md",[120],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[122,123],"Test Skill","test",{"skillNo":125,"name":126,"nameZh":6,"description":127,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":128,"categories":129,"keywords":130,"publishedAt":33},"01M6GDRQ40HX22MA6XWC31RHHK","zustand-store-ts","Create Zustand stores following established patterns with proper TypeScript types and middleware.","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fzustand-store-ts\u002FSKILL.md",[],[131,132,133,134,135,136,137,32,138,139],"zustand store ts","zustand","store","with","types","middleware","patterns","create","typescript",{"skillNo":141,"name":142,"nameZh":6,"description":143,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":144,"categories":145,"keywords":149,"publishedAt":33},"01M6GDRKEA0WE670SPFWX5GKCN","zoom-automation","Automate Zoom meeting creation, management, recordings, webinars, and participant tracking via Rube MCP (Composio). Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fzoom-automation\u002FSKILL.md",[146],{"categoryNo":147,"categoryName":148,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[150,151,152,153,154,155,156,157,158,159,160,161,162,163,32,164,165,166],"automation","zoom automation","zoom","first","Tools","search","MCP","via","meeting","automate","critical","creation","webinars","composio","recordings","management","tracking",{"skillNo":168,"name":169,"nameZh":6,"description":170,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":171,"categories":172,"keywords":174,"publishedAt":33},"01M6GDRFS1452PC71JQ38S24HR","zoho-crm-automation","Automate Zoho CRM tasks via Rube MCP (Composio): create\u002Fupdate records, search contacts, manage leads, and convert leads. Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fzoho-crm-automation\u002FSKILL.md",[173],{"categoryNo":147,"categoryName":148,"taxonomyType":21,"taxonomyTypeDesc":22},[175,150,176,177,178,179,180,32,155,181,163,182,160,159,154,183,138,184,156,185],"crm automation","zoho crm","crm","zoho crm automation","zoho","leads","contacts","records","update","tasks","manage",{"skillNo":187,"name":188,"nameZh":6,"description":189,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":190,"categories":191,"keywords":195,"publishedAt":33},"01M6GDRCKQBAVTGHX5XBH26KPZ","zod-validation-expert","Expert in Zod — TypeScript-first schema validation. Covers parsing, custom errors, refinements, type inference, and integration with React Hook Form, Next.js, and tRPC.","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fzod-validation-expert\u002FSKILL.md",[192],{"categoryNo":193,"categoryName":194,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发",[196,197,198,199,200,139,201,202,203,204,205,206,134,207,208,209,210,32,211,212],"expert","zod","zod validation expert","validation","react","safe","parsing","errors","schema validation","react hook form","hook","trpc","form","type","next","schema","Next.js",{"skillNo":214,"name":215,"nameZh":6,"description":216,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":217,"categories":218,"keywords":220,"publishedAt":33},"01M6GDR658B08K4MY0RWD4A6EH","zeroize-audit","Detects missing zeroization of sensitive data in source code and identifies zeroization removed by compiler optimizations, with assembly-level analysis, and control-flow verification. Use for auditing C\u002FC++\u002FRust code handling secrets, keys, passwords, or other sensitive data.","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fzeroize-audit\u002FSKILL.md",[219],{"categoryNo":147,"categoryName":148,"taxonomyType":21,"taxonomyTypeDesc":22},[221,222,223,224,225,226,227,228,32,229,230,231,232,233,234,235,236,237,238,156],"zeroize audit","audit","write","passwords","get","project","c++","activate","assembly","read","Bash","secrets","analysis","data","flow","verification","code","rust"]