<p dir="auto">Hi,</p>
<p dir="auto">We have had a setup using Playwright that accesses Business central for more than 2 years running smoothly. 4 different processes running several time a day and each proces runs +45 times.</p>
<p dir="auto">Since update to version 22.X of Business central the process stalls just after business central has logged in (can see login in the AD).<br>
Business central is stalled at 'Getting Ready...' seems to go into loop. We await next step and have tried to expand the wait significantly but Business central never continues.</p>
<p dir="auto">Have tried Microsoft business central support but without luck - they say that this is not supported by them. Tech guy helping me has been really helpful but think he was 'closed down' as the Business Central Group does not see it as being their issue.....no changes til Business Central will happen to mitigate around this.</p>
<p dir="auto">We have tried many things - and we have different documentation and can also create further documentation if it can help.</p>
<p dir="auto">We have a Business Central version 21 running and the process runs successfully as they have done for over 2 years - related to this we have Playwright trace files and HAR files</p>
<p dir="auto">We have a Business Central version 22.X running and the process stalls every time and we have tried hundreds of times - related to this we have Playwright trace files and HAR files also</p>
<p dir="auto">Have tried both of the above with a dedicated VPN also - no difference.</p>
<p dir="auto">Is there anybody out there who could help us in any way??<br>
Does anybody know how to interpretate the files?<br>
This has been down since 4. June now so if anybody knows anything that they believe could help we would really appreciate!</p>



<h3 dir="auto">System info</h3>
<ul dir="auto">
<li>Playwright Version: [v1.XX] - latest</li>
<li>Operating System: [All, Windows 11, Ubuntu 20, macOS 13.2, etc.]</li>
<li>Browser: [All, <strong>Chromium</strong>, Firefox, WebKit]</li>
<li>Other info: Executing using PlayWright</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"> 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">[https://github.com/your_profile/playwright_issue_title]</p>
<p dir="auto">or</p>
<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 '@playwright/test';

export default defineConfig({
  projects: [
    {
      name: 'chromium',
      use: { ...devices['Desktop Chrome'], },
    },
});"><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">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-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="it('should check the box using setChecked', async ({ page }) =&gt; {
  await page.setContent(`&lt;input id='checkbox' type='checkbox'&gt;&lt;/input&gt;`);
  await page.getByRole('checkbox').check();
  await expect(page.getByRole('checkbox')).toBeChecked();
});"><pre class="notranslate"><span class="pl-en">it</span><span class="pl-kos">(</span><span class="pl-s">'should check the box using setChecked'</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-s1">page</span><span class="pl-kos">.</span><span class="pl-en">setContent</span><span class="pl-kos">(</span><span class="pl-s">`&lt;input id='checkbox' type='checkbox'&gt;&lt;/input&gt;`</span><span class="pl-kos">)</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">getByRole</span><span class="pl-kos">(</span><span class="pl-s">'checkbox'</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">check</span><span class="pl-kos">(</span><span class="pl-kos">)</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-s1">page</span><span class="pl-kos">.</span><span class="pl-en">getByRole</span><span class="pl-kos">(</span><span class="pl-s">'checkbox'</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">toBeChecked</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>[...]</li>
</ul>
<p dir="auto"><strong>Expected</strong></p>
<p dir="auto">[Describe expected behavior]</p>
<p dir="auto"><strong>Actual</strong></p>
<p dir="auto">[Describe actual behavior]</p>
<h3 dir="auto">System info</h3>
<ul dir="auto">
<li>Playwright Version: v1.32.2</li>
<li>Operating System: Windows</li>
<li>Browser: Chromium</li>
<li>Other info:</li>
</ul>
<h3 dir="auto">Source code</h3>
<ul dir="auto">
<li>[x ] 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"><a href="https://github.com/AlexKomanov/playwright-speed-issue">Repository</a></p>
<p dir="auto">or</p>
<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 {PlaywrightTestConfig} from &quot;@playwright/test&quot;;

