[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-54e7fc9e-bb15-45a3-8dd2-9aee9428f060":3,"$fUkgkqnWvxg_xe4EZPIr6oTNfGudkoDTGubBvnVy-KCM":43},{"id":4,"title":5,"description":6,"categoryId":7,"moduleId":8,"tags":9,"prompt":10,"icon":11,"source":12,"sourceUrl":13,"authorId":14,"authorName":15,"isPublic":16,"stars":17,"runs":18,"createdAt":19,"updatedAt":19,"module":20,"category":27,"packages":34},"54e7fc9e-bb15-45a3-8dd2-9aee9428f060","azure-microsoft-playwright-testing-ts","以云托管浏览器和集成Azure门户报告的方式大规模运行Playwright测试。","cat_coding_review","mod_coding","sickn33,coding","---\nname: azure-microsoft-playwright-testing-ts\ndescription: \"Run Playwright tests at scale with cloud-hosted browsers and integrated Azure portal reporting.\"\nrisk: unknown\nsource: community\ndate_added: \"2026-02-27\"\n---\n\n# Azure Playwright Workspaces SDK for TypeScript\n\nRun Playwright tests at scale with cloud-hosted browsers and integrated Azure portal reporting.\n\n> **Migration Notice:** `@azure\u002Fmicrosoft-playwright-testing` is retired on **March 8, 2026**. Use `@azure\u002Fplaywright` instead. See [migration guide](https:\u002F\u002Faka.ms\u002Fmpt\u002Fmigration-guidance).\n\n## Installation\n\n```bash\n# Recommended: Auto-generates config\nnpm init @azure\u002Fplaywright@latest\n\n# Manual installation\nnpm install @azure\u002Fplaywright --save-dev\nnpm install @playwright\u002Ftest@^1.47 --save-dev\nnpm install @azure\u002Fidentity --save-dev\n```\n\n**Requirements:**\n- Playwright version 1.47+ (basic usage)\n- Playwright version 1.57+ (Azure reporter features)\n\n## Environment Variables\n\n```bash\nPLAYWRIGHT_SERVICE_URL=wss:\u002F\u002Feastus.api.playwright.microsoft.com\u002Fplaywrightworkspaces\u002F{workspace-id}\u002Fbrowsers\n```\n\n## Authentication\n\n### Microsoft Entra ID (Recommended)\n\n```bash\n# Sign in with Azure CLI\naz login\n```\n\n```typescript\n\u002F\u002F playwright.service.config.ts\nimport { defineConfig } from \"@playwright\u002Ftest\";\nimport { createAzurePlaywrightConfig, ServiceOS } from \"@azure\u002Fplaywright\";\nimport { DefaultAzureCredential } from \"@azure\u002Fidentity\";\nimport config from \".\u002Fplaywright.config\";\n\nexport default defineConfig(\n  config,\n  createAzurePlaywrightConfig(config, {\n    os: ServiceOS.LINUX,\n    credential: new DefaultAzureCredential(),\n  })\n);\n```\n\n### Custom Credential\n\n```typescript\nimport { ManagedIdentityCredential } from \"@azure\u002Fidentity\";\nimport { createAzurePlaywrightConfig } from \"@azure\u002Fplaywright\";\n\nexport default defineConfig(\n  config,\n  createAzurePlaywrightConfig(config, {\n    credential: new ManagedIdentityCredential(),\n  })\n);\n```\n\n## Core Workflow\n\n### Service Configuration\n\n```typescript\n\u002F\u002F playwright.service.config.ts\nimport { defineConfig } from \"@playwright\u002Ftest\";\nimport { createAzurePlaywrightConfig, ServiceOS } from \"@azure\u002Fplaywright\";\nimport { DefaultAzureCredential } from \"@azure\u002Fidentity\";\nimport config from \".\u002Fplaywright.config\";\n\nexport default defineConfig(\n  config,\n  createAzurePlaywrightConfig(config, {\n    os: ServiceOS.LINUX,\n    connectTimeout: 30000,\n    exposeNetwork: \"\u003Cloopback>\",\n    credential: new DefaultAzureCredential(),\n  })\n);\n```\n\n### Run Tests\n\n```bash\nnpx playwright test --config=playwright.service.config.ts --workers=20\n```\n\n### With Azure Reporter\n\n```typescript\nimport { defineConfig } from \"@playwright\u002Ftest\";\nimport { createAzurePlaywrightConfig, ServiceOS } from \"@azure\u002Fplaywright\";\nimport { DefaultAzureCredential } from \"@azure\u002Fidentity\";\nimport config from \".\u002Fplaywright.config\";\n\nexport default defineConfig(\n  config,\n  createAzurePlaywrightConfig(config, {\n    os: ServiceOS.LINUX,\n    credential: new DefaultAzureCredential(),\n  }),\n  {\n    reporter: [\n      [\"html\", { open: \"never\" }],\n      [\"@azure\u002Fplaywright\u002Freporter\"],\n    ],\n  }\n);\n```\n\n### Manual Browser Connection\n\n```typescript\nimport playwright, { test, expect, BrowserType } from \"@playwright\u002Ftest\";\nimport { getConnectOptions } from \"@azure\u002Fplaywright\";\n\ntest(\"manual connection\", async ({ browserName }) => {\n  const { wsEndpoint, options } = await getConnectOptions();\n  const browser = await (playwright[browserName] as BrowserType).connect(wsEndpoint, options);\n  const context = await browser.newContext();\n  const page = await context.newPage();\n\n  await page.goto(\"https:\u002F\u002Fexample.com\");\n  await expect(page).toHaveTitle(\u002FExample\u002F);\n\n  await browser.close();\n});\n```\n\n## Configuration Options\n\n```typescript\ntype PlaywrightServiceAdditionalOptions = {\n  serviceAuthType?: \"ENTRA_ID\" | \"ACCESS_TOKEN\";  \u002F\u002F Default: ENTRA_ID\n  os?: \"linux\" | \"windows\";                        \u002F\u002F Default: linux\n  runName?: string;                                \u002F\u002F Custom run name for portal\n  connectTimeout?: number;                         \u002F\u002F Default: 30000ms\n  exposeNetwork?: string;                          \u002F\u002F Default: \u003Cloopback>\n  credential?: TokenCredential;                    \u002F\u002F REQUIRED for Entra ID\n};\n```\n\n### ServiceOS Enum\n\n```typescript\nimport { ServiceOS } from \"@azure\u002Fplaywright\";\n\n\u002F\u002F Available values\nServiceOS.LINUX   \u002F\u002F \"linux\" - default\nServiceOS.WINDOWS \u002F\u002F \"windows\"\n```\n\n### ServiceAuth Enum\n\n```typescript\nimport { ServiceAuth } from \"@azure\u002Fplaywright\";\n\n\u002F\u002F Available values\nServiceAuth.ENTRA_ID      \u002F\u002F Recommended - uses credential\nServiceAuth.ACCESS_TOKEN  \u002F\u002F Use PLAYWRIGHT_SERVICE_ACCESS_TOKEN env var\n```\n\n## CI\u002FCD Integration\n\n### GitHub Actions\n\n```yaml\nname: playwright-ts\non: [push, pull_request]\n\npermissions:\n  id-token: write\n  contents: read\n\njobs:\n  test:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions\u002Fcheckout@v4\n\n      - name: Azure Login\n        uses: azure\u002Flogin@v2\n        with:\n          client-id: ${{ secrets.AZURE_CLIENT_ID }}\n          tenant-id: ${{ secrets.AZURE_TENANT_ID }}\n          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}\n\n      - run: npm ci\n      \n      - name: Run Tests\n        env:\n          PLAYWRIGHT_SERVICE_URL: ${{ secrets.PLAYWRIGHT_SERVICE_URL }}\n        run: npx playwright test -c playwright.service.config.ts --workers=20\n```\n\n### Azure Pipelines\n\n```yaml\n- task: AzureCLI@2\n  displayName: Run Playwright Tests\n  env:\n    PLAYWRIGHT_SERVICE_URL: $(PLAYWRIGHT_SERVICE_URL)\n  inputs:\n    azureSubscription: My_Service_Connection\n    scriptType: pscore\n    inlineScript: |\n      npx playwright test -c playwright.service.config.ts --workers=20\n    addSpnToEnvironment: true\n```\n\n## Key Types\n\n```typescript\nimport {\n  createAzurePlaywrightConfig,\n  getConnectOptions,\n  ServiceOS,\n  ServiceAuth,\n  ServiceEnvironmentVariable,\n} from \"@azure\u002Fplaywright\";\n\nimport type {\n  OsType,\n  AuthenticationType,\n  BrowserConnectOptions,\n  PlaywrightServiceAdditionalOptions,\n} from \"@azure\u002Fplaywright\";\n```\n\n## Migration from Old Package\n\n| Old (`@azure\u002Fmicrosoft-playwright-testing`) | New (`@azure\u002Fplaywright`) |\n|---------------------------------------------|---------------------------|\n| `getServiceConfig()` | `createAzurePlaywrightConfig()` |\n| `timeout` option | `connectTimeout` option |\n| `runId` option | `runName` option |\n| `useCloudHostedBrowsers` option | Removed (always enabled) |\n| `@azure\u002Fmicrosoft-playwright-testing\u002Freporter` | `@azure\u002Fplaywright\u002Freporter` |\n| Implicit credential | Explicit `credential` parameter |\n\n### Before (Old)\n\n```typescript\nimport { getServiceConfig, ServiceOS } from \"@azure\u002Fmicrosoft-playwright-testing\";\n\nexport default defineConfig(\n  config,\n  getServiceConfig(config, {\n    os: ServiceOS.LINUX,\n    timeout: 30000,\n    useCloudHostedBrowsers: true,\n  }),\n  {\n    reporter: [[\"@azure\u002Fmicrosoft-playwright-testing\u002Freporter\"]],\n  }\n);\n```\n\n### After (New)\n\n```typescript\nimport { createAzurePlaywrightConfig, ServiceOS } from \"@azure\u002Fplaywright\";\nimport { DefaultAzureCredential } from \"@azure\u002Fidentity\";\n\nexport default defineConfig(\n  config,\n  createAzurePlaywrightConfig(config, {\n    os: ServiceOS.LINUX,\n    connectTimeout: 30000,\n    credential: new DefaultAzureCredential(),\n  }),\n  {\n    reporter: [\n      [\"html\", { open: \"never\" }],\n      [\"@azure\u002Fplaywright\u002Freporter\"],\n    ],\n  }\n);\n```\n\n## Best Practices\n\n1. **Use Entra ID auth** — More secure than access tokens\n2. **Provide explicit credential** — Always pass `credential: new DefaultAzureCredential()`\n3. **Enable artifacts** — Set `trace: \"on-first-retry\"`, `video: \"retain-on-failure\"` in config\n4. **Scale workers** — Use `--workers=20` or higher for parallel execution\n5. **Region selection** — Choose region closest to your test targets\n6. **HTML reporter first** — When using Azure reporter, list HTML reporter before Azure reporter\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.\n","","imported","https:\u002F\u002Fgithub.com\u002Fsickn33\u002Fantigravity-awesome-skills","user_system_seed","SkillOPIC",true,162,1022,"2026-05-16 13:07:09",{"id":8,"name":21,"slug":22,"icon":23,"description":24,"sort":25,"createdAt":26},"编程开发","coding","mdi-code-braces","代码生成、调试、审查，提升开发效率",2,"2026-05-16 12:53:40",{"id":7,"name":28,"slug":29,"icon":30,"description":31,"moduleId":8,"sort":32,"skillCount":33,"createdAt":26},"代码审查","review","mdi-magnify-scan","代码质量分析、安全审查",4,145,[35],{"id":36,"skillId":4,"version":37,"fileName":38,"fileSize":39,"filePath":40,"fileHash":41,"manifest":42,"createdAt":19},"e2ff06fd-25ca-4f83-ae24-c47294983f1a","1.0.0","azure-microsoft-playwright-testing-ts.zip",2686,"uploads\u002Fskills\u002F54e7fc9e-bb15-45a3-8dd2-9aee9428f060\u002Fazure-microsoft-playwright-testing-ts.zip","1dff37c59e8d1726ec73d92fb6ab0460e3b483f48d6d7370e88edb6b94f3ecb7","[{\"path\":\"SKILL.md\",\"isDirectory\":false,\"size\":8275}]",{"code":44,"message":45,"data":46},200,"success",{"items":47,"stats":48,"page":51},[],{"averageRating":49,"totalRatings":49,"ratingCounts":50},0,[49,49,49,49,49],{"limit":52,"offset":49,"hasMore":53,"nextOffset":52,"ratedOnly":16},15,false]