<h3 dir="auto">System info</h3>
<ul dir="auto">
<li>Playwright Version: [v1.34.3]</li>
<li>Operating System: [Windows 10, Debian 11]</li>
<li>Browser: [All]</li>
<li>Other info: I use remote.ssh extension on my Debian 11. X Server send Display information to my Windows via VcXsrv or X410</li>
</ul>
<p dir="auto"><strong>Config file</strong></p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="default"><pre class="notranslate"><code class="notranslate">default
</code></pre></div>
<p dir="auto"><strong>Test file (self-contained)</strong></p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="default"><pre class="notranslate"><code class="notranslate">default
</code></pre></div>
<p dir="auto"><strong>Steps</strong></p>
<ul dir="auto">
<li>Run in UI mode via remote ssh connection</li>
<li>Click Open in VS Code icon on any test</li>
</ul>
<p dir="auto"><strong>Actual/Expected</strong></p>
<p dir="auto">The UI send a link to xdg-open and receive my Windows the following link format:<br>
<code class="notranslate">vscode-remote://ssh-remote+connectionName/path/to/example.spec.ts/vscode:/file//path/to/example.spec.ts:7:17</code><br>
It's wrong, Windows cannot recognize vscode-remote url shema.</p>
<p dir="auto">The correct url format is the following:<br>
<code class="notranslate">vscode://vscode-remote/ssh-remote+connectionName/path/to/example.spec.ts:7:17</code></p>
<h3 dir="auto">System info</h3>
<ul dir="auto">
<li>Playwright Version: v1.32.1</li>
<li>Operating System: macOS-latest (GA)</li>
<li>Browser: WebKit</li>
<li>Other info:</li>
</ul>
<h3 dir="auto">Source code</h3>
<ul class="contains-task-list">
<li class="task-list-item"><input type="checkbox" id="" disabled="" class="task-list-item-checkbox" checked=""> I provided exact source code that allows reproducing the issue locally.</li>
</ul>




<p dir="auto"><strong>Link to the GitHub repository with the repro</strong></p>
<p dir="auto">MRE: <a href="https://github.com/johny-ss/actions">https://github.com/johny-ss/actions</a></p>
<p dir="auto">or</p>
<p dir="auto"><strong>Github action file</strong></p>
<div class="highlight highlight-source-yaml notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="name: Tests

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

# Cancel current job when pushing new commit into the PR
concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  e2e:
    # timeout-minutes: 60
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false # keep running other jobs if one fails
      matrix:
        os: [macos-latest, windows-latest, ubuntu-latest]
        browser: [chromium, firefox]
        include:
          - os: macos-latest
            browser: webkit
    env:
      # Playwright uses different paths on different OS's. 
      # To make it work cross-platform, we need to set the path manually.
      # Alternatively, `PLAYWRIGHT_BROWSERS_PATH=0` install binaries in node_modules
      PLAYWRIGHT_BROWSERS_PATH: ${{ github.workspace }}/ms-playwright
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: 16

      # installing dependencies with cache
      - name: Cache dependencies
        id: cache-deps
        uses: actions/cache@v3
        with:
          path: ./node_modules
          key: modules-${{ hashFiles('package-lock.json') }}
      - name: Install dependencies
        if: steps.cache-deps.outputs.cache-hit != 'true'
        run: npm ci --ignore-scripts

      # installing browsers with cache
      - name: Store Playwright's Version
        shell: bash #necessary for it to work on Windows, which uses powershell by default
        run: echo &quot;PLAYWRIGHT_VERSION=$(node -p 'require(&quot;@playwright/test/package.json&quot;).version')&quot; &gt;&gt; $GITHUB_OUTPUT
        id: playwright-version
      - name: Cache browsers
        id: cache-browsers
        uses: actions/cache@v3
        with:
          key: ${{ runner.os }}-${{ matrix.browser }}-playwright-${{ steps.playwright-version.outputs.PLAYWRIGHT_VERSION }}
          path: ${{ env.PLAYWRIGHT_BROWSERS_PATH }}
      - name: Download browsers
        if: steps.cache-browsers.outputs.cache-hit != 'true'
        run: npx playwright install --with-deps ${{ matrix.browser }}

      # running tests
      - run: npx playwright test --project=${{ matrix.browser }}
      - name: Upload Artifacts
        if: failure()
        uses: actions/upload-artifact@v3
        with:
          name: ${{ matrix.browser }}-${{ matrix.os }}-test-results
          path: test-results/
          retention-days: 7"><pre class="notranslate"><span class="pl-ent">name</span>: <span class="pl-s">Tests</span>

