<h3 dir="auto">System info</h3>
<ul dir="auto">
<li>Playwright Version: [v1.32.2] (also observed on 1.31)</li>
<li>Operating System: [Official Playwright Docker container] (also on my dev machine running Linux EndeavourOS)</li>
<li>Browser: [All]</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>Config file</strong></p>
<div class="highlight highlight-source-js notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="// playwright.config.ts
import { defineConfig, devices } from &quot;@playwright/test&quot;;

export default defineConfig({
  testDir: &quot;./tests&quot;,
  fullyParallel: true,
  retries: 1,
  workers: undefined,
  reporter: &quot;html&quot;,
  use: {
    trace: &quot;retain-on-failure&quot;,
  },
  projects: [
    {
      name: &quot;chromium&quot;,
      use: { ...devices[&quot;Desktop Chrome&quot;] },
    },
    {
      name: &quot;firefox&quot;,
      use: {
        ...devices[&quot;Desktop Firefox&quot;],
      },
    },
  ],
});
"><pre class="notranslate"><span class="pl-c">// playwright.config.ts</span>
<span class="pl-k">import</span> <span class="pl-kos">{</span> <span class="pl-s1">defineConfig</span><span class="pl-kos">,</span> <span class="pl-s1">devices</span> <span class="pl-kos">}</span> <span class="pl-k">from</span> <span class="pl-s">"@playwright/test"</span><span class="pl-kos">;</span>

<span class="pl-k">export</span> <span class="pl-k">default</span> <span class="pl-en">defineConfig</span><span class="pl-kos">(</span><span class="pl-kos">{</span>
  <span class="pl-c1">testDir</span>: <span class="pl-s">"./tests"</span><span class="pl-kos">,</span>
  <span class="pl-c1">fullyParallel</span>: <span class="pl-c1">true</span><span class="pl-kos">,</span>
  <span class="pl-c1">retries</span>: <span class="pl-c1">1</span><span class="pl-kos">,</span>
  <span class="pl-c1">workers</span>: <span class="pl-c1">undefined</span><span class="pl-kos">,</span>
  <span class="pl-c1">reporter</span>: <span class="pl-s">"html"</span><span class="pl-kos">,</span>
  <span class="pl-c1">use</span>: <span class="pl-kos">{</span>
    <span class="pl-c1">trace</span>: <span class="pl-s">"retain-on-failure"</span><span class="pl-kos">,</span>
  <span class="pl-kos">}</span><span class="pl-kos">,</span>
  <span class="pl-c1">projects</span>: <span class="pl-kos">[</span>
    <span class="pl-kos">{</span>
      <span class="pl-c1">name</span>: <span class="pl-s">"chromium"</span><span class="pl-kos">,</span>
      <span class="pl-c1">use</span>: <span class="pl-kos">{</span> ...<span class="pl-s1">devices</span><span class="pl-kos">[</span><span class="pl-s">"Desktop Chrome"</span><span class="pl-kos">]</span> <span class="pl-kos">}</span><span class="pl-kos">,</span>
    <span class="pl-kos">}</span><span class="pl-kos">,</span>
    <span class="pl-kos">{</span>
      <span class="pl-c1">name</span>: <span class="pl-s">"firefox"</span><span class="pl-kos">,</span>
      <span class="pl-c1">use</span>: <span class="pl-kos">{</span>
        ...<span class="pl-s1">devices</span><span class="pl-kos">[</span><span class="pl-s">"Desktop Firefox"</span><span class="pl-kos">]</span><span class="pl-kos">,</span>
      <span class="pl-kos">}</span><span class="pl-kos">,</span>
    <span class="pl-kos">}</span><span class="pl-kos">,</span>
  <span class="pl-kos">]</span><span class="pl-kos">,</span>
<span class="pl-kos">}</span><span class="pl-kos">)</span><span class="pl-kos">;</span></pre></div>
<p dir="auto"><strong>Test file (self-contained)</strong></p>
<div class="highlight highlight-source-js notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="import { test, expect } from &quot;@playwright/test&quot;;

