> ## Documentation Index
>
> Fetch the complete documentation index at: [/docs/llms.txt](/content/docs/llms.txt)
>
> Use this file to discover all available pages before exploring further.

[Skip to main content](/content/docs/integrations/playwright#content-area/index.html)

Assistant

Responses are generated using AI and may contain mistakes.

Playwright is a popular end-to-end testing framework for web applications.Namespace provides high-performance caching for [Playwright](https://playwright.dev/) test runs.
By using [Cache Volumes](/content/docs/solutions/github-actions/caching#using-a-cache-volume/index.html), you can cache
Playwright’s browser binaries and system dependencies across workflow runs, significantly reducing
test setup time.Making full use of the CPUs on our high-performance [Compute Platform](/content/docs/architecture/compute/index.html)
reduces test times by running tests faster and in parallel.

## [​](/content/docs/integrations/playwright\#getting-started/index.html)  Getting started

1

[Navigate to header](/content/docs/integrations/playwright#enable-caching-on-your-runner-profile/index.html)

### Enable caching on your runner profile

Go to your [runner profile configuration](https://cloud.namespace.so/workspace/actions/profiles) and enable caching.

2

[Navigate to header](/content/docs/integrations/playwright#add-the-cache-action-to-your-workflow/index.html)

### Add the cache action to your workflow

Use [`namespacelabs/nscloud-cache-action`](/content/docs/reference/github-actions/nscloud-cache-action/index.html) to
cache Playwright browsers and apt packages:

```
- name: Set up cache
  uses: namespacelabs/nscloud-cache-action@v1
  with:
    cache: |
      playwright
      apt
```

The `playwright` cache mode stores downloaded browsers, and `apt` caches system packages so that
`playwright install --with-deps` runs faster on subsequent runs.

3

[Navigate to header](/content/docs/integrations/playwright#cache-npm-dependencies/index.html)

### Cache npm dependencies

In addition to Playwright browsers, you can also cache your package manager’s dependencies:

- npm

- pnpm

- yarn

For npm, add the `npm` cache mode:

```
- name: Set up cache
  uses: namespacelabs/nscloud-cache-action@v1
  with:
    cache: |
      playwright
      apt
      npm
```

For pnpm, add the `pnpm` cache mode:

```
- name: Set up cache
  uses: namespacelabs/nscloud-cache-action@v1
  with:
    cache: |
      playwright
      apt
      pnpm
```

For yarn, add the `yarn` cache mode:

```
- name: Set up cache
  uses: namespacelabs/nscloud-cache-action@v1
  with:
    cache: |
      playwright
      apt
      yarn
```

4

[Navigate to header](/content/docs/integrations/playwright#install-and-run-playwright-as-usual/index.html)

### Install and run Playwright as usual

After setting up the cache, install dependencies and run Playwright as you normally would:

```
- name: Install dependencies
  run: npm ci

- name: Install Playwright browsers
  run: npx playwright install --with-deps

- name: Run Playwright tests
  run: npx playwright test
```

## [​](/content/docs/integrations/playwright\#what-gets-cached/index.html)  What gets cached

| Cache | What’s cached |
| --- | --- |
| Playwright | Browser binaries downloaded by Playwright (Chromium, Firefox, WebKit) |
| APT | System packages installed via apt, including browser dependencies |
| npm / pnpm / yarn | Package manager cache for faster dependency installation |

See the [`nscloud-cache-action`](/content/docs/reference/github-actions/nscloud-cache-action/index.html) documentation for
all available cache modes and configuration options.

## [​](/content/docs/integrations/playwright\#next-steps/index.html)  Next steps

### [​](/content/docs/integrations/playwright\#increase-the-number-of-workers/index.html)  Increase the number of workers

Playwright’s default configuration uses only 1 worker when it detects a CI environment. To make better use of the
available cores, you can increase this for faster test execution. A good starting point is 75% of the available cores—adjust
this depending on your workload:

```
- name: Run Playwright tests
  run: npx playwright test --workers 75%
```

You can also [configure this in your Playwright configuration](https://playwright.dev/docs/test-parallel#limit-workers).

### [​](/content/docs/integrations/playwright\#upload-test-reports/index.html)  Upload test reports

Use [`namespace-actions/upload-artifact`](/content/docs/reference/github-actions/upload-artifact/index.html) to
upload Playwright’s HTML report for easy debugging:

```
- uses: namespace-actions/upload-artifact@v1
  if: ${{ !cancelled() }}
  with:
    name: playwright-report
    path: playwright-report/
    retention-days: 30
```

The `if: ${{ !cancelled() }}` condition ensures the report is uploaded even when tests fail.

## [​](/content/docs/integrations/playwright\#full-example/index.html)  Full example

Here’s a complete workflow using Namespace runners with caching:

```
name: Playwright Tests

on:
  push:
    branches: [main]
  pull_request:

jobs:
  test:
    timeout-minutes: 60
    runs-on: namespace-profile-playwright
    steps:
      - uses: namespacelabs/nscloud-checkout-action@v7

- uses: actions/setup-node@v6
        with:
          node-version: lts/*
          package-manager-cache: false # Use Namespace toolchain caching instead
          cache: ""

- name: Set up cache
        uses: namespacelabs/nscloud-cache-action@v1
        with:
          cache: |
            playwright
            apt
            npm

- name: Install dependencies
        run: npm ci

- name: Install Playwright browsers
        run: npx playwright install --with-deps

- name: Run Playwright tests
        run: npx playwright test --workers 75%

- uses: namespace-actions/upload-artifact@v1
        if: ${{ !cancelled() }}
        with:
          name: playwright-report
          path: playwright-report/
          retention-days: 30
```

View the full example repository at [namespace-integration-demos/playwright](https://github.com/namespace-integration-demos/playwright).

## [​](/content/docs/integrations/playwright\#advanced-pre-install-browsers-and-system-dependencies/index.html)  Advanced: pre-install browsers and system dependencies

For the fastest and most consistent job startup, pre-install Playwright’s browsers and system
dependencies directly into your runner profile with a
[custom base image](/content/docs/solutions/github-actions/custom-base-images/index.html). This removes the browser
download and `apt-get` install from every job, so workflows start running tests immediately:

```
ARG NAMESPACE_BASE_IMAGE_REF=""
FROM ${NAMESPACE_BASE_IMAGE_REF} AS base

RUN npx -y playwright@1.49.0 install --with-deps chromium
```

Pin the Playwright version to match your `package.json`; if the versions diverge, Playwright will
re-download the matching browser at runtime. With this in place, your workflow can drop
`--with-deps` and run plain `npx playwright install` (or skip the install step entirely if the
versions match).

Last modified onSeptember 22, 2026

Ctrl+I

{"docsConfig":{"theme":"almond","$schema":"https://mintlify.com/docs.json","name":"Namespace Documentation","colors":{"primary":"#1C32FF","light":"#6B78FF","dark":"#1C32FF"},"logo":{"light":"https://mintcdn.com/namespace-labs/qOJQ7kaWRgoS8lyv/logo-light.svg?fit=max\\u0026auto=format\\u0026n=qOJQ7kaWRgoS8lyv\\u0026q=85\\u0026s=6827b0c81c335badc1cef13b83383e1d","dark":"https://mintcdn.com/namespace-labs/qOJQ7kaWRgoS8lyv/logo-dark.svg?fit=max\\u0026auto=format\\u0026n=qOJQ7kaWRgoS8lyv\\u0026q=85\\u0026s=63702d83d8fb259023deb79db06aabbb","href":"https://namespace.so"},"favicon":"https://mintcdn.com/namespace-labs/MoefQ379UcpNU680/favicon.svg?fit=max\\u0026auto=format\\u0026n=MoefQ379UcpNU680\\u0026q=85\\u0026s=6f14a088da55e5f41847845796737353","navbar":{"links":\[{"href":"https://namespace.so/changelog","label":"Changelog"},{"href":"https://namespace.so/support","label":"Support"}\],"primary":{"type":"button","label":"Log in","href":"https://cloud.namespace.so"}},"footer":{"socials":{"github":"https://github.com/namespacelabs","linkedin":"https://www.linkedin.com/company/namespacelabs","x":"https://x.com/namespacelabs"}},"icons":{"library":"lucide"},"contextual":{"options":\["copy","view","chatgpt","claude"\],"display":"header"},"interaction":{"drilldown":false},"metadata":{"timestamp":true},"styling":{"latex":true},"navigation":{"global":{"anchors":\[{"anchor":"Changelog","icon":"history","href":"https://namespace.so/changelog"},{"anchor":"Trust Center (SOC2)","icon":"shield-check","href":"https://trust.namespace.so/"},{"anchor":"Status","icon":"activity","href":"https://namespace-status.com/"},{"anchor":"Support","icon":"message-circle","href":"https://namespace.so/support"}\]},"pages":\[\]}},"deployment":{"deploymentMetadataValue":{"subdomain":"namespace-labs","hasAudioNarration":false,"actualSubdomain":"namespace-labs","customDomains":\["namespace.so"\],"gitSource":{"type":"github","owner":"namespacelabs","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6ae0862207896b4595e1934b","collectionId":"847aecca-4a0b-40b4-a393-e976cc214b43","liveDeploymentHistoryId":"6ae0862207896b4595e1934b","schemaVersion":"v3"},"entitlements":{"AI\_CHAT":{"status":"ENABLED"},"WEB\_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae0a8f6edbd4c098a94623c","clientVersion":"0.0.3971","searchFilterCounts":\[{"language":"default","tag":"Products","count":377},{"language":"default","tag":"CLI","count":166},{"language":"default","tag":"Command line","count":165},{"language":"default","tag":"Namespace CLI","count":131},{"language":"default","tag":"Documentation","count":104},{"language":"default","tag":"GitHub Actions","count":40},{"language":"default","tag":"Devbox CLI","count":34},{"language":"default","tag":"Integrations","count":33},{"language":"default","tag":"SDK","count":25},{"language":"default","tag":"Namespace SDK","count":23}\]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"/docs","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":\[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature\_enabled":true},"impressionData":false}\],"isAtlas":false,"googleFontsInlined":true},"customCss":\[{"filePath":"snippets/diagrams/styles.css","content":".ns-diagram{--ns-diagram-background:#ffffff;--ns-diagram-grid:#e5e7ee;--ns-diagram-border:#e5e7ee;--ns-diagram-card:#ffffff;--ns-diagram-neutral-zone:#fafbfc;--ns-diagram-brand-zone-start:rgba(28, 50, 255, 0.04);--ns-diagram-brand-zone-end:rgba(28, 50, 255, 0.07);--ns-diagram-brand-border:#c8ceff;--ns-diagram-heading:#202938;--ns-diagram-muted:#8892a6;--ns-diagram-copy:#4a5468;position:relative;width:100%;margin:2rem 0;padding:clamp(20px,3.5vw,32px);overflow:hidden;color:var(--ns-diagram-heading);background:var(--ns-diagram-background);border:1px solid var(--ns-diagram-border);border-radius:20px;box-shadow:0 1px 0 rgba(32,41,56,.04),0 1px 2px rgba(32,41,56,.06)}.dark .ns-diagram{--ns-diagram-background:#111827;--ns-diagram-grid:#374151;--ns-diagram-border:#374151;--ns-diagram-card:#1f2937;--ns-diagram-neutral-zone:#171f2d;--ns-diagram-brand-zone-start:rgba(107, 120, 255, 0.1);--ns-diagram-brand-zone-end:rgba(107, 120, 255, 0.16);--ns-diagram-brand-border:#4f5fc7;--ns-diagram-heading:#f3f4f6;--ns-diagram-muted:#aeb6c5;--ns-diagram-copy:#cbd5e1}.ns-diagram-grid-background{position:absolute;inset:0;pointer-events:none;background-image:radial-gradient(circle,var(--ns-diagram-grid) 1px,transparent 1px);background-size:16px 16px;opacity:.5;mask-image:linear-gradient(180deg,transparent 0,#000 10%,#000 90%,transparent 100%)}.ns-diagram-content{position:relative}.ns-diagram-caption{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.ns-diagram-mark{display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;margin:0;border-radius:8px}.ns-diagram-mark-anthropic{color:#d97757;background:#fcefe8}.ns-diagram-mark-devin{color:#4338ca;background:#eef0ff}.ns-diagram-mark-cursor{color:#111827;background:#eef0f3}.ns-diagram-mark-control{color:#1c32ff;background:#e0e7ff}.ns-diagram-mark-terminal{color:#fff;background:#202938}.ns-diagram-mark-worker{color:#4338ca;background:#eef1ff}.ns-diagram-zone{position:relative;display:flex;flex-direction:column;padding:1.25rem;background:var(--ns-diagram-neutral-zone);border:1px dashed #d2d6e0;border-radius:14px}.dark .ns-diagram-zone{border-color:#4b5563}.ns-diagram-zone-brand{background:linear-gradient(180deg,var(--ns-diagram-brand-zone-start),var(--ns-diagram-brand-zone-end));border:1px solid var(--ns-diagram-brand-border)}.ns-diagram-zone-header{display:flex;align-items:center;gap:.5rem;margin-bottom:.75rem;color:var(--ns-diagram-copy);font-size:11px;font-weight:600;letter-spacing:.1em;text-transform:uppercase}.ns-diagram-zone-center{display:flex;flex:1;align-items:center}.ns-diagram-zone-center>\*{width:100%}.ns-diagram-card{position:relative;display:flex;align-items:center;gap:1rem;min-width:0;padding:1rem 1.25rem;background:var(--ns-diagram-card);border:1px solid var(--ns-diagram-border);border-radius:12px;box-shadow:0 1px 0 rgba(32,41,56,.04),0 1px 2px rgba(32,41,56,.06)}.ns-diagram-card-brand{border-color:var(--ns-diagram-brand-border)}.ns-diagram-card-copy{display:flex;min-width:0;flex-direction:column}.ns-diagram-card-label{color:var(--ns-diagram-heading);font-size:16px;font-weight:600;line-height:1.25;letter-spacing:-.01em}.ns-diagram-card-sublabel{margin-top:.125rem;color:var(--ns-diagram-muted);font-size:12px;line-height:1.35}.ns-managed-layout{display:grid;grid-template-columns:1fr auto 1.05fr;align-items:stretch}.ns-managed-connector{display:flex;width:64px;flex-direction:column;align-items:center;justify-content:center;padding:0 .25rem;color:var(--ns-diagram-muted);font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:10.5px}.ns-managed-connector>span{margin-bottom:.375rem}.ns-managed-connector-path{display:flex;width:56px;align-items:center}.ns-managed-connector-line{flex:1;height:1.5px;background:#d2d6e0}.ns-managed-connector-arrow{border-top:6px solid transparent;border-bottom:6px solid transparent;border-left:9px solid #d2d6e0}.ns-mini-connector{display:flex;flex-direction:column;align-items:center;padding:.375rem 0}.ns-mini-connector>div{width:1.5px;height:12px;background:var(--ns-diagram-brand-border)}.ns-mini-connector>span{border-top:7px solid var(--ns-diagram-brand-border);border-right:5px solid transparent;border-left:5px solid transparent}.ns-devin-devboxes,.ns-devin-sessions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1.5rem}.ns-devin-mobile-layout{display:none}.ns-devin-connectors,.ns-devin-connectors>div{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.ns-devin-connectors{gap:1.5rem}.ns-devin-connectors>div{padding:0 1rem}.ns-devin-connector{position:relative;display:flex;min-height:110px;align-items:center;justify-content:center;color:var(--ns-diagram-copy);font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:10px;line-height:1.25;text-align:center}.ns-devin-management-connector{min-height:70px;color:#6366f1}.ns-devin-connector-line{position:absolute;top:0;bottom:0;left:50%;width:1.5px;background:#d2d6e0;transform:translateX(-50%)}.ns-devin-management-connector .ns-devin-connector-line,.ns-diagram-connector-dashed .ns-diagram-vertical-line{width:0;background:0 0;border-left:1.5px dashed var(--ns-diagram-brand-border)}.ns-devin-connector>span,.ns-diagram-vertical-connector>span{position:relative;z-index:1;padding:0 .375rem;background:var(--ns-diagram-background)}.ns-control-plane-pill{display:flex;align-items:center;align-self:center;gap:.375rem;margin-bottom:1rem;padding:.375rem .75rem;color:#4338ca;background:#eef1ff;border:1px solid var(--ns-diagram-brand-border);border-radius:999px;font-size:12px;font-weight:500}.ns-diagram-vertical-connector{position:relative;display:flex;align-items:center;justify-content:center;color:var(--ns-diagram-copy);font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:10px;line-height:1.25;text-align:center}.ns-diagram-vertical-line{position:absolute;top:0;bottom:0;left:50%;width:1.5px;background:#d2d6e0;transform:translateX(-50%)}.ns-diagram-connector-dashed{color:#6366f1}.ns-diagram-arrow-down{position:absolute;bottom:0;left:50%;border-top:8px solid #d2d6e0;border-right:5px solid transparent;border-left:5px solid transparent;transform:translateX(-50%)}.ns-devin-management-connector .ns-diagram-arrow-down,.ns-diagram-connector-dashed .ns-diagram-arrow-down{border-top-color:var(--ns-diagram-brand-border)}.ns-bazel-connector-inset{padding:0 1rem}.ns-bazel-workers{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}@media (max-width:767px){.ns-managed-layout{grid-template-columns:1fr}.ns-managed-connector{position:relative;width:auto;min-height:64px;padding:.5rem 0}.ns-managed-connector-path{width:auto;flex-direction:column}.ns-managed-connector-line{width:1.5px;height:24px;flex:none}.ns-managed-connector-arrow{border-top:9px solid #d2d6e0;border-right:6px solid transparent;border-bottom:0;border-left:6px solid transparent}.ns-devin-connectors,.ns-devin-devboxes,.ns-devin-sessions{grid-template-columns:1fr}.ns-devin-desktop-layout{display:none}.ns-devin-mobile-layout{display:block}.ns-devin-mobile-lane+.ns-devin-mobile-lane{margin-top:1.5rem;padding-top:1.5rem;border-top:1px solid var(--ns-diagram-border)}.ns-devin-mobile-connectors{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));padding:0 .5rem}.ns-devin-connector{min-height:80px}.ns-bazel-workers{grid-template-columns:1fr}}"},{"filePath":"style.css","content":":root{--namespace-radius-inline:0.25rem;--namespace-radius-control:0.375rem;--namespace-radius-container:0.5rem}#content-container,.almond-layout>div,.card,.chat-assistant-floating-input>div,.code-block,.frame,.pagination-next,.pagination-prev{border-radius:var(--namespace-radius-container)}.code-block \[data-component-part=code-block-root\],.frame>div{border-radius:inherit}#assistant-entry,#chat-assistant-textarea,#search-bar-entry,#search-input,.callout,.frame>.relative{border-radius:var(--namespace-radius-control)}.code-block-fade-overlay{border-radius:0 var(--namespace-radius-container) var(--namespace-radius-container) 0}#page-context-menu>button:first-child{border-radius:var(--namespace-radius-control) 0 0 var(--namespace-radius-control)}#page-context-menu>button:last-child{border-radius:0 var(--namespace-radius-control) var(--namespace-radius-control) 0}#content :not(pre)>code,#navigation-items li>a,#navigation-items li>button{border-radius:var(--namespace-radius-inline)}#navigation-items .nav-anchor>:is(svg, img),#navigation-items .sidebar-group-icon,#navigation-items \[data-component-part=scroll-area-content\]:has(>ul.nav-anchors),#navigation-items li>:is(a, button)>div\[class~=\\"h-\[1lh\]\\"\]:first-child{display:flex;flex-direction:column}#navigation-items \[data-component-part=scroll-area-content\]>ul.nav-anchors{order:1;margin-top:1rem;padding-top:1rem;border-top:1px solid color-mix(in srgb,currentColor 10%,transparent)}#navigation-items \[data-component-part=scroll-area-content\]>ul.sidebar-group{margin-top:.5rem}#navigation-items \[data-component-part=scroll-area-content\]>ul.sidebar-group+div{margin-top:1rem}.tab-container{overflow:hidden;padding:0 1rem 1rem;border:1px solid color-mix(in srgb,currentColor 12%,transparent);border-radius:var(--namespace-radius-container)}.tab-container \[data-component-part=tab-content\]>\[data-table-wrapper\]:last-child{margin-bottom:0;padding-bottom:0}#content .katex-display>.katex{text-align:left}.compact-table table td{min-width:0}#navigation-items ul.sidebar-group>li.space-y-px+li.space-y-px{margin-top:.75rem}#navigation-items .my-2>.sidebar-group-header{margin-bottom:.625rem;font-size:.8125rem;line-height:1.625rem;font-weight:600;letter-spacing:-.02em;text-transform:none;opacity:1}#navigation-items ul.sidebar-group>li.space-y-px>button{font-size:.8125rem;font-weight:600;letter-spacing:-.02em;background-color:transparent}#navigation-items ul.sidebar-group>li.space-y-px>button:hover,#navigation-items ul.sidebar-group>li.space-y-px>ul>li.space-y-px>button:hover{background-color:color-mix(in srgb,currentColor 6%,transparent)}#navigation-items ul.sidebar-group>li.space-y-px>ul>li.space-y-px>button,#navigation-items ul.sidebar-group>li.space-y-px>ul>li>a{padding-left:3rem!important;font-size:.8125rem;font-weight:400;letter-spacing:-.02em}#navigation-items ul.sidebar-group>li.space-y-px>ul>li.space-y-px>ul>li\[data-active-nav-item=true\]>a,#navigation-items ul.sidebar-group>li.space-y-px>ul>li\[data-active-nav-item=true\]>a{color:#121516!important;background-color:rgb(18 21 22/6%)!important}.dark #navigation-items ul.sidebar-group>li.space-y-px>ul>li.space-y-px>ul>li\[data-active-nav-item=true\]>a,.dark #navigation-items ul.sidebar-group>li.space-y-px>ul>li\[data-active-nav-item=true\]>a{color:#f4f4f5!important;background-color:rgb(255 255 255/8%)!important}#navigation-items ul.sidebar-group>li.space-y-px>ul>li.space-y-px>button{background-color:transparent}#navigation-items ul.sidebar-group>li.space-y-px>ul>li.space-y-px>button>div\[class~=\\"h-\[1lh\]\\"\]:first-child{margin-left:-1.75rem}.dark #navigation-items img\[src\*=buildkite-mark\]{filter:brightness(.7)}.dark img\[src\*=\\"/icons/apple.svg\\"\]{filter:invert(1)}.dark img.tab-icon\[src\*=\\"/icons/linux.svg\\"\]{filter:invert(.35) brightness(1.54)}#navigation-items ul.sidebar-group>li.space-y-px>ul>li.space-y-px>ul>li>a{padding-left:4rem!important;font-size:.8125rem;font-weight:400;letter-spacing:-.02em}@media (min-width:1024px){#sidebar-content{width:calc(16.5rem + 10px)}#content-container{margin-left:calc(16.5rem + 10px)}#navbar{container-type:inline-size}#navbar .nav-tabs{position:fixed;top:0;left:20rem;height:3.5rem;column-gap:2rem}#navbar div:has(>div>.nav-tabs){justify-content:flex-end}@container (max-width: 69rem){#navbar .navbar-link:has(>a\[href=\\"https://namespace.so/changelog\\"\]){display:none}}}@media (min-width:1280px){#content-container{padding-right:1.5rem;padding-left:3rem}#content-container>div{column-gap:1.5rem;justify-content:flex-start}#content-area{width:calc(100% - 13.5rem);max-width:52rem;flex:none}#content-side-layout{width:15rem;max-width:15rem;flex-basis:15rem}#content-side-layout>div{width:15rem;padding-left:1rem}#content-side-layout>div>div{width:14rem}}@media (min-width:1700px){#content-container>div{justify-content:center}}"},{"filePath":"reference/github-actions/runner-configuration.css","content":""},{"filePath":"workspaces/access.css","content":""},{"filePath":"platform/workspaces/access.css","content":""},{"filePath":"reference/devbox-cli/desktop.css","content":""}\],"page":{"pagePath":"integrations/playwright","slug":"/integrations/playwright","pageMetadata":{"title":"Playwright","description":null,"href":"/integrations/playwright"},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\\"use strict\\";const{Fragment:\_Fragment,jsx:\_jsx,jsxs:\_jsxs}=arguments\[0\];const{useMDXComponents:\_provideComponents}=arguments\[0\];function \_createMdxContent(props){const \_components={a:\`a\`,code:\`code\`,p:\`p\`,pre:\`pre\`,span:\`span\`,tbody:\`tbody\`,td:\`td\`,th:\`th\`,thead:\`thead\`,tr:\`tr\`,...\_provideComponents(),...props.components},{CodeBlock,Frame,Heading,OptimizedImage,Step,Steps,Tab,Table,Tabs}=\_components;if(!CodeBlock)\_missingMdxReference(\`CodeBlock\`,true);if(!Frame)\_missingMdxReference(\`Frame\`,true);if(!Heading)\_missingMdxReference(\`Heading\`,true);if(!OptimizedImage)\_missingMdxReference(\`OptimizedImage\`,true);if(!Step)\_missingMdxReference(\`Step\`,true);if(!Steps)\_missingMdxReference(\`Steps\`,true);if(!Tab)\_missingMdxReference(\`Tab\`,true);if(!Table)\_missingMdxReference(\`Table\`,true);if(!Tabs)\_missingMdxReference(\`Tabs\`,true);return \_jsxs(\_Fragment,{children:\[\_jsx(\_components.p,{children:\`Playwright is a popular end-to-end testing framework for web applications.\`}),\`\\n\`,\_jsxs(\_components.p,{children:\[\`Namespace provides high-performance caching for \`,\_jsx(\_components.a,{href:\`https://playwright.dev\`,children:\`Playwright\`}),\` test runs.\\nBy using \`,\_jsx(\_components.a,{href:\`/solutions/github-actions/caching#using-a-cache-volume\`,children:\`Cache Volumes\`}),\`, you can cache\\nPlaywright’s browser binaries and system dependencies across workflow runs, significantly reducing\\ntest setup time.\`\]}),\`\\n\`,\_jsxs(\_components.p,{children:\[\`Making full use of the CPUs on our high-performance \`,\_jsx(\_components.a,{href:\`/architecture/compute\`,children:\`Compute Platform\`}),\`\\nreduces test times by running tests faster and in parallel.\`\]}),\`\\n\`,\_jsx(Heading,{level:\`2\`,id:\`getting-started\`,children:\`Getting started\`}),\`\\n\`,\_jsxs(Steps,{titleSize:\`h3\`,children:\[\_jsxs(Step,{title:\`Enable caching on your runner profile\`,id:\`enable-caching-on-your-runner-profile\`,children:\[\_jsxs(\_components.p,{children:\[\`Go to your \`,\_jsx(\_components.a,{href:\`https://cloud.namespace.so/workspace/actions/profiles\`,children:\`runner profile configuration\`}),\` and enable caching.\`\]}),\_jsx(Frame,{style:{maxWidth:500,marginInline:\`auto\`},children:\_jsx(OptimizedImage,{src:\`https://mintcdn.com/namespace-labs/QVtD1jw4ML2vd3TZ/images/github-actions/runnerprofilecaching.webp?fit=max\\u0026auto=format\\u0026n=QVtD1jw4ML2vd3TZ\\u0026q=85\\u0026s=5982289968807a8fe2a14d22cce8f232\`,alt:\`runner profile cache configuration\`,width:1600,height:690,\\"data-og-width\\":\`1600\`,\\"data-og-height\\":\`690\`,\\"data-path\\":\`images/github-actions/runnerprofilecaching.webp\`,\\"data-optimize\\":\`true\`,\\"data-opv\\":\`3\`,srcset:\`https://mintcdn.com/namespace-labs/QVtD1jw4ML2vd3TZ/images/github-actions/runnerprofilecaching.webp?w=280\\u0026fit=max\\u0026auto=format\\u0026n=QVtD1jw4ML2vd3TZ\\u0026q=85\\u0026s=d26c2f27fbde55679f5564cbb369e9eb 280w, https://mintcdn.com/namespace-labs/QVtD1jw4ML2vd3TZ/images/github-actions/runnerprofilecaching.webp?w=560\\u0026fit=max\\u0026auto=format\\u0026n=QVtD1jw4ML2vd3TZ\\u0026q=85\\u0026s=af108347c7f839406e23fe49623bd340 560w, https://mintcdn.com/namespace-labs/QVtD1jw4ML2vd3TZ/images/github-actions/runnerprofilecaching.webp?w=840\\u0026fit=max\\u0026auto=format\\u0026n=QVtD1jw4ML2vd3TZ\\u0026q=85\\u0026s=e40be9755d2b1ef5cf5ab0aa375532f9 840w, https://mintcdn.com/namespace-labs/QVtD1jw4ML2vd3TZ/images/github-actions/runnerprofilecaching.webp?w=1100\\u0026fit=max\\u0026auto=format\\u0026n=QVtD1jw4ML2vd3TZ\\u0026q=85\\u0026s=cfcdd3ec24e6d0a05823bfb87e9c8a1d 1100w, https://mintcdn.com/namespace-labs/QVtD1jw4ML2vd3TZ/images/github-actions/runnerprofilecaching.webp?w=1650\\u0026fit=max\\u0026auto=format\\u0026n=QVtD1jw4ML2vd3TZ\\u0026q=85\\u0026s=62fdd6c3e36ade716f1d51c3bb1bf340 1650w, https://mintcdn.com/namespace-labs/QVtD1jw4ML2vd3TZ/images/github-actions/runnerprofilecaching.webp?w=2500\\u0026fit=max\\u0026auto=format\\u0026n=QVtD1jw4ML2vd3TZ\\u0026q=85\\u0026s=d519f1f6423c03c435cc882a36725015 2500w\`})})\]}),\_jsxs(Step,{title:\`Add the cache action to your workflow\`,id:\`add-the-cache-action-to-your-workflow\`,children:\[\_jsxs(\_components.p,{children:\[\`Use \`,\_jsx(\_components.a,{href:\`/reference/github-actions/nscloud-cache-action\`,children:\_jsx(\_components.code,{children:\`namespacelabs/nscloud-cache-action\`})}),\` to\\ncache Playwright browsers and apt packages:\`\]}),\_jsx(CodeBlock,{filename:\`\`,numberOfLines:\`6\`,language:\`yaml\`,children:\_jsx(\_components.pre,{className:\`shiki shiki-themes github-light-default dark-plus\`,style:{backgroundColor:\`#ffffff\`,\\"--shiki-dark-bg\\":\`#0B0C0E\`,color:\`#1f2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},language:\`yaml\`,children:\_jsxs(\_components.code,{language:\`yaml\`,numberOfLines:\`6\`,children:\[\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`- \`}),\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\`name\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \`}),\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\`Set up cache\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` uses\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \`}),\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\`namespacelabs/nscloud-cache-action@v1\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` with\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`:\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` cache\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \`}),\_jsx(\_components.span,{style:{color:\`#CF222E\`,\\"--shiki-dark\\":\`#C586C0\`},children:\`\|\`})\]}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\` playwright\`})}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\` apt\`})}),\`\\n\`\]})})}),\_jsxs(\_components.p,{children:\[\`The \`,\_jsx(\_components.code,{children:\`playwright\`}),\` cache mode stores downloaded browsers, and \`,\_jsx(\_components.code,{children:\`apt\`}),\` caches system packages so that\\n\`,\_jsx(\_components.code,{children:\`playwright install --with-deps\`}),\` runs faster on subsequent runs.\`\]})\]}),\_jsxs(Step,{title:\`Cache npm dependencies\`,id:\`cache-npm-dependencies\`,children:\[\_jsx(\_components.p,{children:\`In addition to Playwright browsers, you can also cache your package manager’s dependencies:\`}),\_jsxs(Tabs,{children:\[\_jsxs(Tab,{title:\`npm\`,id:\`npm\`,children:\[\_jsxs(\_components.p,{children:\[\`For npm, add the \`,\_jsx(\_components.code,{children:\`npm\`}),\` cache mode:\`\]}),\_jsx(CodeBlock,{filename:\`\`,numberOfLines:\`7\`,language:\`yaml\`,children:\_jsx(\_components.pre,{className:\`shiki shiki-themes github-light-default dark-plus\`,style:{backgroundColor:\`#ffffff\`,\\"--shiki-dark-bg\\":\`#0B0C0E\`,color:\`#1f2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},language:\`yaml\`,children:\_jsxs(\_components.code,{language:\`yaml\`,numberOfLines:\`7\`,children:\[\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`- \`}),\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\`name\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \`}),\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\`Set up cache\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` uses\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \`}),\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\`namespacelabs/nscloud-cache-action@v1\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` with\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`:\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` cache\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \`}),\_jsx(\_components.span,{style:{color:\`#CF222E\`,\\"--shiki-dark\\":\`#C586C0\`},children:\`\|\`})\]}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\` playwright\`})}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\` apt\`})}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\` npm\`})}),\`\\n\`\]})})})\]}),\_jsxs(Tab,{title:\`pnpm\`,id:\`pnpm\`,children:\[\_jsxs(\_components.p,{children:\[\`For pnpm, add the \`,\_jsx(\_components.code,{children:\`pnpm\`}),\` cache mode:\`\]}),\_jsx(CodeBlock,{filename:\`\`,numberOfLines:\`7\`,language:\`yaml\`,children:\_jsx(\_components.pre,{className:\`shiki shiki-themes github-light-default dark-plus\`,style:{backgroundColor:\`#ffffff\`,\\"--shiki-dark-bg\\":\`#0B0C0E\`,color:\`#1f2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},language:\`yaml\`,children:\_jsxs(\_components.code,{language:\`yaml\`,numberOfLines:\`7\`,children:\[\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`- \`}),\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\`name\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \`}),\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\`Set up cache\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` uses\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \`}),\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\`namespacelabs/nscloud-cache-action@v1\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` with\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`:\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` cache\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \`}),\_jsx(\_components.span,{style:{color:\`#CF222E\`,\\"--shiki-dark\\":\`#C586C0\`},children:\`\|\`})\]}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\` playwright\`})}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\` apt\`})}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\` pnpm\`})}),\`\\n\`\]})})})\]}),\_jsxs(Tab,{title:\`yarn\`,id:\`yarn\`,children:\[\_jsxs(\_components.p,{children:\[\`For yarn, add the \`,\_jsx(\_components.code,{children:\`yarn\`}),\` cache mode:\`\]}),\_jsx(CodeBlock,{filename:\`\`,numberOfLines:\`7\`,language:\`yaml\`,children:\_jsx(\_components.pre,{className:\`shiki shiki-themes github-light-default dark-plus\`,style:{backgroundColor:\`#ffffff\`,\\"--shiki-dark-bg\\":\`#0B0C0E\`,color:\`#1f2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},language:\`yaml\`,children:\_jsxs(\_components.code,{language:\`yaml\`,numberOfLines:\`7\`,children:\[\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`- \`}),\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\`name\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \`}),\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\`Set up cache\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` uses\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \`}),\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\`namespacelabs/nscloud-cache-action@v1\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` with\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`:\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` cache\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \`}),\_jsx(\_components.span,{style:{color:\`#CF222E\`,\\"--shiki-dark\\":\`#C586C0\`},children:\`\|\`})\]}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\` playwright\`})}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\` apt\`})}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\` yarn\`})}),\`\\n\`\]})})})\]})\]})\]}),\_jsxs(Step,{title:\`Install and run Playwright as usual\`,id:\`install-and-run-playwright-as-usual\`,children:\[\_jsx(\_components.p,{children:\`After setting up the cache, install dependencies and run Playwright as you normally would:\`}),\_jsx(CodeBlock,{filename:\`\`,numberOfLines:\`8\`,language:\`yaml\`,children:\_jsx(\_components.pre,{className:\`shiki shiki-themes github-light-default dark-plus\`,style:{backgroundColor:\`#ffffff\`,\\"--shiki-dark-bg\\":\`#0B0C0E\`,color:\`#1f2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},language:\`yaml\`,children:\_jsxs(\_components.code,{language:\`yaml\`,numberOfLines:\`8\`,children:\[\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`- \`}),\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\`name\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \`}),\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\`Install dependencies\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` run\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \`}),\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\`npm ci\`})\]}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`- \`}),\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\`name\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \`}),\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\`Install Playwright browsers\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` run\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \`}),\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\`npx playwright install --with-deps\`})\]}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`- \`}),\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\`name\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \`}),\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\`Run Playwright tests\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` run\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \`}),\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\`npx playwright test\`})\]}),\`\\n\`\]})})})\]})\]}),\`\\n\`,\_jsx(Heading,{level:\`2\`,id:\`what-gets-cached\`,children:\`What gets cached\`}),\`\\n\`,\_jsxs(Table,{children:\[\_jsx(\_components.thead,{children:\_jsxs(\_components.tr,{children:\[\_jsx(\_components.th,{children:\`Cache\`}),\_jsx(\_components.th,{children:\`What’s cached\`})\]})}),\_jsxs(\_components.tbody,{children:\[\_jsxs(\_components.tr,{children:\[\_jsx(\_components.td,{children:\`Playwright\`}),\_jsx(\_components.td,{children:\`Browser binaries downloaded by Playwright (Chromium, Firefox, WebKit)\`})\]}),\_jsxs(\_components.tr,{children:\[\_jsx(\_components.td,{children:\`APT\`}),\_jsx(\_components.td,{children:\`System packages installed via apt, including browser dependencies\`})\]}),\_jsxs(\_components.tr,{children:\[\_jsx(\_components.td,{children:\`npm / pnpm / yarn\`}),\_jsx(\_components.td,{children:\`Package manager cache for faster dependency installation\`})\]})\]})\]}),\`\\n\`,\_jsxs(\_components.p,{children:\[\`See the \`,\_jsx(\_components.a,{href:\`/reference/github-actions/nscloud-cache-action\`,children:\_jsx(\_components.code,{children:\`nscloud-cache-action\`})}),\` documentation for\\nall available cache modes and configuration options.\`\]}),\`\\n\`,\_jsx(Heading,{level:\`2\`,id:\`next-steps\`,children:\`Next steps\`}),\`\\n\`,\_jsx(Heading,{level:\`3\`,id:\`increase-the-number-of-workers\`,children:\`Increase the number of workers\`}),\`\\n\`,\_jsx(\_components.p,{children:\`Playwright’s default configuration uses only 1 worker when it detects a CI environment. To make better use of the\\navailable cores, you can increase this for faster test execution. A good starting point is 75% of the available cores—adjust\\nthis depending on your workload:\`}),\`\\n\`,\_jsx(CodeBlock,{filename:\`\`,numberOfLines:\`2\`,language:\`yaml\`,children:\_jsx(\_components.pre,{className:\`shiki shiki-themes github-light-default dark-plus\`,style:{backgroundColor:\`#ffffff\`,\\"--shiki-dark-bg\\":\`#0B0C0E\`,color:\`#1f2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},language:\`yaml\`,children:\_jsxs(\_components.code,{language:\`yaml\`,numberOfLines:\`2\`,children:\[\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`- \`}),\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\`name\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \`}),\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\`Run Playwright tests\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` run\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \`}),\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\`npx playwright test --workers 75%\`})\]}),\`\\n\`\]})})}),\`\\n\`,\_jsxs(\_components.p,{children:\[\`You can also \`,\_jsx(\_components.a,{href:\`https://playwright.dev/docs/test-parallel#limit-workers\`,children:\`configure this in your Playwright configuration\`}),\`.\`\]}),\`\\n\`,\_jsx(Heading,{level:\`3\`,id:\`upload-test-reports\`,children:\`Upload test reports\`}),\`\\n\`,\_jsxs(\_components.p,{children:\[\`Use \`,\_jsx(\_components.a,{href:\`/reference/github-actions/upload-artifact\`,children:\_jsx(\_components.code,{children:\`namespace-actions/upload-artifact\`})}),\` to\\nupload Playwright’s HTML report for easy debugging:\`\]}),\`\\n\`,\_jsx(CodeBlock,{filename:\`\`,numberOfLines:\`6\`,language:\`yaml\`,children:\_jsx(\_components.pre,{className:\`shiki shiki-themes github-light-default dark-plus\`,style:{backgroundColor:\`#ffffff\`,\\"--shiki-dark-bg\\":\`#0B0C0E\`,color:\`#1f2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},language:\`yaml\`,children:\_jsxs(\_components.code,{language:\`yaml\`,numberOfLines:\`6\`,children:\[\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`- \`}),\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\`uses\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \`}),\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\`namespace-actions/upload-artifact@v1\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` if\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \`}),\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\\"${{ !cancelled() }}\\"})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` with\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`:\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` name\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \`}),\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\`playwright-report\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` path\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \`}),\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\`playwright-report/\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` retention-days\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \`}),\_jsx(\_components.span,{style:{color:\`#0550AE\`,\\"--shiki-dark\\":\`#B5CEA8\`},children:\`30\`})\]}),\`\\n\`\]})})}),\`\\n\`,\_jsxs(\_components.p,{children:\[\`The \`,\_jsx(\_components.code,{children:\\"if: ${{ !cancelled() }}\\"}),\` condition ensures the report is uploaded even when tests fail.\`\]}),\`\\n\`,\_jsx(Heading,{level:\`2\`,id:\`full-example\`,children:\`Full example\`}),\`\\n\`,\_jsx(\_components.p,{children:\`Here’s a complete workflow using Namespace runners with caching:\`}),\`\\n\`,\_jsx(CodeBlock,{filename:\`\`,numberOfLines:\`43\`,language:\`yaml\`,children:\_jsx(\_components.pre,{className:\`shiki shiki-themes github-light-default dark-plus\`,style:{backgroundColor:\`#ffffff\`,\\"--shiki-dark-bg\\":\`#0B0C0E\`,color:\`#1f2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},language:\`yaml\`,children:\_jsxs(\_components.code,{language:\`yaml\`,numberOfLines:\`43\`,children:\[\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\`name\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \`}),\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\`Playwright Tests\`})\]}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#0550AE\`,\\"--shiki-dark\\":\`#569CD6\`},children:\`on\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`:\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` push\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`:\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` branches\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \[\`}),\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\`main\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`\]\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` pull\_request\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`:\`})\]}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\`jobs\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`:\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` test\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`:\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` timeout-minutes\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \`}),\_jsx(\_components.span,{style:{color:\`#0550AE\`,\\"--shiki-dark\\":\`#B5CEA8\`},children:\`60\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` runs-on\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \`}),\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\`namespace-profile-playwright\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` steps\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`:\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\` - \`}),\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\`uses\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \`}),\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\`namespacelabs/nscloud-checkout-action@v7\`})\]}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\` - \`}),\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\`uses\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \`}),\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\`actions/setup-node@v6\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` with\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`:\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` node-version\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \`}),\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\`lts/\*\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` package-manager-cache\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \`}),\_jsx(\_components.span,{style:{color:\`#0550AE\`,\\"--shiki-dark\\":\`#569CD6\`},children:\`false\`}),\_jsx(\_components.span,{style:{color:\`#6E7781\`,\\"--shiki-dark\\":\`#6A9955\`},children:\` # Use Namespace toolchain caching instead\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` cache\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \`}),\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\`\\"\\"\`})\]}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\` - \`}),\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\`name\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \`}),\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\`Set up cache\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` uses\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \`}),\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\`namespacelabs/nscloud-cache-action@v1\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` with\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`:\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` cache\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \`}),\_jsx(\_components.span,{style:{color:\`#CF222E\`,\\"--shiki-dark\\":\`#C586C0\`},children:\`\|\`})\]}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\` playwright\`})}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\` apt\`})}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`,children:\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\` npm\`})}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\` - \`}),\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\`name\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \`}),\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\`Install dependencies\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` run\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \`}),\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\`npm ci\`})\]}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\` - \`}),\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\`name\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \`}),\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\`Install Playwright browsers\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` run\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \`}),\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\`npx playwright install --with-deps\`})\]}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\` - \`}),\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\`name\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \`}),\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\`Run Playwright tests\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` run\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \`}),\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\`npx playwright test --workers 75%\`})\]}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\` - \`}),\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\`uses\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \`}),\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\`namespace-actions/upload-artifact@v1\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` if\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \`}),\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\\"${{ !cancelled() }}\\"})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` with\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`:\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` name\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \`}),\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\`playwright-report\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` path\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \`}),\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\`playwright-report/\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#116329\`,\\"--shiki-dark\\":\`#569CD6\`},children:\` retention-days\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\`: \`}),\_jsx(\_components.span,{style:{color:\`#0550AE\`,\\"--shiki-dark\\":\`#B5CEA8\`},children:\`30\`})\]}),\`\\n\`\]})})}),\`\\n\`,\_jsxs(\_components.p,{children:\[\`View the full example repository at \`,\_jsx(\_components.a,{href:\`https://github.com/namespace-integration-demos/playwright\`,children:\`namespace-integration-demos/playwright\`}),\`.\`\]}),\`\\n\`,\_jsx(Heading,{level:\`2\`,id:\`advanced-pre-install-browsers-and-system-dependencies\`,children:\`Advanced: pre-install browsers and system dependencies\`}),\`\\n\`,\_jsxs(\_components.p,{children:\[\`For the fastest and most consistent job startup, pre-install Playwright’s browsers and system\\ndependencies directly into your runner profile with a\\n\`,\_jsx(\_components.a,{href:\`/solutions/github-actions/custom-base-images\`,children:\`custom base image\`}),\`. This removes the browser\\ndownload and \`,\_jsx(\_components.code,{children:\`apt-get\`}),\` install from every job, so workflows start running tests immediately:\`\]}),\`\\n\`,\_jsx(CodeBlock,{filename:\`\`,numberOfLines:\`4\`,language:\`docker\`,children:\_jsx(\_components.pre,{className:\`shiki shiki-themes github-light-default dark-plus\`,style:{backgroundColor:\`#ffffff\`,\\"--shiki-dark-bg\\":\`#0B0C0E\`,color:\`#1f2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},language:\`docker\`,children:\_jsxs(\_components.code,{language:\`docker\`,numberOfLines:\`4\`,children:\[\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#CF222E\`,\\"--shiki-dark\\":\`#569CD6\`},children:\`ARG\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\` NAMESPACE\_BASE\_IMAGE\_REF=\`}),\_jsx(\_components.span,{style:{color:\`#0A3069\`,\\"--shiki-dark\\":\`#CE9178\`},children:\`\\"\\"\`})\]}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#CF222E\`,\\"--shiki-dark\\":\`#569CD6\`},children:\`FROM\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\\" ${NAMESPACE\_BASE\_IMAGE\_REF} \\"}),\_jsx(\_components.span,{style:{color:\`#CF222E\`,\\"--shiki-dark\\":\`#569CD6\`},children:\`AS\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\` base\`})\]}),\`\\n\`,\_jsx(\_components.span,{className:\`line\`}),\`\\n\`,\_jsxs(\_components.span,{className:\`line\`,children:\[\_jsx(\_components.span,{style:{color:\`#CF222E\`,\\"--shiki-dark\\":\`#569CD6\`},children:\`RUN\`}),\_jsx(\_components.span,{style:{color:\`#1F2328\`,\\"--shiki-dark\\":\`#D4D4D4\`},children:\` npx -y playwright@1.49.0 install --with-deps chromium\`})\]}),\`\\n\`\]})})}),\`\\n\`,\_jsxs(\_components.p,{children:\[\`Pin the Playwright version to match your \`,\_jsx(\_components.code,{children:\`package.json\`}),\`; if the versions diverge, Playwright will\\nre-download the matching browser at runtime. With this in place, your workflow can drop\\n\`,\_jsx(\_components.code,{children:\`--with-deps\`}),\` and run plain \`,\_jsx(\_components.code,{children:\`npx playwright install\`}),\` (or skip the install step entirely if the\\nversions match).\`\]})\]})}function MDXContent(props={}){const{wrapper:MDXLayout}={...\_provideComponents(),...props.components};return MDXLayout?\_jsx(MDXLayout,{...props,children:\_jsx(\_createMdxContent,{...props})}):\_createMdxContent(props)}return{default:MDXContent};function \_missingMdxReference(id,component){throw new Error(\`Expected \`+(component?\`component\`:\`object\`)+\\" \`\\"+id+\\"\` to be defined: you likely forgot to import, pass, or provide it.\\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Playwright","description":null,"href":"/integrations/playwright"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":\[{"title":"Getting started","slug":"getting-started","depth":2,"children":\[{"title":"Enable caching on your runner profile","slug":"enable-caching-on-your-runner-profile","depth":3,"children":\[\]},{"title":"Add the cache action to your workflow","slug":"add-the-cache-action-to-your-workflow","depth":3,"children":\[\]},{"title":"Cache npm dependencies","slug":"cache-npm-dependencies","depth":3,"children":\[\]},{"title":"Install and run Playwright as usual","slug":"install-and-run-playwright-as-usual","depth":3,"children":\[\]}\]},{"title":"What gets cached","slug":"what-gets-cached","depth":2,"children":\[\]},{"title":"Next steps","slug":"next-steps","depth":2,"children":\[{"title":"Increase the number of workers","slug":"increase-the-number-of-workers","depth":3,"children":\[\]},{"title":"Upload test reports","slug":"upload-test-reports","depth":3,"children":\[\]}\]},{"title":"Full example","slug":"full-example","depth":2,"children":\[\]},{"title":"Advanced: pre-install browsers and system dependencies","slug":"advanced-pre-install-browsers-and-system-dependencies","depth":2,"children":\[\]}\],"codeExamples":{}},"jsLinks":\["/docs/\_mintlify/custom/namespace-labs/fa018fe02fd436c8/navigation.js","/docs/\_mintlify/custom/namespace-labs/4276600b7cb636ff/legacy-anchor-redirects.js"\],"subdomain":"namespace-labs","siteName":"Namespace Documentation","title":"Playwright - Namespace Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-26T10:46:18.085Z","gitLastModified":"2026-09-22T09:40:17.000Z","originalFileLocation":"integrations/playwright.mdx"},"headHtml":"\\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\\"isDarkMode\\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\\u0026\\u0026p!=='dark'\\u0026\\u0026p!=='system')p=\\"system\\"}var r=p==='system'?(matchMedia(\\"(prefers-color-scheme: dark)\\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\\"data-theme-preference\\",p)})();\\u003c/script>\\u003cmeta data-mint-head name=\\"application-name\\" content=\\"Namespace Documentation\\">\\u003cmeta data-mint-head name=\\"generator\\" content=\\"Mintlify\\">\\u003clink data-mint-head rel=\\"icon\\" type=\\"image/png\\" sizes=\\"192x192\\" href=\\"/docs/mintlify-assets/\_mintlify/favicons/namespace-labs/kZKeJ4zhJEuE6\_kI/\_generated/favicon/android-chrome-192x192.png\\" media=\\"(prefers-color-scheme: light)\\">\\u003clink data-mint-head rel=\\"apple-touch-icon\\" type=\\"image/png\\" sizes=\\"180x180\\" href=\\"/docs/mintlify-assets/\_mintlify/favicons/namespace-labs/kZKeJ4zhJEuE6\_kI/\_generated/favicon/apple-touch-icon.png\\">\\u003clink data-mint-head rel=\\"icon\\" type=\\"image/png\\" sizes=\\"16x16\\" href=\\"/docs/mintlify-assets/\_mintlify/favicons/namespace-labs/kZKeJ4zhJEuE6\_kI/\_generated/favicon/favicon-16x16.png\\" media=\\"(prefers-color-scheme: light)\\">\\u003clink data-mint-head rel=\\"icon\\" type=\\"image/png\\" sizes=\\"32x32\\" href=\\"/docs/mintlify-assets/\_mintlify/favicons/namespace-labs/kZKeJ4zhJEuE6\_kI/\_generated/favicon/favicon-32x32.png\\" media=\\"(prefers-color-scheme: light)\\">\\u003clink data-mint-head rel=\\"shortcut icon\\" type=\\"image/x-icon\\" href=\\"/docs/mintlify-assets/\_mintlify/favicons/namespace-labs/kZKeJ4zhJEuE6\_kI/\_generated/favicon/favicon.ico\\" media=\\"(prefers-color-scheme: light)\\">\\u003clink data-mint-head rel=\\"icon\\" type=\\"image/png\\" sizes=\\"192x192\\" href=\\"/docs/mintlify-assets/\_mintlify/favicons/namespace-labs/kZKeJ4zhJEuE6\_kI/\_generated/favicon-dark/android-chrome-192x192.png\\" media=\\"(prefers-color-scheme: dark)\\">\\u003clink data-mint-head rel=\\"icon\\" type=\\"image/png\\" sizes=\\"16x16\\" href=\\"/docs/mintlify-assets/\_mintlify/favicons/namespace-labs/kZKeJ4zhJEuE6\_kI/\_generated/favicon-dark/favicon-16x16.png\\" media=\\"(prefers-color-scheme: dark)\\">\\u003clink data-mint-head rel=\\"icon\\" type=\\"image/png\\" sizes=\\"32x32\\" href=\\"/docs/mintlify-assets/\_mintlify/favicons/namespace-labs/kZKeJ4zhJEuE6\_kI/\_generated/favicon-dark/favicon-32x32.png\\" media=\\"(prefers-color-scheme: dark)\\">\\u003clink data-mint-head rel=\\"shortcut icon\\" type=\\"image/x-icon\\" href=\\"/docs/mintlify-assets/\_mintlify/favicons/namespace-labs/kZKeJ4zhJEuE6\_kI/\_generated/favicon-dark/favicon.ico\\" media=\\"(prefers-color-scheme: dark)\\">\\u003cmeta data-mint-head property=\\"og:title\\" content=\\"Playwright - Namespace Documentation\\">\\u003cmeta data-mint-head property=\\"og:site\_name\\" content=\\"Namespace Documentation\\">\\u003cmeta data-mint-head property=\\"og:url\\" content=\\"https://namespace.so/docs/integrations/playwright\\">\\u003cmeta data-mint-head property=\\"og:type\\" content=\\"website\\">\\u003cmeta data-mint-head property=\\"og:image\\" content=\\"https://namespace-labs.mintlify.app/\_mintlify/api/og/v2?division=Integrations\\u0026amp;title=Playwright\\u0026amp;theme=1f89d53762a6d5304d1c63c4\\u0026amp;signature=06207f2527f6d4fce591e8edf89dd2a1b4960cee42023d4fc6e1e10084fb8881\\">\\u003cmeta data-mint-head property=\\"og:image:width\\" content=\\"1200\\">\\u003cmeta data-mint-head property=\\"og:image:height\\" content=\\"630\\">\\u003cmeta data-mint-head name=\\"twitter:card\\" content=\\"summary\_large\_image\\">\\u003cmeta data-mint-head name=\\"twitter:title\\" content=\\"Playwright - Namespace Documentation\\">\\u003cmeta data-mint-head name=\\"twitter:image\\" content=\\"https://namespace-labs.mintlify.app/\_mintlify/api/og/v2?division=Integrations\\u0026amp;title=Playwright\\u0026amp;theme=1f89d53762a6d5304d1c63c4\\u0026amp;signature=06207f2527f6d4fce591e8edf89dd2a1b4960cee42023d4fc6e1e10084fb8881\\">\\u003cmeta data-mint-head name=\\"twitter:image:width\\" content=\\"1200\\">\\u003cmeta data-mint-head name=\\"twitter:image:height\\" content=\\"630\\">\\u003cmeta data-mint-head name=\\"msapplication-config\\" content=\\"/docs/mintlify-assets/\_mintlify/favicons/namespace-labs/kZKeJ4zhJEuE6\_kI/\_generated/favicon/browserconfig.xml\\">\\u003cmeta data-mint-head name=\\"apple-mobile-web-app-title\\" content=\\"Namespace Documentation\\">\\u003cmeta data-mint-head name=\\"msapplication-TileColor\\" content=\\"#1C32FF\\">\\u003clink data-mint-head rel=\\"canonical\\" href=\\"https://namespace.so/docs/integrations/playwright\\">\\u003clink data-mint-head rel=\\"alternate\\" type=\\"application/xml\\" href=\\"/docs/sitemap.xml\\">\\u003clink data-mint-head rel=\\"alternate\\" type=\\"text/markdown\\" href=\\"/docs/integrations/playwright.md\\">\\u003cscript data-mint-head type=\\"application/ld+json\\">{\\"@context\\":\\"https://schema.org\\",\\"@graph\\":\[{\\"@type\\":\\"Organization\\",\\"@id\\":\\"https://namespace.so/#organization\\",\\"name\\":\\"Namespace Documentation\\",\\"url\\":\\"https://namespace.so\\",\\"logo\\":{\\"@type\\":\\"ImageObject\\",\\"url\\":\\"https://mintcdn.com/namespace-labs/qOJQ7kaWRgoS8lyv/logo-light.svg?fit=max\\u0026auto=format\\u0026n=qOJQ7kaWRgoS8lyv\\u0026q=85\\u0026s=6827b0c81c335badc1cef13b83383e1d\\"}},{\\"@type\\":\\"WebSite\\",\\"@id\\":\\"https://namespace.so/docs#website\\",\\"name\\":\\"Namespace Documentation\\",\\"url\\":\\"https://namespace.so/docs\\",\\"publisher\\":{\\"@id\\":\\"https://namespace.so/#organization\\"}},{\\"@type\\":\\"WebPage\\",\\"@id\\":\\"https://namespace.so/docs/integrations/playwright#webpage\\",\\"url\\":\\"https://namespace.so/docs/integrations/playwright\\",\\"name\\":\\"Playwright\\",\\"dateModified\\":\\"2026-09-22T09:40:17.000Z\\",\\"isPartOf\\":{\\"@id\\":\\"https://namespace.so/docs#website\\"},\\"breadcrumb\\":{\\"@id\\":\\"https://namespace.so/docs/integrations/playwright#breadcrumb\\"}},{\\"@type\\":\\"BreadcrumbList\\",\\"@id\\":\\"https://namespace.so/docs/integrations/playwright#breadcrumb\\",\\"itemListElement\\":\[{\\"@type\\":\\"ListItem\\",\\"position\\":1,\\"name\\":\\"Integrations\\",\\"item\\":\\"https://namespace.so/docs/integrations/turborepo\\"},{\\"@type\\":\\"ListItem\\",\\"position\\":2,\\"name\\":\\"Playwright\\",\\"item\\":\\"https://namespace.so/docs/integrations/playwright\\"}\]},{\\"@type\\":\[\\"Article\\",\\"TechArticle\\"\],\\"@id\\":\\"https://namespace.so/docs/integrations/playwright#article\\",\\"headline\\":\\"Playwright\\",\\"name\\":\\"Playwright\\",\\"url\\":\\"https://namespace.so/docs/integrations/playwright\\",\\"mainEntityOfPage\\":{\\"@id\\":\\"https://namespace.so/docs/integrations/playwright#webpage\\"},\\"dateModified\\":\\"2026-09-22T09:40:17.000Z\\",\\"publisher\\":{\\"@id\\":\\"https://namespace.so/#organization\\"},\\"isPartOf\\":{\\"@id\\":\\"https://namespace.so/docs#website\\"}}\]}\\u003c/script>\\u003cscript data-mint-head type=\\"application/ld+json\\">{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"WebSite\\",\\"name\\":\\"Namespace Documentation\\",\\"creator\\":{\\"@type\\":\\"Organization\\",\\"name\\":\\"Mintlify\\",\\"url\\":\\"https://mintlify.com\\"}}\\u003c/script>","siteName":"Namespace Documentation","nav":{"global":{"anchors":\[{"anchor":"Changelog","icon":"history","href":"https://namespace.so/changelog"},{"anchor":"Trust Center (SOC2)","icon":"shield-check","href":"https://trust.namespace.so/"},{"anchor":"Status","icon":"activity","href":"https://namespace-status.com/"},{"anchor":"Support","icon":"message-circle","href":"https://namespace.so/support"}\]},"products":\[{"product":"Products","description":"Turnkey products built on the Namespace platform","tabs":\[{"tab":"Documentation","icon":"book-open","pages":\[{"title":"Documentation","href":""}\]},{"tab":"Integrations","icon":"blocks","pages":\[{"group":"Integrations","icon":"blocks","pages":\[{"title":"Turborepo caching","sidebarTitle":"Turborepo","description":null,"href":"/integrations/turborepo"},{"title":"Playwright","href":"/integrations/playwright"},{"title":"Android Emulators","description":null,"href":"/integrations/android-emulators"},{"title":"Gradle integration","sidebarTitle":"Gradle","href":"/integrations/gradle"},{"title":"sccache integration","sidebarTitle":"sccache","href":"/integrations/sccache"},{"title":"Optimizing Docker Build Performance in Circle CI","sidebarTitle":"CircleCI","href":"/solutions/circle-ci/docker-builds"},{"title":"Pants integration","sidebarTitle":"Pants","href":"/integrations/pants"},{"title":"Moonrepo support","sidebarTitle":"Moonrepo","href":"/integrations/moonrepo"},{"title":"Nix","sidebarTitle":"Nix","href":"/integrations/nix"},{"title":"Go","sidebarTitle":"Go","href":"/integrations/go"},{"title":"Git Checkouts","href":"/integrations/git-checkouts"},{"title":"Docker Images","href":"/integrations/docker-images"},{"title":"Tailscale","href":"/integrations/tailscale"},{"title":"Integrating any framework","sidebarTitle":"Any framework","href":"/integrations/any-framework"}\]}\]},{"tab":"CLI","icon":"square-terminal","pages":\[{"title":"CLI","href":"/reference/cli"}\]},{"tab":"SDK","icon":"braces","pages":\[{"title":"SDK","href":"/reference/sdk"}\]},{"tab":"MCP","icon":"plug","pages":\[{"title":"MCP","href":"/reference/mcp"}\]}\]},{"product":"Platform","description":"Lower-level primitives to build your own","pages":\[{"title":"Platform","href":"/platform"}\]}\]},"title":"Playwright - Namespace Documentation","buildId":"dpl\_GvhK4qVXq51DpfYJLCtPpYNN4YHN","deploymentId":"dpl\_GvhK4qVXq51DpfYJLCtPpYNN4YHN","dynamics":\["07c022d89b","a74be98ba7"\],"chunks":\["Frame-5VlDM5Io.js","DynamicMarkdown-DO1Fz7ar.js","zoom-image-lightbox-uyuQJRFs.js","lightbox-handle-r17bVUz3.js"\]}