<span class="pl-ent">on</span>:
  <span class="pl-ent">push</span>:
    <span class="pl-ent">branches</span>: <span class="pl-s">[main]</span>
  <span class="pl-ent">pull_request</span>:
    <span class="pl-ent">branches</span>: <span class="pl-s">[main]</span>

<span class="pl-c"><span class="pl-c">#</span> Cancel current job when pushing new commit into the PR</span>
<span class="pl-ent">concurrency</span>:
  <span class="pl-ent">group</span>: <span class="pl-s">${{ github.workflow }}-${{ github.ref }}</span>
  <span class="pl-ent">cancel-in-progress</span>: <span class="pl-c1">true</span>

<span class="pl-ent">jobs</span>:
  <span class="pl-ent">e2e</span>:
    <span class="pl-c"><span class="pl-c">#</span> timeout-minutes: 60</span>
    <span class="pl-ent">runs-on</span>: <span class="pl-s">${{ matrix.os }}</span>
    <span class="pl-ent">strategy</span>:
      <span class="pl-ent">fail-fast</span>: <span class="pl-s">false </span><span class="pl-c"><span class="pl-c">#</span> keep running other jobs if one fails</span>
      <span class="pl-ent">matrix</span>:
        <span class="pl-ent">os</span>: <span class="pl-s">[macos-latest, windows-latest, ubuntu-latest]</span>
        <span class="pl-ent">browser</span>: <span class="pl-s">[chromium, firefox]</span>
        <span class="pl-ent">include</span>:
          - <span class="pl-ent">os</span>: <span class="pl-s">macos-latest</span>
            <span class="pl-ent">browser</span>: <span class="pl-s">webkit</span>
    <span class="pl-ent">env</span>:
      <span class="pl-c"><span class="pl-c">#</span> Playwright uses different paths on different OS's. </span>
      <span class="pl-c"><span class="pl-c">#</span> To make it work cross-platform, we need to set the path manually.</span>
      <span class="pl-c"><span class="pl-c">#</span> Alternatively, `PLAYWRIGHT_BROWSERS_PATH=0` install binaries in node_modules</span>
      <span class="pl-ent">PLAYWRIGHT_BROWSERS_PATH</span>: <span class="pl-s">${{ github.workspace }}/ms-playwright</span>
    <span class="pl-ent">steps</span>:
      - <span class="pl-ent">uses</span>: <span class="pl-s">actions/checkout@v3</span>
      - <span class="pl-ent">uses</span>: <span class="pl-s">actions/setup-node@v3</span>
        <span class="pl-ent">with</span>:
          <span class="pl-ent">node-version</span>: <span class="pl-c1">16</span>

      <span class="pl-c"><span class="pl-c">#</span> installing dependencies with cache</span>
      - <span class="pl-ent">name</span>: <span class="pl-s">Cache dependencies</span>
        <span class="pl-ent">id</span>: <span class="pl-s">cache-deps</span>
        <span class="pl-ent">uses</span>: <span class="pl-s">actions/cache@v3</span>
        <span class="pl-ent">with</span>:
          <span class="pl-ent">path</span>: <span class="pl-s">./node_modules</span>
          <span class="pl-ent">key</span>: <span class="pl-s">modules-${{ hashFiles('package-lock.json') }}</span>
      - <span class="pl-ent">name</span>: <span class="pl-s">Install dependencies</span>
        <span class="pl-ent">if</span>: <span class="pl-s">steps.cache-deps.outputs.cache-hit != 'true'</span>
        <span class="pl-ent">run</span>: <span class="pl-s">npm ci --ignore-scripts</span>

      <span class="pl-c"><span class="pl-c">#</span> installing browsers with cache</span>
      - <span class="pl-ent">name</span>: <span class="pl-s">Store Playwright's Version</span>
        <span class="pl-ent">shell</span>: <span class="pl-s">bash </span><span class="pl-c"><span class="pl-c">#</span>necessary for it to work on Windows, which uses powershell by default</span>
        <span class="pl-ent">run</span>: <span class="pl-s">echo "PLAYWRIGHT_VERSION=$(node -p 'require("@playwright/test/package.json").version')" &gt;&gt; $GITHUB_OUTPUT</span>
        <span class="pl-ent">id</span>: <span class="pl-s">playwright-version</span>
      - <span class="pl-ent">name</span>: <span class="pl-s">Cache browsers</span>
        <span class="pl-ent">id</span>: <span class="pl-s">cache-browsers</span>
        <span class="pl-ent">uses</span>: <span class="pl-s">actions/cache@v3</span>
        <span class="pl-ent">with</span>:
          <span class="pl-ent">key</span>: <span class="pl-s">${{ runner.os }}-${{ matrix.browser }}-playwright-${{ steps.playwright-version.outputs.PLAYWRIGHT_VERSION }}</span>
          <span class="pl-ent">path</span>: <span class="pl-s">${{ env.PLAYWRIGHT_BROWSERS_PATH }}</span>
      - <span class="pl-ent">name</span>: <span class="pl-s">Download browsers</span>
        <span class="pl-ent">if</span>: <span class="pl-s">steps.cache-browsers.outputs.cache-hit != 'true'</span>
        <span class="pl-ent">run</span>: <span class="pl-s">npx playwright install --with-deps ${{ matrix.browser }}</span>

      <span class="pl-c"><span class="pl-c">#</span> running tests</span>
      - <span class="pl-ent">run</span>: <span class="pl-s">npx playwright test --project=${{ matrix.browser }}</span>
      - <span class="pl-ent">name</span>: <span class="pl-s">Upload Artifacts</span>
        <span class="pl-ent">if</span>: <span class="pl-s">failure()</span>
        <span class="pl-ent">uses</span>: <span class="pl-s">actions/upload-artifact@v3</span>
        <span class="pl-ent">with</span>:
          <span class="pl-ent">name</span>: <span class="pl-s">${{ matrix.browser }}-${{ matrix.os }}-test-results</span>
          <span class="pl-ent">path</span>: <span class="pl-s">test-results/</span>
          <span class="pl-ent">retention-days</span>: <span class="pl-c1">7</span></pre></div>