const config: PlaywrightTestConfig = {
    timeout: 240000,
    globalTimeout: 18000000,
    testDir: &quot;./tests&quot;,
    reporter: [
        [&quot;list&quot;],
        [&quot;junit&quot;, {outputFile: &quot;reports/test-results.xml&quot;}],
        [&quot;json&quot;, {outputFile: &quot;reports/test-results.json&quot;}],
        [&quot;html&quot;, {open: &quot;never&quot;}],
    ],
    use: {
        browserName: &quot;chromium&quot;,
        actionTimeout: 30000,
        trace: &quot;off&quot;,
        screenshot: &quot;on&quot;,
        viewport: {width: 1400, height: 900},
        video: {
            mode: &quot;retain-on-failure&quot;,
            size: {
                //Like in our project
                width: 1400,
                height: 900,
            },
        },
        contextOptions: {
            ignoreHTTPSErrors: true,
        },
        // Browser options
        launchOptions: {
            channel: &quot;chrome&quot;,
            slowMo: 200,
            args: [
                &quot;--no-sandbox&quot;,
                &quot;--ignore-certificate-errors&quot;,
                &quot;--ignore-certificate-errors-skip-list&quot;,
            ],
        },
    },
};

export default config;"><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-v">PlaywrightTestConfig</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">const</span> <span class="pl-s1">config</span>: <span class="pl-v">PlaywrightTestConfig</span> <span class="pl-c1">=</span> <span class="pl-kos">{</span>
    <span class="pl-c1">timeout</span>: <span class="pl-c1">240000</span><span class="pl-kos">,</span>
    <span class="pl-c1">globalTimeout</span>: <span class="pl-c1">18000000</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">reporter</span>: <span class="pl-kos">[</span>
        <span class="pl-kos">[</span><span class="pl-s">"list"</span><span class="pl-kos">]</span><span class="pl-kos">,</span>
        <span class="pl-kos">[</span><span class="pl-s">"junit"</span><span class="pl-kos">,</span> <span class="pl-kos">{</span><span class="pl-c1">outputFile</span>: <span class="pl-s">"reports/test-results.xml"</span><span class="pl-kos">}</span><span class="pl-kos">]</span><span class="pl-kos">,</span>
        <span class="pl-kos">[</span><span class="pl-s">"json"</span><span class="pl-kos">,</span> <span class="pl-kos">{</span><span class="pl-c1">outputFile</span>: <span class="pl-s">"reports/test-results.json"</span><span class="pl-kos">}</span><span class="pl-kos">]</span><span class="pl-kos">,</span>
        <span class="pl-kos">[</span><span class="pl-s">"html"</span><span class="pl-kos">,</span> <span class="pl-kos">{</span><span class="pl-c1">open</span>: <span class="pl-s">"never"</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">use</span>: <span class="pl-kos">{</span>
        <span class="pl-c1">browserName</span>: <span class="pl-s">"chromium"</span><span class="pl-kos">,</span>
        <span class="pl-c1">actionTimeout</span>: <span class="pl-c1">30000</span><span class="pl-kos">,</span>
        <span class="pl-c1">trace</span>: <span class="pl-s">"off"</span><span class="pl-kos">,</span>
        <span class="pl-c1">screenshot</span>: <span class="pl-s">"on"</span><span class="pl-kos">,</span>
        <span class="pl-c1">viewport</span>: <span class="pl-kos">{</span><span class="pl-c1">width</span>: <span class="pl-c1">1400</span><span class="pl-kos">,</span> <span class="pl-c1">height</span>: <span class="pl-c1">900</span><span class="pl-kos">}</span><span class="pl-kos">,</span>
        <span class="pl-c1">video</span>: <span class="pl-kos">{</span>
            <span class="pl-c1">mode</span>: <span class="pl-s">"retain-on-failure"</span><span class="pl-kos">,</span>
            <span class="pl-c1">size</span>: <span class="pl-kos">{</span>
                <span class="pl-c">//Like in our project</span>
                <span class="pl-c1">width</span>: <span class="pl-c1">1400</span><span class="pl-kos">,</span>
                <span class="pl-c1">height</span>: <span class="pl-c1">900</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">contextOptions</span>: <span class="pl-kos">{</span>
            <span class="pl-c1">ignoreHTTPSErrors</span>: <span class="pl-c1">true</span><span class="pl-kos">,</span>
        <span class="pl-kos">}</span><span class="pl-kos">,</span>
        <span class="pl-c">// Browser options</span>
        <span class="pl-c1">launchOptions</span>: <span class="pl-kos">{</span>
            <span class="pl-c1">channel</span>: <span class="pl-s">"chrome"</span><span class="pl-kos">,</span>
            <span class="pl-c1">slowMo</span>: <span class="pl-c1">200</span><span class="pl-kos">,</span>
            <span class="pl-c1">args</span>: <span class="pl-kos">[</span>
                <span class="pl-s">"--no-sandbox"</span><span class="pl-kos">,</span>
                <span class="pl-s">"--ignore-certificate-errors"</span><span class="pl-kos">,</span>
                <span class="pl-s">"--ignore-certificate-errors-skip-list"</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-k">export</span> <span class="pl-k">default</span> <span class="pl-s1">config</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 '@playwright/test';

test.describe(&quot;Describe&quot;, () =&gt; {
    test.beforeEach(async ({page}) =&gt; {
        await page.setViewportSize({width: 1400, height: 900});
    })
    
    test('test 1', async ({ page }) =&gt; {
    
      await page.goto('https://playwright.dev/');
    
      // Expect a title &quot;to contain&quot; a substring.
      await expect(page).toHaveTitle(/Playwright/);
    
      // create a locator
      const getStarted = page.getByText('Get Started');
    
      // Expect an attribute &quot;to be strictly equal&quot; to the value.
      await expect(getStarted).toHaveAttribute('href', '/docs/intro');
    
      //page.waitForFunction
      await page.waitForFunction(() =&gt; document.querySelectorAll('[class=&quot;navbar__logo&quot;]').length == 1, {timeout: 60000});
    
      // locator.toHaveCount()
      await expect(page.locator('[class=&quot;navbar__logo&quot;]')).toHaveCount(1);
    
      // Click the get started link.
      await getStarted.click();
    
      // Expects the URL to contain intro.
      await expect(page).toHaveURL(/.*intro/);
    });

    test('test 2', async ({ page }) =&gt; {
    
        await page.goto('https://playwright.dev/');
      
        // Expect a title &quot;to contain&quot; a substring.
        await expect(page).toHaveTitle(/Playwright/);
      
        // create a locator
        const getStarted = page.getByText('Get Started');
      
        // Expect an attribute &quot;to be strictly equal&quot; to the value.
        await expect(getStarted).toHaveAttribute('href', '/docs/intro');
      
        //page.waitForFunction
        await page.waitForFunction(() =&gt; document.querySelectorAll('[class=&quot;navbar__logo&quot;]').length == 1, {timeout: 60000});
      
        // locator.toHaveCount()
        await expect(page.locator('[class=&quot;navbar__logo&quot;]')).toHaveCount(1);
      
        // Click the get started link.
        await getStarted.click();
      
        // Expects the URL to contain intro.
        await expect(page).toHaveURL(/.*intro/);
      });

      test('test 3', async ({ page }) =&gt; {
    
        await page.goto('https://playwright.dev/');
 
        // Expect a title &quot;to contain&quot; a substring.
        await expect(page).toHaveTitle(/Playwright/);
      
        // create a locator
        const getStarted = page.getByText('Get Started');
      
        // Expect an attribute &quot;to be strictly equal&quot; to the value.
        await expect(getStarted).toHaveAttribute('href', '/docs/intro');
      
        //page.waitForFunction
        await page.waitForFunction(() =&gt; document.querySelectorAll('[class=&quot;navbar__logo&quot;]').length == 1, {timeout: 60000});
      
        // locator.toHaveCount()
        await expect(page.locator('[class=&quot;navbar__logo&quot;]')).toHaveCount(1);
      
        // Click the get started link.
        await getStarted.click();
      
        // Expects the URL to contain intro.
        await expect(page).toHaveURL(/.*intro/);
      });
  
      test('test 4', async ({ page }) =&gt; {
           
          await page.goto('https://playwright.dev/');
        
          // Expect a title &quot;to contain&quot; a substring.
          await expect(page).toHaveTitle(/Playwright/);
        
          // create a locator
          const getStarted = page.getByText('Get Started');
        
          // Expect an attribute &quot;to be strictly equal&quot; to the value.
          await expect(getStarted).toHaveAttribute('href', '/docs/intro');
        
          //page.waitForFunction
          await page.waitForFunction(() =&gt; document.querySelectorAll('[class=&quot;navbar__logo&quot;]').length == 1, {timeout: 60000});
        
          // locator.toHaveCount()
          await expect(page.locator('[class=&quot;navbar__logo&quot;]')).toHaveCount(1);
        
          // Click the get started link.
          await getStarted.click();
        
          // Expects the URL to contain intro.
          await expect(page).toHaveURL(/.*intro/);
        });

        test('test 5', async ({ page }) =&gt; {
           
            await page.goto('https://playwright.dev/');
          
            // Expect a title &quot;to contain&quot; a substring.
            await expect(page).toHaveTitle(/Playwright/);
          
            // create a locator
            const getStarted = page.getByText('Get Started');
          
            // Expect an attribute &quot;to be strictly equal&quot; to the value.
            await expect(getStarted).toHaveAttribute('href', '/docs/intro');
          
            //page.waitForFunction
            await page.waitForFunction(() =&gt; document.querySelectorAll('[class=&quot;navbar__logo&quot;]').length == 1, {timeout: 60000});
          
            // locator.toHaveCount()
            await expect(page.locator('[class=&quot;navbar__logo&quot;]')).toHaveCount(1);
          
            // Click the get started link.
            await getStarted.click();
          
            // Expects the URL to contain intro.
            await expect(page).toHaveURL(/.*intro/);
          });
})
"><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-s1">test</span><span class="pl-kos">.</span><span class="pl-en">describe</span><span class="pl-kos">(</span><span class="pl-s">"Describe"</span><span class="pl-kos">,</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-s1">test</span><span class="pl-kos">.</span><span class="pl-en">beforeEach</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-s1">page</span><span class="pl-kos">.</span><span class="pl-en">setViewportSize</span><span class="pl-kos">(</span><span class="pl-kos">{</span><span class="pl-c1">width</span>: <span class="pl-c1">1400</span><span class="pl-kos">,</span> <span class="pl-c1">height</span>: <span class="pl-c1">900</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">test</span><span class="pl-kos">(</span><span class="pl-s">'test 1'</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-s1">page</span><span class="pl-kos">.</span><span class="pl-en">goto</span><span class="pl-kos">(</span><span class="pl-s">'https://playwright.dev/'</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
    
      <span class="pl-c">// Expect a title "to contain" a substring.</span>
      <span class="pl-k">await</span> <span class="pl-en">expect</span><span class="pl-kos">(</span><span class="pl-s1">page</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">toHaveTitle</span><span class="pl-kos">(</span><span class="pl-pds"><span class="pl-c1">/</span>Playwright<span class="pl-c1">/</span></span><span class="pl-kos">)</span><span class="pl-kos">;</span>
    
      <span class="pl-c">// create a locator</span>
      <span class="pl-k">const</span> <span class="pl-s1">getStarted</span> <span class="pl-c1">=</span> <span class="pl-s1">page</span><span class="pl-kos">.</span><span class="pl-en">getByText</span><span class="pl-kos">(</span><span class="pl-s">'Get Started'</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
    
      <span class="pl-c">// Expect an attribute "to be strictly equal" to the value.</span>
      <span class="pl-k">await</span> <span class="pl-en">expect</span><span class="pl-kos">(</span><span class="pl-s1">getStarted</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">toHaveAttribute</span><span class="pl-kos">(</span><span class="pl-s">'href'</span><span class="pl-kos">,</span> <span class="pl-s">'/docs/intro'</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
    
      <span class="pl-c">//page.waitForFunction</span>
      <span class="pl-k">await</span> <span class="pl-s1">page</span><span class="pl-kos">.</span><span class="pl-en">waitForFunction</span><span class="pl-kos">(</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-c1">=&gt;</span> <span class="pl-smi">document</span><span class="pl-kos">.</span><span class="pl-en">querySelectorAll</span><span class="pl-kos">(</span><span class="pl-s">'[class="navbar__logo"]'</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-c1">length</span> <span class="pl-c1">==</span> <span class="pl-c1">1</span><span class="pl-kos">,</span> <span class="pl-kos">{</span><span class="pl-c1">timeout</span>: <span class="pl-c1">60000</span><span class="pl-kos">}</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
    
      <span class="pl-c">// locator.toHaveCount()</span>
      <span class="pl-k">await</span> <span class="pl-en">expect</span><span class="pl-kos">(</span><span class="pl-s1">page</span><span class="pl-kos">.</span><span class="pl-en">locator</span><span class="pl-kos">(</span><span class="pl-s">'[class="navbar__logo"]'</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">toHaveCount</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-c">// Click the get started link.</span>
      <span class="pl-k">await</span> <span class="pl-s1">getStarted</span><span class="pl-kos">.</span><span class="pl-en">click</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
    
      <span class="pl-c">// Expects the URL to contain intro.</span>
      <span class="pl-k">await</span> <span class="pl-en">expect</span><span class="pl-kos">(</span><span class="pl-s1">page</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">toHaveURL</span><span class="pl-kos">(</span><span class="pl-pds"><span class="pl-c1">/</span>.<span class="pl-c1">*</span>intro<span class="pl-c1">/</span></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">test</span><span class="pl-kos">(</span><span class="pl-s">'test 2'</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-s1">page</span><span class="pl-kos">.</span><span class="pl-en">goto</span><span class="pl-kos">(</span><span class="pl-s">'https://playwright.dev/'</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
      
        <span class="pl-c">// Expect a title "to contain" a substring.</span>
        <span class="pl-k">await</span> <span class="pl-en">expect</span><span class="pl-kos">(</span><span class="pl-s1">page</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">toHaveTitle</span><span class="pl-kos">(</span><span class="pl-pds"><span class="pl-c1">/</span>Playwright<span class="pl-c1">/</span></span><span class="pl-kos">)</span><span class="pl-kos">;</span>
      
        <span class="pl-c">// create a locator</span>
        <span class="pl-k">const</span> <span class="pl-s1">getStarted</span> <span class="pl-c1">=</span> <span class="pl-s1">page</span><span class="pl-kos">.</span><span class="pl-en">getByText</span><span class="pl-kos">(</span><span class="pl-s">'Get Started'</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
      
        <span class="pl-c">// Expect an attribute "to be strictly equal" to the value.</span>
        <span class="pl-k">await</span> <span class="pl-en">expect</span><span class="pl-kos">(</span><span class="pl-s1">getStarted</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">toHaveAttribute</span><span class="pl-kos">(</span><span class="pl-s">'href'</span><span class="pl-kos">,</span> <span class="pl-s">'/docs/intro'</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
      
        <span class="pl-c">//page.waitForFunction</span>
        <span class="pl-k">await</span> <span class="pl-s1">page</span><span class="pl-kos">.</span><span class="pl-en">waitForFunction</span><span class="pl-kos">(</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-c1">=&gt;</span> <span class="pl-smi">document</span><span class="pl-kos">.</span><span class="pl-en">querySelectorAll</span><span class="pl-kos">(</span><span class="pl-s">'[class="navbar__logo"]'</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-c1">length</span> <span class="pl-c1">==</span> <span class="pl-c1">1</span><span class="pl-kos">,</span> <span class="pl-kos">{</span><span class="pl-c1">timeout</span>: <span class="pl-c1">60000</span><span class="pl-kos">}</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
      
        <span class="pl-c">// locator.toHaveCount()</span>
        <span class="pl-k">await</span> <span class="pl-en">expect</span><span class="pl-kos">(</span><span class="pl-s1">page</span><span class="pl-kos">.</span><span class="pl-en">locator</span><span class="pl-kos">(</span><span class="pl-s">'[class="navbar__logo"]'</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">toHaveCount</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-c">// Click the get started link.</span>
        <span class="pl-k">await</span> <span class="pl-s1">getStarted</span><span class="pl-kos">.</span><span class="pl-en">click</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
      
        <span class="pl-c">// Expects the URL to contain intro.</span>
        <span class="pl-k">await</span> <span class="pl-en">expect</span><span class="pl-kos">(</span><span class="pl-s1">page</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">toHaveURL</span><span class="pl-kos">(</span><span class="pl-pds"><span class="pl-c1">/</span>.<span class="pl-c1">*</span>intro<span class="pl-c1">/</span></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">test</span><span class="pl-kos">(</span><span class="pl-s">'test 3'</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-s1">page</span><span class="pl-kos">.</span><span class="pl-en">goto</span><span class="pl-kos">(</span><span class="pl-s">'https://playwright.dev/'</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
 
        <span class="pl-c">// Expect a title "to contain" a substring.</span>
        <span class="pl-k">await</span> <span class="pl-en">expect</span><span class="pl-kos">(</span><span class="pl-s1">page</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">toHaveTitle</span><span class="pl-kos">(</span><span class="pl-pds"><span class="pl-c1">/</span>Playwright<span class="pl-c1">/</span></span><span class="pl-kos">)</span><span class="pl-kos">;</span>
      
        <span class="pl-c">// create a locator</span>
        <span class="pl-k">const</span> <span class="pl-s1">getStarted</span> <span class="pl-c1">=</span> <span class="pl-s1">page</span><span class="pl-kos">.</span><span class="pl-en">getByText</span><span class="pl-kos">(</span><span class="pl-s">'Get Started'</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
      
        <span class="pl-c">// Expect an attribute "to be strictly equal" to the value.</span>
        <span class="pl-k">await</span> <span class="pl-en">expect</span><span class="pl-kos">(</span><span class="pl-s1">getStarted</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">toHaveAttribute</span><span class="pl-kos">(</span><span class="pl-s">'href'</span><span class="pl-kos">,</span> <span class="pl-s">'/docs/intro'</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
      
        <span class="pl-c">//page.waitForFunction</span>
        <span class="pl-k">await</span> <span class="pl-s1">page</span><span class="pl-kos">.</span><span class="pl-en">waitForFunction</span><span class="pl-kos">(</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-c1">=&gt;</span> <span class="pl-smi">document</span><span class="pl-kos">.</span><span class="pl-en">querySelectorAll</span><span class="pl-kos">(</span><span class="pl-s">'[class="navbar__logo"]'</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-c1">length</span> <span class="pl-c1">==</span> <span class="pl-c1">1</span><span class="pl-kos">,</span> <span class="pl-kos">{</span><span class="pl-c1">timeout</span>: <span class="pl-c1">60000</span><span class="pl-kos">}</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
      
        <span class="pl-c">// locator.toHaveCount()</span>
        <span class="pl-k">await</span> <span class="pl-en">expect</span><span class="pl-kos">(</span><span class="pl-s1">page</span><span class="pl-kos">.</span><span class="pl-en">locator</span><span class="pl-kos">(</span><span class="pl-s">'[class="navbar__logo"]'</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">toHaveCount</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-c">// Click the get started link.</span>
        <span class="pl-k">await</span> <span class="pl-s1">getStarted</span><span class="pl-kos">.</span><span class="pl-en">click</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
      
        <span class="pl-c">// Expects the URL to contain intro.</span>
        <span class="pl-k">await</span> <span class="pl-en">expect</span><span class="pl-kos">(</span><span class="pl-s1">page</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">toHaveURL</span><span class="pl-kos">(</span><span class="pl-pds"><span class="pl-c1">/</span>.<span class="pl-c1">*</span>intro<span class="pl-c1">/</span></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">test</span><span class="pl-kos">(</span><span class="pl-s">'test 4'</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-s1">page</span><span class="pl-kos">.</span><span class="pl-en">goto</span><span class="pl-kos">(</span><span class="pl-s">'https://playwright.dev/'</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
        
          <span class="pl-c">// Expect a title "to contain" a substring.</span>
          <span class="pl-k">await</span> <span class="pl-en">expect</span><span class="pl-kos">(</span><span class="pl-s1">page</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">toHaveTitle</span><span class="pl-kos">(</span><span class="pl-pds"><span class="pl-c1">/</span>Playwright<span class="pl-c1">/</span></span><span class="pl-kos">)</span><span class="pl-kos">;</span>
        
          <span class="pl-c">// create a locator</span>
          <span class="pl-k">const</span> <span class="pl-s1">getStarted</span> <span class="pl-c1">=</span> <span class="pl-s1">page</span><span class="pl-kos">.</span><span class="pl-en">getByText</span><span class="pl-kos">(</span><span class="pl-s">'Get Started'</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
        
          <span class="pl-c">// Expect an attribute "to be strictly equal" to the value.</span>
          <span class="pl-k">await</span> <span class="pl-en">expect</span><span class="pl-kos">(</span><span class="pl-s1">getStarted</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">toHaveAttribute</span><span class="pl-kos">(</span><span class="pl-s">'href'</span><span class="pl-kos">,</span> <span class="pl-s">'/docs/intro'</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
        
          <span class="pl-c">//page.waitForFunction</span>
          <span class="pl-k">await</span> <span class="pl-s1">page</span><span class="pl-kos">.</span><span class="pl-en">waitForFunction</span><span class="pl-kos">(</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-c1">=&gt;</span> <span class="pl-smi">document</span><span class="pl-kos">.</span><span class="pl-en">querySelectorAll</span><span class="pl-kos">(</span><span class="pl-s">'[class="navbar__logo"]'</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-c1">length</span> <span class="pl-c1">==</span> <span class="pl-c1">1</span><span class="pl-kos">,</span> <span class="pl-kos">{</span><span class="pl-c1">timeout</span>: <span class="pl-c1">60000</span><span class="pl-kos">}</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
        
          <span class="pl-c">// locator.toHaveCount()</span>
          <span class="pl-k">await</span> <span class="pl-en">expect</span><span class="pl-kos">(</span><span class="pl-s1">page</span><span class="pl-kos">.</span><span class="pl-en">locator</span><span class="pl-kos">(</span><span class="pl-s">'[class="navbar__logo"]'</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">toHaveCount</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-c">// Click the get started link.</span>
          <span class="pl-k">await</span> <span class="pl-s1">getStarted</span><span class="pl-kos">.</span><span class="pl-en">click</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
        
          <span class="pl-c">// Expects the URL to contain intro.</span>
          <span class="pl-k">await</span> <span class="pl-en">expect</span><span class="pl-kos">(</span><span class="pl-s1">page</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">toHaveURL</span><span class="pl-kos">(</span><span class="pl-pds"><span class="pl-c1">/</span>.<span class="pl-c1">*</span>intro<span class="pl-c1">/</span></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">test</span><span class="pl-kos">(</span><span class="pl-s">'test 5'</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-s1">page</span><span class="pl-kos">.</span><span class="pl-en">goto</span><span class="pl-kos">(</span><span class="pl-s">'https://playwright.dev/'</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
          
            <span class="pl-c">// Expect a title "to contain" a substring.</span>
            <span class="pl-k">await</span> <span class="pl-en">expect</span><span class="pl-kos">(</span><span class="pl-s1">page</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">toHaveTitle</span><span class="pl-kos">(</span><span class="pl-pds"><span class="pl-c1">/</span>Playwright<span class="pl-c1">/</span></span><span class="pl-kos">)</span><span class="pl-kos">;</span>
          
            <span class="pl-c">// create a locator</span>
            <span class="pl-k">const</span> <span class="pl-s1">getStarted</span> <span class="pl-c1">=</span> <span class="pl-s1">page</span><span class="pl-kos">.</span><span class="pl-en">getByText</span><span class="pl-kos">(</span><span class="pl-s">'Get Started'</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
          
            <span class="pl-c">// Expect an attribute "to be strictly equal" to the value.</span>
            <span class="pl-k">await</span> <span class="pl-en">expect</span><span class="pl-kos">(</span><span class="pl-s1">getStarted</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">toHaveAttribute</span><span class="pl-kos">(</span><span class="pl-s">'href'</span><span class="pl-kos">,</span> <span class="pl-s">'/docs/intro'</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
          
            <span class="pl-c">//page.waitForFunction</span>
            <span class="pl-k">await</span> <span class="pl-s1">page</span><span class="pl-kos">.</span><span class="pl-en">waitForFunction</span><span class="pl-kos">(</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-c1">=&gt;</span> <span class="pl-smi">document</span><span class="pl-kos">.</span><span class="pl-en">querySelectorAll</span><span class="pl-kos">(</span><span class="pl-s">'[class="navbar__logo"]'</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-c1">length</span> <span class="pl-c1">==</span> <span class="pl-c1">1</span><span class="pl-kos">,</span> <span class="pl-kos">{</span><span class="pl-c1">timeout</span>: <span class="pl-c1">60000</span><span class="pl-kos">}</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
          
            <span class="pl-c">// locator.toHaveCount()</span>
            <span class="pl-k">await</span> <span class="pl-en">expect</span><span class="pl-kos">(</span><span class="pl-s1">page</span><span class="pl-kos">.</span><span class="pl-en">locator</span><span class="pl-kos">(</span><span class="pl-s">'[class="navbar__logo"]'</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">toHaveCount</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-c">// Click the get started link.</span>
            <span class="pl-k">await</span> <span class="pl-s1">getStarted</span><span class="pl-kos">.</span><span class="pl-en">click</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
          
            <span class="pl-c">// Expects the URL to contain intro.</span>
            <span class="pl-k">await</span> <span class="pl-en">expect</span><span class="pl-kos">(</span><span class="pl-s1">page</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">toHaveURL</span><span class="pl-kos">(</span><span class="pl-pds"><span class="pl-c1">/</span>.<span class="pl-c1">*</span>intro<span class="pl-c1">/</span></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>Steps</strong></p>
<ul dir="auto">
<li>Run the test</li>
<li>Open the HTML report</li>
</ul>
<p dir="auto"><strong>Expected</strong></p>
<p dir="auto">The assertions should take the same time in the different versions and even should be with a better performance.</p>
<p dir="auto"><strong>Actual</strong></p>
<p dir="auto">As can be seen - each assertion and page.waitForFunction() takes at least 200ms more:</p>
<p dir="auto"><strong>version 1.27.1</strong></p>
<p dir="auto"><a target="_blank" rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/52656401/230666506-30fa111f-a488-4019-8df6-6230b4185271.png"><img src="https://user-images.githubusercontent.com/52656401/230666506-30fa111f-a488-4019-8df6-6230b4185271.png" alt="Results 1 27 1" style="max-width: 100%;"></a></p>
<p dir="auto"><strong>version 1.32.2</strong><br>
<a target="_blank" rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/52656401/230666571-24a2fc15-72e2-45bf-a9cb-609b4001a5ff.png"><img src="https://user-images.githubusercontent.com/52656401/230666571-24a2fc15-72e2-45bf-a9cb-609b4001a5ff.png" alt="Results 1 32 2" style="max-width: 100%;"></a></p>
<p dir="auto">You have a link for a repo that contains two branches (with different versions) and GitHub Actions executions.</p>
<p dir="auto"><strong>Note:</strong> We use <code class="notranslate">sloMo: 200</code> in our config file, it is required to us because of the Playwright speed. Our tested platform works slowly.  But it is the same parameter in two branches and versions.</p>
<p dir="auto">Maybe the parameter of the <code class="notranslate">sloMo</code> didn't affect the assertions with version 1.27.1 and started to affect the newest version?</p>