test(&quot;do not pass&quot;, async ({ page }) =&gt; {
  await expect(async () =&gt; {
    await page.waitForTimeout(100);
    expect(1).toBeGreaterThan(2);
  }).toPass({ timeout: 0 });
});"><pre class="notranslate"><span class="pl-k">import</span> <span class="pl-kos">{</span> <span class="pl-s1">test</span><span class="pl-kos">,</span> <span class="pl-s1">expect</span> <span class="pl-kos">}</span> <span class="pl-k">from</span> <span class="pl-s">"@playwright/test"</span><span class="pl-kos">;</span>

<span class="pl-en">test</span><span class="pl-kos">(</span><span class="pl-s">"do not pass"</span><span class="pl-kos">,</span> <span class="pl-k">async</span> <span class="pl-kos">(</span><span class="pl-kos">{</span> page <span class="pl-kos">}</span><span class="pl-kos">)</span> <span class="pl-c1">=&gt;</span> <span class="pl-kos">{</span>
  <span class="pl-k">await</span> <span class="pl-en">expect</span><span class="pl-kos">(</span><span class="pl-k">async</span> <span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-c1">=&gt;</span> <span class="pl-kos">{</span>
    <span class="pl-k">await</span> <span class="pl-s1">page</span><span class="pl-kos">.</span><span class="pl-en">waitForTimeout</span><span class="pl-kos">(</span><span class="pl-c1">100</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
    <span class="pl-en">expect</span><span class="pl-kos">(</span><span class="pl-c1">1</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">toBeGreaterThan</span><span class="pl-kos">(</span><span class="pl-c1">2</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
  <span class="pl-kos">}</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">toPass</span><span class="pl-kos">(</span><span class="pl-kos">{</span> <span class="pl-c1">timeout</span>: <span class="pl-c1">0</span> <span class="pl-kos">}</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
<span class="pl-kos">}</span><span class="pl-kos">)</span><span class="pl-kos">;</span></pre></div>
<p dir="auto"><strong>Steps</strong></p>
<ul dir="auto">
<li>Run the test</li>
<li>See the test pass or be flaky. (If it happens to actually fail rerun it once or twice.)</li>
</ul>
<p dir="auto"><strong>Expected</strong></p>
<p dir="auto">The test always fails with a test timeout.</p>
<p dir="auto"><strong>Actual</strong></p>
<p dir="auto">The test passes about 50% of the times, most often on the retry. The report then looks like this</p>
<p dir="auto"><a target="_blank" rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/870074/230081256-a679f890-e827-41fa-985c-6834c87961f5.png"><img src="https://user-images.githubusercontent.com/870074/230081256-a679f890-e827-41fa-985c-6834c87961f5.png" alt="grafik" style="max-width: 100%;"></a></p>
<h3 dir="auto">System info</h3>
<ul dir="auto">
<li>Playwright Version: 1.34.3</li>
<li>Operating System: MacOS</li>
<li>Browser: Firefox</li>
<li>Other info:</li>
</ul>
<h3 dir="auto">Source code</h3>
<p dir="auto">N/A</p>
<p dir="auto"><strong>Steps</strong></p>
<ul dir="auto">
<li>Install Playwright/test</li>
<li>Look for downloaded FF version in <code class="notranslate">~/Library/Caches/ms-playwright/</code></li>
</ul>
<p dir="auto"><strong>Expected</strong></p>
<p dir="auto">Stable version of Firefox downloaded.</p>
<p dir="auto"><strong>Actual</strong></p>
<p dir="auto">Nightly version of Firefox downloaded. This is at odds w/ <a href="https://playwright.dev/docs/browsers#firefox" rel="nofollow">the official docs</a>:</p>
<blockquote>
<p dir="auto">Playwright's Firefox version matches the recent <a href="https://www.mozilla.org/en-US/firefox/new/" rel="nofollow">Firefox Stable</a> build.</p>
</blockquote>