<p dir="auto"><strong>Test file (self-contained)</strong>: It can be any test, it doesn't matter</p>
<p dir="auto"><strong>Steps</strong></p>
<ul dir="auto">
<li>Run the github actions of my repository. macOS-webkit throws error, and if you run again ubunto-webkit (now with cache), also throw error.</li>
</ul>
<p dir="auto"><strong>Expected</strong></p>
<p dir="auto">The test on webkit should succeed even when the browser and its dependencies are cached.</p>
<p dir="auto"><strong>Actual</strong></p>
<ul dir="auto">
<li>In ubuntu-webkit, if the browser IS NOT cached, the execution of the tests gives this error:</li>
</ul>
<p dir="auto"><a target="_blank" rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/43938777/229361516-ef5298fe-0c71-447c-80ba-34b64b4f5ed3.png"><img src="https://user-images.githubusercontent.com/43938777/229361516-ef5298fe-0c71-447c-80ba-34b64b4f5ed3.png" alt="image" style="max-width: 100%;"></a></p>
<ul dir="auto">
<li>in macOS webkit, the execution of the tests gives the following error:</li>
</ul>
<p dir="auto"><a target="_blank" rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/43938777/229360380-d758f33b-6083-452d-b6b4-d81ce2281b40.png"><img src="https://user-images.githubusercontent.com/43938777/229360380-d758f33b-6083-452d-b6b4-d81ce2281b40.png" alt="image" style="max-width: 100%;"></a></p>
<p dir="auto">My guess is that the PLAYWRIGHT_BROWSERS_PATH environment variable doesn't work well with webkit, because if I remove it and don't cache at all, the tests work fine.</p>
<p dir="auto">note: If you want to reproduce in another repo, you can change the --project flag to --browser to avoid plawright.config.ts.</p>