<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Using k6 browser on Grafana Labs</title><link>https://grafana.com/docs/k6/v2.3.x/using-k6-browser/</link><description>Recent content in Using k6 browser on Grafana Labs</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="/docs/k6/v2.3.x/using-k6-browser/index.xml" rel="self" type="application/rss+xml"/><item><title>Write your first browser test</title><link>https://grafana.com/docs/k6/v2.3.x/using-k6-browser/write-your-first-browser-test/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/using-k6-browser/write-your-first-browser-test/</guid><content><![CDATA[&lt;h1 id=&#34;write-your-first-browser-test&#34;&gt;Write your first browser test&lt;/h1&gt;
&lt;p&gt;k6 browser tests allow you to simulate real user interactions with web applications, such as clicking buttons, filling out forms, and verifying page content. This helps you test not only backend performance, but also frontend reliability and user experience.&lt;/p&gt;
&lt;p&gt;In this guide, you&amp;rsquo;ll learn how to write your first k6 browser test script using the browser module.&lt;/p&gt;
&lt;h2 id=&#34;before-you-begin&#34;&gt;Before you begin&lt;/h2&gt;
&lt;p&gt;To write and run k6 browser tests, you&amp;rsquo;ll need:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A basic knowledge of JavaScript or TypeScript.&lt;/li&gt;
&lt;li&gt;A code editor to write your scripts, such as &lt;a href=&#34;https://code.visualstudio.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Visual Studio Code&lt;/a&gt; or &lt;a href=&#34;https://www.jetbrains.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;JetBrains editors&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;A Chromium-based browser (such as Google Chrome) installed locally.&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/set-up/install-k6/&#34;&gt;Install k6&lt;/a&gt; on your machine.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;basic-structure-of-a-k6-browser-test&#34;&gt;Basic structure of a k6 browser test&lt;/h2&gt;
&lt;p&gt;For k6 to be able to interpret and execute your test, every k6 script follows a common structure, revolving around a few core components:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Default function&lt;/strong&gt;: This is where the test logic resides. It defines what your test will do and how it will behave during execution. It should be exported as the default function in your script. For browser scripts, it&amp;rsquo;s written as an &lt;code&gt;async&lt;/code&gt; function to handle browser actions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Imports&lt;/strong&gt;: You can import additional 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/&#34;&gt;k6 modules&lt;/a&gt; or 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/jslib/&#34;&gt;JavaScript libraries (jslibs)&lt;/a&gt; to extend your script’s functionality, such as making HTTP requests. Note that k6 is not built upon Node.js, and instead uses its own JavaScript runtime. Compatibility with some npm modules may vary.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Options&lt;/strong&gt;: Enable you to configure the execution of the test, such as defining the number of virtual users, the test duration, or setting performance thresholds. Refer to 
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6/k6-options/&#34;&gt;Options&lt;/a&gt; for more details.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lifecycle operations (optional)&lt;/strong&gt;: Because your test might need to run code before and/or after the execution of the test logic, such as parsing data from a file, or download an object from Amazon S3, 
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6/test-lifecycle/&#34;&gt;lifecycle operations&lt;/a&gt; allow you to write code, either as predefined functions or within specific code scopes, that will be executed at different stages of the test execution.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;key-concepts&#34;&gt;Key concepts&lt;/h2&gt;
&lt;p&gt;To write k6 browser tests, its important to understand a few key concepts:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Browser type&lt;/strong&gt;: A browser script must have the &lt;code&gt;options.browser.type&lt;/code&gt; field set in the &lt;code&gt;options&lt;/code&gt; object. For example:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;js&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-js&#34;&gt;export const options = {
  scenarios: {
    ui: {
      executor: &amp;#39;shared-iterations&amp;#39;,
      options: {
        browser: {
          type: &amp;#39;chromium&amp;#39;,
        },
      },
    },
  },
};&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;If that option isn&amp;rsquo;t set, k6 will throw an error when trying to execute your script.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Asynchronous operations&lt;/strong&gt;: Browser interactions (like navigation and clicks) are asynchronous, so your test must use &lt;code&gt;async&lt;/code&gt;/&lt;code&gt;await&lt;/code&gt;. Refer to 
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6-browser/how-to-write-browser-tests/asynchronous-operations/&#34;&gt;Asynchronous operations&lt;/a&gt; for more details.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Locators&lt;/strong&gt;: The Locator API can be used to find and interact with elements on a page, such as buttons or headers. There are other ways to find elements, such as using the &lt;code&gt;Page.$()&lt;/code&gt; method, but the Locator API provides several benefits, including finding an element even if the underlying frame navigates, and working with dynamic web pages and SPAs such as React.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;write-your-first-browser-test-script&#34;&gt;Write your first browser test script&lt;/h2&gt;
&lt;p&gt;Let&amp;rsquo;s walk through creating a browser test that loads a page, clicks a button, takes a screenshot, and checks for recommendations.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Create a test file&lt;/strong&gt;: A test file can be named anything you like, and live wherever you see fit in your project, but it should have a &lt;code&gt;.js&lt;/code&gt; or &lt;code&gt;.ts&lt;/code&gt; extension. In this example, create a JavaScript file named &lt;code&gt;my-first-browser-test.js&lt;/code&gt;. Open your terminal and run the following command:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;touch my-first-browser-test.js&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Import k6 modules&lt;/strong&gt;: Import the necessary modules for HTTP requests, browser automation, and utility functions.&lt;/p&gt;
&lt;!-- md-k6:skip --&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;js&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-js&#34;&gt;import http from &amp;#39;k6/http&amp;#39;;
import exec from &amp;#39;k6/execution&amp;#39;;
import { browser } from &amp;#39;k6/browser&amp;#39;;
import { sleep, check, fail } from &amp;#39;k6&amp;#39;;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Define options&lt;/strong&gt;: Configure the &lt;code&gt;options&lt;/code&gt; object to use the browser executor and specify the browser type.&lt;/p&gt;
&lt;!-- md-k6:skip --&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;js&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-js&#34;&gt;export const options = {
  scenarios: {
    ui: {
      executor: &amp;#39;shared-iterations&amp;#39;,
      vus: 1,
      iterations: 1,
      options: {
        browser: {
          type: &amp;#39;chromium&amp;#39;,
        },
      },
    },
  },
};&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Setup function&lt;/strong&gt;: Create a &lt;code&gt;setup&lt;/code&gt; function to check if the target site is available, before running the main test logic.&lt;/p&gt;
&lt;!-- md-k6:skip --&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;typescript&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-typescript&#34;&gt;export function setup() {
  let res = http.get(BASE_URL);
  if (res.status !== 200) {
    exec.test.abort(`Got unexpected status code ${res.status} when trying to setup. Exiting.`);
  }
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Default function&lt;/strong&gt;: The default exported function is the entry point for the test script. It will be executed repeatedly the number of times you define with the &lt;code&gt;iterations&lt;/code&gt; option. In this function, using &lt;code&gt;async&lt;/code&gt;/&lt;code&gt;await&lt;/code&gt;, add the functions that open a browser page, interacts with the elements on the page, takes a screenshot, and performs a &lt;code&gt;check&lt;/code&gt;:&lt;/p&gt;
&lt;!-- md-k6:skip --&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;typescript&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-typescript&#34;&gt;export default async function () {
  let checkData;
  const page = await browser.newPage();

  try {
    await page.goto(BASE_URL);

    checkData = await page.locator(&amp;#39;h1&amp;#39;).textContent();
    check(page, {
      header: checkData === &amp;#39;Looking to break out of your pizza routine?&amp;#39;,
    });

    await page.locator(&amp;#39;//button[. = &amp;#34;Pizza, Please!&amp;#34;]&amp;#39;).click();
    await page.waitForTimeout(500);

    await page.screenshot({ path: &amp;#39;screenshot.png&amp;#39; });

    checkData = await page.locator(&amp;#39;div#recommendations&amp;#39;).textContent();
    check(page, {
      recommendation: checkData !== &amp;#39;&amp;#39;,
    });
  } catch (error) {
    fail(`Browser iteration failed: ${error.message}`);
  } finally {
    await page.close();
  }

  sleep(1);
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Your final script should look like this:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;js&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-js&#34;&gt;import http from &amp;#39;k6/http&amp;#39;;
import exec from &amp;#39;k6/execution&amp;#39;;
import { browser } from &amp;#39;k6/browser&amp;#39;;
import { sleep, check, fail } from &amp;#39;k6&amp;#39;;

const BASE_URL = __ENV.BASE_URL || &amp;#39;https://quickpizza.grafana.com&amp;#39;;

export const options = {
  scenarios: {
    ui: {
      executor: &amp;#39;shared-iterations&amp;#39;,
      vus: 1,
      iterations: 1,
      options: {
        browser: {
          type: &amp;#39;chromium&amp;#39;,
        },
      },
    },
  },
};

export function setup() {
  const res = http.get(BASE_URL);
  if (res.status !== 200) {
    exec.test.abort(`Got unexpected status code ${res.status} when trying to setup. Exiting.`);
  }
}

export default async function () {
  let checkData;
  const page = await browser.newPage();

  try {
    await page.goto(BASE_URL);

    checkData = await page.locator(&amp;#39;h1&amp;#39;).textContent();
    check(page, {
      header: checkData === &amp;#39;Looking to break out of your pizza routine?&amp;#39;,
    });

    await page.locator(&amp;#39;//button[. = &amp;#34;Pizza, Please!&amp;#34;]&amp;#39;).click();
    await page.waitForTimeout(500);

    await page.screenshot({ path: &amp;#39;screenshot.png&amp;#39; });

    checkData = await page.locator(&amp;#39;div#recommendations&amp;#39;).textContent();
    check(page, {
      recommendation: checkData !== &amp;#39;&amp;#39;,
    });
  } catch (error) {
    fail(`Browser iteration failed: ${error.message}`);
  } finally {
    await page.close();
  }

  sleep(1);
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;extending-your-browser-test&#34;&gt;Extending your browser test&lt;/h2&gt;
&lt;p&gt;Once you&amp;rsquo;re comfortable with the basics, you can extend your browser test by:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Simulating more complex user flows (multiple pages, form submissions, etc.).&lt;/li&gt;
&lt;li&gt;Adding more checks and assertions to validate UI elements and content.&lt;/li&gt;
&lt;li&gt;Creating hybrid performance tests to test both the frontend and backend simultaneously.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Refer to the 
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6-browser/&#34;&gt;Using k6 browser&lt;/a&gt; section for more details about the browser module and its features.&lt;/p&gt;
&lt;h2 id=&#34;next-steps&#34;&gt;Next steps&lt;/h2&gt;
&lt;p&gt;Now that you&amp;rsquo;ve written your first k6 browser test script, it&amp;rsquo;s time to run it. Refer to 
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6-browser/running-browser-tests/&#34;&gt;Running k6 browser tests&lt;/a&gt; for instructions on executing your script and analyzing results.&lt;/p&gt;
]]></content><description>&lt;h1 id="write-your-first-browser-test">Write your first browser test&lt;/h1>
&lt;p>k6 browser tests allow you to simulate real user interactions with web applications, such as clicking buttons, filling out forms, and verifying page content. This helps you test not only backend performance, but also frontend reliability and user experience.&lt;/p></description></item><item><title>Running browser tests</title><link>https://grafana.com/docs/k6/v2.3.x/using-k6-browser/running-browser-tests/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/using-k6-browser/running-browser-tests/</guid><content><![CDATA[&lt;h1 id=&#34;running-browser-tests&#34;&gt;Running browser tests&lt;/h1&gt;
&lt;p&gt;Follow along to learn how to:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Run a test&lt;/li&gt;
&lt;li&gt;Interact with elements on your webpage&lt;/li&gt;
&lt;li&gt;Wait for page navigation&lt;/li&gt;
&lt;li&gt;Run both browser-level and protocol-level tests in a single script&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;run-a-test&#34;&gt;Run a test&lt;/h2&gt;
&lt;p&gt;To run a simple local script:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Copy the following code, paste it into your favorite editor, and save it as &lt;code&gt;script.js&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Note that providing an &lt;code&gt;executor&lt;/code&gt; and setting the &lt;code&gt;browser&lt;/code&gt; scenario option&amp;rsquo;s &lt;code&gt;type&lt;/code&gt; to &lt;code&gt;chromium&lt;/code&gt; is mandatory. Please see the 
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6/k6-options/&#34;&gt;options&lt;/a&gt; and 
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6/scenarios/&#34;&gt;scenarios&lt;/a&gt; documentation for more information.&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;JavaScript&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-javascript&#34;&gt;import { browser } from &amp;#39;k6/browser&amp;#39;;

export const options = {
  scenarios: {
    ui: {
      executor: &amp;#39;shared-iterations&amp;#39;,
      options: {
        browser: {
          type: &amp;#39;chromium&amp;#39;,
        },
      },
    },
  },
  thresholds: {
    checks: [&amp;#39;rate==1.0&amp;#39;],
  },
};

export default async function () {
  const page = await browser.newPage();

  try {
    await page.goto(&amp;#39;https://test.k6.io/&amp;#39;);
    await page.screenshot({ path: &amp;#39;screenshots/screenshot.png&amp;#39; });
  } finally {
    await page.close();
  }
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The preceding code imports the &lt;code&gt;browser&lt;/code&gt; 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/&#34;&gt;the browser module&lt;/a&gt;), and uses its &lt;code&gt;newPage&lt;/code&gt; method to open a new page.&lt;/p&gt;
&lt;p&gt;After getting the page, you can interact with it using the 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/&#34;&gt;Page&lt;/a&gt; methods. This example visits a test URL and takes a screenshot of the page.&lt;/p&gt;
&lt;p&gt;Subsequently, the page is closed. This allows for the freeing up of allocated resources and enables the accurate calculation of 
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6-browser/metrics/&#34;&gt;Web Vital metrics&lt;/a&gt;.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;Starting from v0.52.0 the browser module API has been converted to an asynchronous API. That means that most of the methods now return promises. Refer to the 
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6-browser/migrating-to-k6-v0-52/&#34;&gt;migration guide&lt;/a&gt; to learn more about the changes and how to update your scripts.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Then, run the test on your terminal with this command:&lt;/p&gt;



  

  

  

  






  

  

  

  



  &lt;div class=&#34;code&#34; x-data=&#34;app_code([&amp;#34;bash&amp;#34;,&amp;#34;docker&amp;#34;,&amp;#34;windows&amp;#34;,&amp;#34;powershell&amp;#34;], false)&#34; x-init=&#34;init()&#34; data-codetoggle=&#34;true&#34;&gt;
    &lt;div class=&#34;toggle-toolbar &#34;&gt;
      &lt;div&gt;&lt;button class=&#34;toggle-toolbar__item&#34; :class=&#34;{ &#39;toggle-toolbar__item-active&#39;: active === &#39;bash&#39; }&#34; @click=&#34;$store.code.language = &#39;bash&#39;&#34;&gt;
              &lt;span&gt;Bash&lt;/span&gt;
            &lt;/button&gt;&lt;button class=&#34;toggle-toolbar__item&#34; :class=&#34;{ &#39;toggle-toolbar__item-active&#39;: active === &#39;docker&#39; }&#34; @click=&#34;$store.code.language = &#39;docker&#39;&#34;&gt;
              &lt;span&gt;docker&lt;/span&gt;
            &lt;/button&gt;&lt;button class=&#34;toggle-toolbar__item&#34; :class=&#34;{ &#39;toggle-toolbar__item-active&#39;: active === &#39;windows&#39; }&#34; @click=&#34;$store.code.language = &#39;windows&#39;&#34;&gt;
              &lt;span&gt;windows&lt;/span&gt;
            &lt;/button&gt;&lt;button class=&#34;toggle-toolbar__item&#34; :class=&#34;{ &#39;toggle-toolbar__item-active&#39;: active === &#39;powershell&#39; }&#34; @click=&#34;$store.code.language = &#39;powershell&#39;&#34;&gt;
              &lt;span&gt;powershell&lt;/span&gt;
            &lt;/button&gt;&lt;/div&gt;
      &lt;div class=&#34;d-flex&#34;&gt;&lt;span class=&#34;code-clipboard&#34; x-ref=&#34;tooltip&#34;&gt;
          &lt;button @click=&#34;copy()&#34;&gt;
            &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
            &lt;span&gt;Copy&lt;/span&gt;
          &lt;/button&gt;
        &lt;/span&gt;
      &lt;/div&gt;
      &lt;div class=&#34;toggle-toolbar__border&#34;&gt;&lt;/div&gt;
    &lt;/div&gt;
    
    &lt;div class=&#34;code-rendered&#34; &gt;
      
&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;k6 run script.js&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;docker&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-docker&#34;&gt;# WARNING!
# The grafana/k6:master-with-browser image launches a Chrome browser by setting the
# &amp;#39;no-sandbox&amp;#39; argument. Only use it with trustworthy websites.
#
# As an alternative, you can use a Docker SECCOMP profile instead, and overwrite the
# Chrome arguments to not use &amp;#39;no-sandbox&amp;#39; such as:
# docker container run --rm -i -e K6_BROWSER_ARGS=&amp;#39;&amp;#39; --security-opt seccomp=$(pwd)/chrome.json grafana/k6:master-with-browser run - &amp;lt;script.js
#
# You can find an example of a hardened SECCOMP profile in:
# https://raw.githubusercontent.com/jfrazelle/dotfiles/master/etc/docker/seccomp/chrome.json.
docker run --rm -i -v $(pwd):/home/k6/screenshots grafana/k6:master-with-browser run - &amp;lt;script.js&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;windows&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-windows&#34;&gt;k6 run script.js&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;powershell&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-powershell&#34;&gt;k6 run script.js&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

    &lt;/div&gt;
  &lt;/div&gt;


&lt;p&gt;You can also use 
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6-browser/options/&#34;&gt;the browser module options&lt;/a&gt; to customize the launching of a browser process. For instance, you can start a headful browser using the previous test script with this command.&lt;/p&gt;



  

  

  

  






  

  

  

  



  &lt;div class=&#34;code&#34; x-data=&#34;app_code([&amp;#34;bash&amp;#34;,&amp;#34;docker&amp;#34;,&amp;#34;windows&amp;#34;,&amp;#34;powershell&amp;#34;], false)&#34; x-init=&#34;init()&#34; data-codetoggle=&#34;true&#34;&gt;
    &lt;div class=&#34;toggle-toolbar &#34;&gt;
      &lt;div&gt;&lt;button class=&#34;toggle-toolbar__item&#34; :class=&#34;{ &#39;toggle-toolbar__item-active&#39;: active === &#39;bash&#39; }&#34; @click=&#34;$store.code.language = &#39;bash&#39;&#34;&gt;
              &lt;span&gt;Bash&lt;/span&gt;
            &lt;/button&gt;&lt;button class=&#34;toggle-toolbar__item&#34; :class=&#34;{ &#39;toggle-toolbar__item-active&#39;: active === &#39;docker&#39; }&#34; @click=&#34;$store.code.language = &#39;docker&#39;&#34;&gt;
              &lt;span&gt;docker&lt;/span&gt;
            &lt;/button&gt;&lt;button class=&#34;toggle-toolbar__item&#34; :class=&#34;{ &#39;toggle-toolbar__item-active&#39;: active === &#39;windows&#39; }&#34; @click=&#34;$store.code.language = &#39;windows&#39;&#34;&gt;
              &lt;span&gt;windows&lt;/span&gt;
            &lt;/button&gt;&lt;button class=&#34;toggle-toolbar__item&#34; :class=&#34;{ &#39;toggle-toolbar__item-active&#39;: active === &#39;powershell&#39; }&#34; @click=&#34;$store.code.language = &#39;powershell&#39;&#34;&gt;
              &lt;span&gt;powershell&lt;/span&gt;
            &lt;/button&gt;&lt;/div&gt;
      &lt;div class=&#34;d-flex&#34;&gt;&lt;span class=&#34;code-clipboard&#34; x-ref=&#34;tooltip&#34;&gt;
          &lt;button @click=&#34;copy()&#34;&gt;
            &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
            &lt;span&gt;Copy&lt;/span&gt;
          &lt;/button&gt;
        &lt;/span&gt;
      &lt;/div&gt;
      &lt;div class=&#34;toggle-toolbar__border&#34;&gt;&lt;/div&gt;
    &lt;/div&gt;
    
    &lt;div class=&#34;code-rendered&#34; &gt;
      
&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;K6_BROWSER_HEADLESS=false k6 run script.js&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;docker&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-docker&#34;&gt;# WARNING!
# The grafana/k6:master-with-browser image launches a Chrome browser by setting the
# &amp;#39;no-sandbox&amp;#39; argument. Only use it with trustworthy websites.
#
# As an alternative, you can use a Docker SECCOMP profile instead, and overwrite the
# Chrome arguments to not use &amp;#39;no-sandbox&amp;#39; such as:
# docker container run --rm -i -e K6_BROWSER_ARGS=&amp;#39;&amp;#39; --security-opt seccomp=$(pwd)/chrome.json grafana/k6:master-with-browser run - &amp;lt;script.js
#
# You can find an example of a hardened SECCOMP profile in:
# https://raw.githubusercontent.com/jfrazelle/dotfiles/master/etc/docker/seccomp/chrome.json.
docker run --rm -i -v $(pwd):/home/k6/screenshots -e K6_BROWSER_HEADLESS=false grafana/k6:master-with-browser run - &amp;lt;script.js&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;windows&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-windows&#34;&gt;set &amp;#34;K6_BROWSER_HEADLESS=false&amp;#34; &amp;amp;&amp;amp; k6 run script.js&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;powershell&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-powershell&#34;&gt;$env:K6_BROWSER_HEADLESS=false ; k6 run script.js&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

    &lt;/div&gt;
  &lt;/div&gt;




&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;When using Docker to run k6 browser tests, make sure you have pulled the correct image with Chromium built-in. See 
    &lt;a href=&#34;/docs/k6/v2.3.x/set-up/install-k6/#docker&#34;&gt;k6 Installation via Docker&lt;/a&gt; for more information.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Optional step: running browser tests in Docker on Mac computers with Apple Silicon:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Make sure you’re running &lt;a href=&#34;https://docs.docker.com/engine/install/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;the latest Docker&lt;/a&gt; version.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Update &lt;a href=&#34;https://en.wikipedia.org/wiki/Rosetta_%28software%29&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Rosetta&lt;/a&gt; and export an environment variable with the following:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;softwareupdate --install-rosetta &amp;amp;&amp;amp;
  export DOCKER_DEFAULT_PLATFORM=linux/amd64&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Select VirtuoFS in &lt;strong&gt;Settings&lt;/strong&gt; &amp;gt; &lt;strong&gt;General&lt;/strong&gt; &amp;gt; &lt;strong&gt;VirtuoFS&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Enable the Rosetta emulation in &lt;strong&gt;Settings&lt;/strong&gt; &amp;gt; &lt;strong&gt;Features in development&lt;/strong&gt; &amp;gt; &lt;strong&gt;Use Rosetta for x86/amd64 emulation on Apple Silicon&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Restart Docker.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run the browser image with the following command (adds the &lt;code&gt;--platform&lt;/code&gt; flag):&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;docker run --rm -i --platform linux/amd64 -v $(pwd):/home/k6/screenshots -e K6_BROWSER_HEADLESS=false grafana/k6:master-with-browser run - &amp;lt;script.js&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
]]></content><description>&lt;h1 id="running-browser-tests">Running browser tests&lt;/h1>
&lt;p>Follow along to learn how to:&lt;/p>
&lt;ol>
&lt;li>Run a test&lt;/li>
&lt;li>Interact with elements on your webpage&lt;/li>
&lt;li>Wait for page navigation&lt;/li>
&lt;li>Run both browser-level and protocol-level tests in a single script&lt;/li>
&lt;/ol>
&lt;h2 id="run-a-test">Run a test&lt;/h2>
&lt;p>To run a simple local script:&lt;/p></description></item><item><title>How to write browser tests</title><link>https://grafana.com/docs/k6/v2.3.x/using-k6-browser/how-to-write-browser-tests/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/using-k6-browser/how-to-write-browser-tests/</guid><content><![CDATA[&lt;h1 id=&#34;how-to-write-browser-tests&#34;&gt;How to write browser tests&lt;/h1&gt;
&lt;ul&gt;&lt;li&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6-browser/how-to-write-browser-tests/asynchronous-operations/&#34;&gt;Asynchronous operations&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6-browser/how-to-write-browser-tests/interact-with-elements/&#34;&gt;Interact with elements on your webpage&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
]]></content><description>&lt;h1 id="how-to-write-browser-tests">How to write browser tests&lt;/h1>
&lt;ul>&lt;li>
&lt;a href="/docs/k6/v2.3.x/using-k6-browser/how-to-write-browser-tests/asynchronous-operations/">Asynchronous operations&lt;/a>&lt;/li>&lt;li>
&lt;a href="/docs/k6/v2.3.x/using-k6-browser/how-to-write-browser-tests/interact-with-elements/">Interact with elements on your webpage&lt;/a>&lt;/li>&lt;/ul></description></item><item><title>Migrate a Playwright script to k6</title><link>https://grafana.com/docs/k6/v2.3.x/using-k6-browser/migrate-from-playwright-to-k6/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/using-k6-browser/migrate-from-playwright-to-k6/</guid><content><![CDATA[&lt;h1 id=&#34;migrate-a-playwright-script-to-k6&#34;&gt;Migrate a Playwright script to k6&lt;/h1&gt;
&lt;p&gt;Playwright is an end-to-end testing framework for modern web apps. You can use it for web testing across browsers, mobile web testing, API testing, and general-purpose browser automation.&lt;/p&gt;
&lt;p&gt;You can convert your Playwright scripts to k6 browser scripts and use them in the following ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Run performance tests and frontend testing simultaneously in k6 OSS or &lt;a href=&#34;/docs/grafana-cloud/testing/k6/&#34;&gt;Grafana Cloud k6&lt;/a&gt; to see how your application behaves in real-world scenarios.&lt;/li&gt;
&lt;li&gt;Use &lt;a href=&#34;/docs/grafana-cloud/testing/synthetic-monitoring/&#34;&gt;Synthetic Monitoring&lt;/a&gt; to ensure your application is monitored and working correctly on a consistent schedule.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In this guide, you&amp;rsquo;ll learn the key differences between Playwright and k6, and how to migrate your scripts.&lt;/p&gt;
&lt;h2 id=&#34;before-you-begin&#34;&gt;Before you begin&lt;/h2&gt;
&lt;p&gt;To run a k6 test, you&amp;rsquo;ll need:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A machine with 
    &lt;a href=&#34;/docs/k6/v2.3.x/set-up/install-k6/&#34;&gt;k6 installed&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;example-migration&#34;&gt;Example migration&lt;/h2&gt;
&lt;p&gt;The following example shows a Playwright script and the common steps to migrate it to a k6 script:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;js&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-js&#34;&gt;import { test, expect } from &amp;#39;@playwright/test&amp;#39;;

test(&amp;#39;has title&amp;#39;, async ({ page }) =&amp;gt; {
  await page.goto(&amp;#39;https://playwright.dev/&amp;#39;);

  // Expect a title &amp;#34;to contain&amp;#34; a substring.
  await expect(page).toHaveTitle(/Playwright/);
});&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Create a new file named &lt;code&gt;pw-migrated.js&lt;/code&gt; and copy the following initial k6 script setup:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;js&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-js&#34;&gt;import { expect } from &amp;#39;https://jslib.k6.io/k6-testing/0.6.1/index.js&amp;#39;;
import { browser } from &amp;#39;k6/browser&amp;#39;;

export const options = {
  scenarios: {
    ui: {
      executor: &amp;#39;shared-iterations&amp;#39;,
      options: {
        browser: {
          type: &amp;#39;chromium&amp;#39;,
        },
      },
    },
  },
};

export default async function () {
    // Paste your test code here
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;k6 browser is an official module to run browser tests with k6. Any Playwright script that you migrate must include the &lt;code&gt;import { browser } from &#39;k6/browser&#39;;&lt;/code&gt; line at the top.&lt;/p&gt;
&lt;p&gt;k6 browser doesn&amp;rsquo;t implement a &lt;code&gt;test&lt;/code&gt; framework. Instead, the logic of test is handled inside the &lt;code&gt;export default async function ()&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Next, copy the contents from the &lt;code&gt;test()&lt;/code&gt; function from the Playwright script into the k6 &lt;code&gt;default async function ()&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;js&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-js&#34;&gt;import { expect } from &amp;#39;https://jslib.k6.io/k6-testing/0.6.1/index.js&amp;#39;;
import { browser } from &amp;#39;k6/browser&amp;#39;;

export const options = {
  scenarios: {
    ui: {
      executor: &amp;#39;shared-iterations&amp;#39;,
      options: {
        browser: {
          type: &amp;#39;chromium&amp;#39;,
        },
      },
    },
  },
};

export default async function () {
  await page.goto(&amp;#39;https://playwright.dev/&amp;#39;);

  // Expect a title &amp;#34;to contain&amp;#34; a substring.
  await expect(page).toHaveTitle(/Playwright/);
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;k6 doesn&amp;rsquo;t implement fixtures like Playwright does. Instead, use the &lt;code&gt;browser&lt;/code&gt; class to retrieve a &lt;code&gt;page&lt;/code&gt; within its own context. After that, you can use the usual &lt;code&gt;page&lt;/code&gt; methods such as &lt;code&gt;goto&lt;/code&gt; or &lt;code&gt;click&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;js&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-js&#34;&gt;import { expect } from &amp;#39;https://jslib.k6.io/k6-testing/0.6.1/index.js&amp;#39;;
import { browser } from &amp;#39;k6/browser&amp;#39;;

export const options = {
  scenarios: {
    ui: {
      executor: &amp;#39;shared-iterations&amp;#39;,
      options: {
        browser: {
          type: &amp;#39;chromium&amp;#39;,
        },
      },
    },
  },
};

export default async function () {
  const page = await browser.newPage(); // Create a new page in its own incognito context
  await page.goto(&amp;#39;https://playwright.dev/&amp;#39;);

  // Expect a title &amp;#34;to contain&amp;#34; a substring.
  await expect(page).toHaveTitle(/Playwright/);
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Save your script, and then run it in your terminal:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;sh&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-sh&#34;&gt;k6 run pw-migrated.js&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;You should see an output similar to the following:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;sh&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-sh&#34;&gt;&amp;gt; k6 run pw-migrated.js

         /\      Grafana   /‾‾/  
    /\  /  \     |\  __   /  /   
   /  \/    \    | |/ /  /   ‾‾\ 
  /          \   |   (  |  (‾)  |
 / __________ \  |_|\_\  \_____/ 

     execution: local
        script: pw-migrated.js
        output: -

     scenarios: (100.00%) 1 scenario, 1 max VUs, 10m30s max duration (incl. graceful stop):
              * ui: 1 iterations shared among 1 VUs (maxDuration: 10m0s, gracefulStop: 30s)



  █ TOTAL RESULTS 

    EXECUTION
    iteration_duration..........: avg=1.81s    min=1.81s  med=1.81s   max=1.81s p(90)=1.81s    p(95)=1.81s  
    iterations..................: 1      0.463436/s
    vus.........................: 1      min=1       max=1
    vus_max.....................: 1      min=1       max=1

    NETWORK
    data_received...............: 0 B    0 B/s
    data_sent...................: 0 B    0 B/s

    BROWSER
    browser_data_received.......: 1.8 MB 829 kB/s
    browser_data_sent...........: 7.7 kB 3.6 kB/s
    browser_http_req_duration...: avg=120.89ms min=1.95ms med=98.73ms max=1.14s p(90)=139.67ms p(95)=263.7ms
    browser_http_req_failed.....: 0.00%  0 out of 23

    WEB_VITALS
    browser_web_vital_fcp.......: avg=1.24s    min=1.24s  med=1.24s   max=1.24s p(90)=1.24s    p(95)=1.24s  
    browser_web_vital_ttfb......: avg=1.14s    min=1.14s  med=1.14s   max=1.14s p(90)=1.14s    p(95)=1.14s  




running (00m02.2s), 0/1 VUs, 1 complete and 0 interrupted iterations
ui   ✓ [======================================] 1 VUs  00m02.2s/10m0s  1/1 shared iters&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;migrate-multiple-tests&#34;&gt;Migrate multiple tests&lt;/h2&gt;
&lt;p&gt;The following example shows a Playwright test file that contains two tests. To migrate multiple tests, use the 
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6/scenarios/&#34;&gt;k6 scenarios&lt;/a&gt; feature to create equivalent test logic:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;js&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-js&#34;&gt;import { test, expect } from &amp;#39;@playwright/test&amp;#39;;

test(&amp;#39;admin&amp;#39;, async ({ page }) =&amp;gt; {
  await page.goto(&amp;#39;https://quickpizza.grafana.com/admin&amp;#39;, {
    waitUntil: &amp;#39;networkidle&amp;#39;,
  });

  await page.getByLabel(&amp;#39;username&amp;#39;).fill(&amp;#39;admin&amp;#39;);
  await page.getByLabel(&amp;#39;password&amp;#39;).fill(&amp;#39;admin&amp;#39;);
  await page.getByRole(&amp;#39;button&amp;#39;, { name: &amp;#39;Sign in&amp;#39; }).click()

  await page.getByRole(&amp;#39;button&amp;#39;, { name: &amp;#39;Logout&amp;#39; }).waitFor()

  const label = page.locator(&amp;#39;h2&amp;#39;)
  const textContent = await label.textContent()
  expect(textContent).toEqual(&amp;#39;Latest pizza recommendations&amp;#39;);
});

test(&amp;#39;user&amp;#39;, async ({ page }) =&amp;gt; {
  await page.goto(&amp;#39;https://quickpizza.grafana.com/login&amp;#39;, {
    waitUntil: &amp;#39;networkidle&amp;#39;,
  });

  await page.getByLabel(&amp;#39;username&amp;#39;).fill(&amp;#39;default&amp;#39;);
  await page.getByLabel(&amp;#39;password&amp;#39;).fill(&amp;#39;12345678&amp;#39;);
  await page.getByText(&amp;#39;Sign in&amp;#39;).click();

  await page.getByRole(&amp;#39;button&amp;#39;, { name: &amp;#39;Logout&amp;#39; }).waitFor()

  const label = page.locator(&amp;#39;h2&amp;#39;)
  const textContent = await label.textContent()
  expect(textContent).toEqual(&amp;#39;Your Pizza Ratings:&amp;#39;);
});&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;To convert this Playwright script to k6, create a new file named &lt;code&gt;pw-multiple-migrated.js&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;First, create two &lt;code&gt;scenarios&lt;/code&gt; and point them to two exported functions using the &lt;code&gt;exec&lt;/code&gt; field in each scenario:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;js&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-js&#34;&gt;import { expect } from &amp;#39;https://jslib.k6.io/k6-testing/0.6.1/index.js&amp;#39;;
import { browser } from &amp;#39;k6/browser&amp;#39;;

export const options = {
  scenarios: {
    user: {
      exec: &amp;#39;userLogin&amp;#39;,
      executor: &amp;#39;shared-iterations&amp;#39;,
      options: {
        browser: {
          type: &amp;#39;chromium&amp;#39;,
        },
      },
    },
    admin: {
      exec: &amp;#39;adminLogin&amp;#39;,
      executor: &amp;#39;shared-iterations&amp;#39;,
      options: {
        browser: {
          type: &amp;#39;chromium&amp;#39;,
        },
      },
    },
  },
};

export async function adminLogin() {
    // Paste admin test code here
}

export async function userLogin() {
    // Paste user test code here
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Next, copy the test code into the respective exported functions. Since k6 doesn&amp;rsquo;t have fixtures, use the imported &lt;code&gt;browser&lt;/code&gt; object to create a &lt;code&gt;newPage&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;js&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-js&#34;&gt;import { expect } from &amp;#39;https://jslib.k6.io/k6-testing/0.6.1/index.js&amp;#39;;
import { browser } from &amp;#39;k6/browser&amp;#39;;

export const options = {
  scenarios: {
    user: {
      exec: &amp;#39;userLogin&amp;#39;,
      executor: &amp;#39;shared-iterations&amp;#39;,
      options: {
        browser: {
          type: &amp;#39;chromium&amp;#39;,
        },
      },
    },
    admin: {
      exec: &amp;#39;adminLogin&amp;#39;,
      executor: &amp;#39;shared-iterations&amp;#39;,
      options: {
        browser: {
          type: &amp;#39;chromium&amp;#39;,
        },
      },
    },
  },
};

export async function adminLogin() {
  const page = await browser.newPage();

  await page.goto(&amp;#39;https://quickpizza.grafana.com/admin&amp;#39;, {
    waitUntil: &amp;#39;networkidle&amp;#39;,
  });

  await page.getByLabel(&amp;#39;username&amp;#39;).fill(&amp;#39;admin&amp;#39;);
  await page.getByLabel(&amp;#39;password&amp;#39;).fill(&amp;#39;admin&amp;#39;);
  await page.getByRole(&amp;#39;button&amp;#39;, { name: &amp;#39;Sign in&amp;#39; }).click()

  await page.getByRole(&amp;#39;button&amp;#39;, { name: &amp;#39;Logout&amp;#39; }).waitFor()

  const label = page.locator(&amp;#39;h2&amp;#39;)
  const textContent = await label.textContent()
  expect(textContent).toEqual(&amp;#39;Latest pizza recommendations&amp;#39;);
}

export async function userLogin() {
  const page = await browser.newPage();

  await page.goto(&amp;#39;https://quickpizza.grafana.com/login&amp;#39;, {
    waitUntil: &amp;#39;networkidle&amp;#39;,
  });

  await page.getByLabel(&amp;#39;username&amp;#39;).fill(&amp;#39;default&amp;#39;);
  await page.getByLabel(&amp;#39;password&amp;#39;).fill(&amp;#39;12345678&amp;#39;);
  await page.getByText(&amp;#39;Sign in&amp;#39;).click();

  await page.getByRole(&amp;#39;button&amp;#39;, { name: &amp;#39;Logout&amp;#39; }).waitFor()

  const label = page.locator(&amp;#39;h2&amp;#39;)
  const textContent = await label.textContent()
  expect(textContent).toEqual(&amp;#39;Your Pizza Ratings:&amp;#39;);
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Run the test script:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;sh&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-sh&#34;&gt;k6 run pw-multiple-migrated.js&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The command runs the two scenarios concurrently and produces output similar to the following:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;sh&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-sh&#34;&gt;         /\      Grafana   /‾‾/  
    /\  /  \     |\  __   /  /   
   /  \/    \    | |/ /  /   ‾‾\ 
  /          \   |   (  |  (‾)  |
 / __________ \  |_|\_\  \_____/ 

     execution: local
        script: pw-multiple-migrated.js
        output: -

     scenarios: (100.00%) 2 scenarios, 2 max VUs, 10m30s max duration (incl. graceful stop):
              * admin: 1 iterations shared among 1 VUs (maxDuration: 10m0s, exec: adminLogin, gracefulStop: 30s)
              * user: 1 iterations shared among 1 VUs (maxDuration: 10m0s, exec: userLogin, gracefulStop: 30s)



  █ TOTAL RESULTS 

    EXECUTION
    iteration_duration..........: avg=5.01s    min=4.7s     med=5.01s    max=5.33s    p(90)=5.26s    p(95)=5.3s    
    iterations..................: 2      0.333461/s
    vus.........................: 2      min=2       max=2
    vus_max.....................: 2      min=2       max=2

    NETWORK
    data_received...............: 0 B    0 B/s
    data_sent...................: 0 B    0 B/s

    BROWSER
    browser_data_received.......: 601 kB 100 kB/s
    browser_data_sent...........: 14 kB  2.3 kB/s
    browser_http_req_duration...: avg=489.58ms min=114.61ms med=514.78ms max=3.25s    p(90)=524.5ms  p(95)=534.85ms
    browser_http_req_failed.....: 0.00%  0 out of 46

    WEB_VITALS
    browser_web_vital_cls.......: avg=0.009527 min=0        med=0.009527 max=0.019055 p(90)=0.017149 p(95)=0.018102
    browser_web_vital_fcp.......: avg=3.09s    min=2.76s    med=3.09s    max=3.43s    p(90)=3.36s    p(95)=3.39s   
    browser_web_vital_fid.......: avg=200µs    min=199.99µs med=200µs    max=200µs    p(90)=200µs    p(95)=200µs   
    browser_web_vital_inp.......: avg=16ms     min=16ms     med=16ms     max=16ms     p(90)=16ms     p(95)=16ms    
    browser_web_vital_lcp.......: avg=3.09s    min=2.76s    med=3.09s    max=3.43s    p(90)=3.36s    p(95)=3.39s   
    browser_web_vital_ttfb......: avg=2.84s    min=2.43s    med=2.84s    max=3.25s    p(90)=3.17s    p(95)=3.21s   




running (00m06.0s), 0/2 VUs, 2 complete and 0 interrupted iterations
admin ✓ [======================================] 1 VUs  00m05.3s/10m0s  1/1 shared iters
user  ✓ [======================================] 1 VUs  00m06.0s/10m0s  1/1 shared iters&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;key-differences&#34;&gt;Key differences&lt;/h2&gt;
&lt;h3 id=&#34;test-isolation-patterns&#34;&gt;Test isolation patterns&lt;/h3&gt;
&lt;p&gt;In k6, 
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6/scenarios/&#34;&gt;scenarios&lt;/a&gt; let you configure and model diverse workloads and organize your tests. Playwright has a dedicated testing framework. This difference stems from k6 being a performance testing tool.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;There are plans to create a testing framework in k6. For more details or to contribute, refer to this &lt;a href=&#34;https://github.com/grafana/k6-jslib-testing/issues/30&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;GitHub issue&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;h3 id=&#34;metrics&#34;&gt;Metrics&lt;/h3&gt;
&lt;p&gt;k6 collects and reports on several built-in metrics, such as request and response times, data size, and more. It also includes support for Web Vital metrics, such as FCP, INP, and TTFB.&lt;/p&gt;
&lt;p&gt;Refer to 
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6/metrics/reference/&#34;&gt;Built-in metrics&lt;/a&gt; for more details.&lt;/p&gt;
&lt;h3 id=&#34;k6-concepts&#34;&gt;k6 concepts&lt;/h3&gt;
&lt;p&gt;To effectively use k6 for browser testing, it&amp;rsquo;s important to understand a few core concepts from its load testing foundation:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Virtual User&lt;/strong&gt;: A Virtual User (VU) is an independent thread of execution that runs concurrently with other VUs. Scripts are often designed so that one VU represents the activity of one real user.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Iteration&lt;/strong&gt;: The number of times a single VU runs the test script.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Thresholds and checks&lt;/strong&gt;: 
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6/thresholds/&#34;&gt;Thresholds&lt;/a&gt; are pass/fail criteria that you configure for your test metrics. For example, you can configure a threshold to fail if more than 1% of requests return an error. 
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6/checks/&#34;&gt;Checks&lt;/a&gt; validate a boolean condition in your test. For example, you can check whether the response status code equals 200. The main difference is that unmet thresholds cause a test to finish with a failed status, while checks don&amp;rsquo;t. k6 also provides a k6-testing library that behaves similarly to assertions in Playwright. For more details, refer to the 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/jslib/testing/&#34;&gt;k6-testing&lt;/a&gt; documentation.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;browser-context-restrictions&#34;&gt;Browser context restrictions&lt;/h3&gt;
&lt;p&gt;Unlike Playwright, k6 can only work with a single 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/&#34;&gt;browser context&lt;/a&gt; at a time. The following script fails when you run it with k6:&lt;/p&gt;
&lt;!-- md-k6:skip --&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;js&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-js&#34;&gt;const bc1 = await browser.newContext();
// This next call results in an error: &amp;#34;existing browser context must be closed before creating a new one&amp;#34;
const bc2 = await browser.newContext();&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;To fix this, close the existing browser context before creating a new one.&lt;/p&gt;
&lt;h2 id=&#34;hybrid-tests&#34;&gt;Hybrid tests&lt;/h2&gt;
&lt;p&gt;Hybrid tests are performance tests that run browser-level and protocol-level requests simultaneously. They&amp;rsquo;re a great alternative to resource-intensive browser-based load testing, while still measuring application performance under load by making requests to both the frontend and backend.&lt;/p&gt;
&lt;p&gt;Refer to 
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6-browser/recommended-practices/hybrid-approach-to-performance/&#34;&gt;Hybrid performance with k6 browser&lt;/a&gt; for more details.&lt;/p&gt;
&lt;h2 id=&#34;run-k6-tests-in-grafana-cloud&#34;&gt;Run k6 tests in Grafana Cloud&lt;/h2&gt;
&lt;p&gt;In addition to running k6 scripts locally by installing k6 on your machine, you can use Grafana Cloud for a seamless experience. Using Grafana Cloud means you don&amp;rsquo;t have to worry about whether your machine has the right resources to run a performance test. You also get pre-made Grafana dashboards to analyze test results and can collaborate with other team members to debug performance issues.&lt;/p&gt;
&lt;p&gt;Refer to 
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6/run-k6-test-script/#run-a-test-using-grafana-cloud-k6&#34;&gt;Run a test using Grafana Cloud k6&lt;/a&gt; for more details.&lt;/p&gt;
&lt;h2 id=&#34;references&#34;&gt;References&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/&#34;&gt;k6 browser APIs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/jslib/testing/&#34;&gt;k6-testing library&lt;/a&gt; for Playwright-inspired assertions&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/results-output/end-of-test/&#34;&gt;Understand k6 CLI output results&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6/test-lifecycle/&#34;&gt;Test lifecycle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6-browser/recommended-practices/&#34;&gt;k6 browser recommended practices&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
]]></content><description>&lt;h1 id="migrate-a-playwright-script-to-k6">Migrate a Playwright script to k6&lt;/h1>
&lt;p>Playwright is an end-to-end testing framework for modern web apps. You can use it for web testing across browsers, mobile web testing, API testing, and general-purpose browser automation.&lt;/p></description></item><item><title>Playwright APIs in k6</title><link>https://grafana.com/docs/k6/v2.3.x/using-k6-browser/playwright-apis-in-k6/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/using-k6-browser/playwright-apis-in-k6/</guid><content><![CDATA[&lt;h1 id=&#34;playwright-apis-in-k6&#34;&gt;Playwright APIs in k6&lt;/h1&gt;
&lt;p&gt;The following table shows which Playwright APIs are implemented in k6. k6 tries to match Playwright&amp;rsquo;s API behavior and signature exactly, but some differences may exist. For more details, refer to the individual API documentation page.&lt;/p&gt;
&lt;p&gt;The status column has three different options:&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Status&lt;/th&gt;
              &lt;th&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;Implemented in k6 Browser&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;Not implemented in k6 Browser&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;🟧&lt;/td&gt;
              &lt;td&gt;k6 Browser only&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;

&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;If k6 is missing an API from Playwright that you need for your test, you can &lt;a href=&#34;https://github.com/grafana/k6/issues&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;open an issue in the k6 GitHub repository&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Object&lt;/th&gt;
              &lt;th&gt;Method&lt;/th&gt;
              &lt;th&gt;Status&lt;/th&gt;
              &lt;th&gt;Alternate&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;Browser&lt;/td&gt;
              &lt;td&gt;addListener&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Browser&lt;/td&gt;
              &lt;td&gt;browserType&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Browser&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/close/&#34;&gt;close&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;Only on browsers returned by 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/chromium/connectovercdp/&#34;&gt;chromium.connectOverCDP&lt;/a&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Browser&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browser/closecontext/&#34;&gt;closeContext&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟧&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Browser&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browser/context/&#34;&gt;context&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟧&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Browser&lt;/td&gt;
              &lt;td&gt;contexts&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browser/context/&#34;&gt;browser.context&lt;/a&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Browser&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browser/isconnected/&#34;&gt;isConnected&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Browser&lt;/td&gt;
              &lt;td&gt;newBrowserCDPSession&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Browser&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browser/newcontext/&#34;&gt;newContext&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Browser&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browser/newpage/&#34;&gt;newPage&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Browser&lt;/td&gt;
              &lt;td&gt;off&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Browser&lt;/td&gt;
              &lt;td&gt;on&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/on/&#34;&gt;page.on&lt;/a&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Browser&lt;/td&gt;
              &lt;td&gt;once&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Browser&lt;/td&gt;
              &lt;td&gt;prependListener&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Browser&lt;/td&gt;
              &lt;td&gt;removeAllListeners&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Browser&lt;/td&gt;
              &lt;td&gt;removeListener&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Browser&lt;/td&gt;
              &lt;td&gt;startTracing&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Browser&lt;/td&gt;
              &lt;td&gt;stopTracing&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Browser&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browser/useragent/&#34;&gt;userAgent&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Browser&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browser/version/&#34;&gt;version&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;BrowserContext&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/addcookies/&#34;&gt;addCookies&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;BrowserContext&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/addinitscript/&#34;&gt;addInitScript&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;BrowserContext&lt;/td&gt;
              &lt;td&gt;addListener&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;BrowserContext&lt;/td&gt;
              &lt;td&gt;backgroundPages&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;BrowserContext&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/browser/&#34;&gt;browser&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;BrowserContext&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/clearcookies/&#34;&gt;clearCookies&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;BrowserContext&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/clearpermissions/&#34;&gt;clearPermissions&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;BrowserContext&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/close/&#34;&gt;close&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;BrowserContext&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/cookies/&#34;&gt;cookies&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;BrowserContext&lt;/td&gt;
              &lt;td&gt;exposeBinding&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;BrowserContext&lt;/td&gt;
              &lt;td&gt;exposeFunction&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;BrowserContext&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/grantpermissions/&#34;&gt;grantPermissions&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;BrowserContext&lt;/td&gt;
              &lt;td&gt;newCDPSession&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;BrowserContext&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/newpage/&#34;&gt;newPage&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;BrowserContext&lt;/td&gt;
              &lt;td&gt;off&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;BrowserContext&lt;/td&gt;
              &lt;td&gt;on&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/on/&#34;&gt;page.on&lt;/a&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;BrowserContext&lt;/td&gt;
              &lt;td&gt;once&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;BrowserContext&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/pages/&#34;&gt;pages&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;BrowserContext&lt;/td&gt;
              &lt;td&gt;prependListener&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;BrowserContext&lt;/td&gt;
              &lt;td&gt;removeAllListeners&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;BrowserContext&lt;/td&gt;
              &lt;td&gt;removeListener&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;BrowserContext&lt;/td&gt;
              &lt;td&gt;route&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/route/&#34;&gt;page.route&lt;/a&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;BrowserContext&lt;/td&gt;
              &lt;td&gt;routeFromHAR&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;BrowserContext&lt;/td&gt;
              &lt;td&gt;routeWebSocket&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;BrowserContext&lt;/td&gt;
              &lt;td&gt;serviceWorkers&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;BrowserContext&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/setdefaultnavigationtimeout/&#34;&gt;setDefaultNavigationTimeout&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;BrowserContext&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/setdefaulttimeout/&#34;&gt;setDefaultTimeout&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;BrowserContext&lt;/td&gt;
              &lt;td&gt;setExtraHTTPHeaders&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/setextrahttpheaders/&#34;&gt;page.setExtraHTTPHeaders&lt;/a&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;BrowserContext&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/setgeolocation/&#34;&gt;setGeolocation&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;BrowserContext&lt;/td&gt;
              &lt;td&gt;setHTTPCredentials&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;BrowserContext&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/setoffline/&#34;&gt;setOffline&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;BrowserContext&lt;/td&gt;
              &lt;td&gt;storageState&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;BrowserContext&lt;/td&gt;
              &lt;td&gt;unroute&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/unroute/&#34;&gt;page.unroute&lt;/a&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;BrowserContext&lt;/td&gt;
              &lt;td&gt;unrouteAll&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/unrouteall/&#34;&gt;page.unrouteAll&lt;/a&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;BrowserContext&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/waitforevent/&#34;&gt;waitForEvent&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;BrowserType&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/chromium/connectovercdp/&#34;&gt;connectOverCDP&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ConsoleMessage&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/consolemessage/args/&#34;&gt;args&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ConsoleMessage&lt;/td&gt;
              &lt;td&gt;location&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ConsoleMessage&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/consolemessage/page/&#34;&gt;page&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ConsoleMessage&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/consolemessage/text/&#34;&gt;text&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ConsoleMessage&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/consolemessage/type/&#34;&gt;type&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Dialog&lt;/td&gt;
              &lt;td&gt;accept&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Dialog&lt;/td&gt;
              &lt;td&gt;defaultValue&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Dialog&lt;/td&gt;
              &lt;td&gt;dismiss&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Dialog&lt;/td&gt;
              &lt;td&gt;message&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Dialog&lt;/td&gt;
              &lt;td&gt;page&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Dialog&lt;/td&gt;
              &lt;td&gt;type&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Download&lt;/td&gt;
              &lt;td&gt;cancel&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Download&lt;/td&gt;
              &lt;td&gt;createReadStream&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Download&lt;/td&gt;
              &lt;td&gt;delete&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Download&lt;/td&gt;
              &lt;td&gt;failure&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Download&lt;/td&gt;
              &lt;td&gt;page&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Download&lt;/td&gt;
              &lt;td&gt;path&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Download&lt;/td&gt;
              &lt;td&gt;saveAs&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Download&lt;/td&gt;
              &lt;td&gt;suggestedFilename&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Download&lt;/td&gt;
              &lt;td&gt;url&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/elementhandle/dollar/&#34;&gt;$&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/elementhandle/doubledollar/&#34;&gt;$$&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;$$eval&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;$eval&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/elementhandle/aselement/&#34;&gt;asElement&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/elementhandle/boundingbox/&#34;&gt;boundingBox&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/elementhandle/check/&#34;&gt;check&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/elementhandle/click/&#34;&gt;click&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/elementhandle/contentframe/&#34;&gt;contentFrame&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/elementhandle/dblclick/&#34;&gt;dblclick&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/elementhandle/dispatchevent/&#34;&gt;dispatchEvent&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/elementhandle/dispose/&#34;&gt;dispose&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/elementhandle/evaluate/&#34;&gt;evaluate&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/elementhandle/evaluatehandle/&#34;&gt;evaluateHandle&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/elementhandle/fill/&#34;&gt;fill&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/elementhandle/focus/&#34;&gt;focus&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/elementhandle/getattribute/&#34;&gt;getAttribute&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/elementhandle/getproperties/&#34;&gt;getProperties&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;getProperty&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/elementhandle/getproperties/&#34;&gt;elementHandle.getProperties&lt;/a&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/elementhandle/hover/&#34;&gt;hover&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/elementhandle/innerhtml/&#34;&gt;innerHTML&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/elementhandle/innertext/&#34;&gt;innerText&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/elementhandle/inputvalue/&#34;&gt;inputValue&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/elementhandle/ischecked/&#34;&gt;isChecked&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/elementhandle/isdisabled/&#34;&gt;isDisabled&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/elementhandle/iseditable/&#34;&gt;isEditable&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/elementhandle/isenabled/&#34;&gt;isEnabled&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/elementhandle/ishidden/&#34;&gt;isHidden&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/elementhandle/isvisible/&#34;&gt;isVisible&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/elementhandle/jsonvalue/&#34;&gt;jsonValue&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/elementhandle/ownerframe/&#34;&gt;ownerFrame&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/elementhandle/press/&#34;&gt;press&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/elementhandle/screenshot/&#34;&gt;screenshot&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/elementhandle/scrollintoviewifneeded/&#34;&gt;scrollIntoViewIfNeeded&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/elementhandle/selectoption/&#34;&gt;selectOption&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/elementhandle/selecttext/&#34;&gt;selectText&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/elementhandle/setchecked/&#34;&gt;setChecked&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/elementhandle/setinputfiles/&#34;&gt;setInputFiles&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/elementhandle/tap/&#34;&gt;tap&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/elementhandle/textcontent/&#34;&gt;textContent&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/elementhandle/type/&#34;&gt;type&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/elementhandle/uncheck/&#34;&gt;uncheck&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/elementhandle/waitforelementstate/&#34;&gt;waitForElementState&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/elementhandle/waitforselector/&#34;&gt;waitForSelector&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;FileChooser&lt;/td&gt;
              &lt;td&gt;element&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;FileChooser&lt;/td&gt;
              &lt;td&gt;isMultiple&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;FileChooser&lt;/td&gt;
              &lt;td&gt;page&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;FileChooser&lt;/td&gt;
              &lt;td&gt;setFiles&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/dollar/&#34;&gt;$&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/doubledollar/&#34;&gt;$$&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;$$eval&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;$eval&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;addScriptTag&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;addStyleTag&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/check/&#34;&gt;check&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/childframes/&#34;&gt;childFrames&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/click/&#34;&gt;click&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/content/&#34;&gt;content&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/dblclick/&#34;&gt;dblclick&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/dispatchevent/&#34;&gt;dispatchEvent&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;dragAndDrop&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/evaluate/&#34;&gt;evaluate&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/evaluatehandle/&#34;&gt;evaluateHandle&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/fill/&#34;&gt;fill&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/focus/&#34;&gt;focus&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/frameelement/&#34;&gt;frameElement&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/framelocator/&#34;&gt;frameLocator&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/getattribute/&#34;&gt;getAttribute&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/getbyalttext/&#34;&gt;getByAltText&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/getbylabel/&#34;&gt;getByLabel&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/getbyplaceholder/&#34;&gt;getByPlaceholder&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/getbyrole/&#34;&gt;getByRole&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/getbytestid/&#34;&gt;getByTestId&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/getbytext/&#34;&gt;getByText&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/getbytitle/&#34;&gt;getByTitle&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/goto/&#34;&gt;goto&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/hover/&#34;&gt;hover&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/innerhtml/&#34;&gt;innerHTML&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/innertext/&#34;&gt;innerText&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/inputvalue/&#34;&gt;inputValue&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/ischecked/&#34;&gt;isChecked&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/isdetached/&#34;&gt;isDetached&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/isdisabled/&#34;&gt;isDisabled&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/iseditable/&#34;&gt;isEditable&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/isenabled/&#34;&gt;isEnabled&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/ishidden/&#34;&gt;isHidden&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/isvisible/&#34;&gt;isVisible&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/locator/&#34;&gt;locator&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/name/&#34;&gt;name&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/page/&#34;&gt;page&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/parentframe/&#34;&gt;parentFrame&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/press/&#34;&gt;press&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/selectoption/&#34;&gt;selectOption&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/setchecked/&#34;&gt;setChecked&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/setcontent/&#34;&gt;setContent&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/setinputfiles/&#34;&gt;setInputFiles&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/tap/&#34;&gt;tap&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/textcontent/&#34;&gt;textContent&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/title/&#34;&gt;title&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/type/&#34;&gt;type&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/uncheck/&#34;&gt;uncheck&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/url/&#34;&gt;url&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/waitforfunction/&#34;&gt;waitForFunction&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/waitforloadstate/&#34;&gt;waitForLoadState&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/waitfornavigation/&#34;&gt;waitForNavigation&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/waitforselector/&#34;&gt;waitForSelector&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/waitfortimeout/&#34;&gt;waitForTimeout&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/waitforurl/&#34;&gt;waitForURL&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;FrameLocator&lt;/td&gt;
              &lt;td&gt;first&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;FrameLocator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/framelocator/framelocator/&#34;&gt;frameLocator&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;FrameLocator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/framelocator/getbyalttext/&#34;&gt;getByAltText&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;FrameLocator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/framelocator/getbylabel/&#34;&gt;getByLabel&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;FrameLocator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/framelocator/getbyplaceholder/&#34;&gt;getByPlaceholder&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;FrameLocator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/framelocator/getbyrole/&#34;&gt;getByRole&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;FrameLocator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/framelocator/getbytestid/&#34;&gt;getByTestId&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;FrameLocator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/framelocator/getbytext/&#34;&gt;getByText&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;FrameLocator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/framelocator/getbytitle/&#34;&gt;getByTitle&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;FrameLocator&lt;/td&gt;
              &lt;td&gt;last&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;FrameLocator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/framelocator/locator/&#34;&gt;locator&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;FrameLocator&lt;/td&gt;
              &lt;td&gt;nth&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;FrameLocator&lt;/td&gt;
              &lt;td&gt;owner&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;JSHandle&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/jshandle/aselement/&#34;&gt;asElement&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;JSHandle&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/jshandle/dispose/&#34;&gt;dispose&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;JSHandle&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/jshandle/evaluate/&#34;&gt;evaluate&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;JSHandle&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/jshandle/evaluatehandle/&#34;&gt;evaluateHandle&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;JSHandle&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/jshandle/getproperties/&#34;&gt;getProperties&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;JSHandle&lt;/td&gt;
              &lt;td&gt;getProperty&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/jshandle/getproperties/&#34;&gt;jsHandle.getProperties&lt;/a&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;JSHandle&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/jshandle/jsonvalue/&#34;&gt;jsonValue&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Keyboard&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/keyboard/down/&#34;&gt;down&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Keyboard&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/keyboard/inserttext/&#34;&gt;insertText&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Keyboard&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/keyboard/press/&#34;&gt;press&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Keyboard&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/keyboard/type/&#34;&gt;type&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Keyboard&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/keyboard/up/&#34;&gt;up&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/locator/all/&#34;&gt;all&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;allInnerTexts&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;allTextContents&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;and&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;ariaSnapshot&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;blur&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/locator/boundingbox/&#34;&gt;boundingBox&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/locator/check/&#34;&gt;check&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/locator/clear/&#34;&gt;clear&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/locator/click/&#34;&gt;click&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/locator/contentframe/&#34;&gt;contentFrame&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/locator/count/&#34;&gt;count&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/locator/dblclick/&#34;&gt;dblclick&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/locator/dispatchevent/&#34;&gt;dispatchEvent&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;dragTo&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;elementHandle&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;elementHandles&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/locator/evaluate/&#34;&gt;evaluate&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;evaluateAll&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/locator/evaluatehandle/&#34;&gt;evaluateHandle&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/locator/fill/&#34;&gt;fill&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/locator/filter/&#34;&gt;filter&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/locator/first/&#34;&gt;first&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/locator/focus/&#34;&gt;focus&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/locator/framelocator/&#34;&gt;frameLocator&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/locator/getattribute/&#34;&gt;getAttribute&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/locator/getbyalttext/&#34;&gt;getByAltText&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/locator/getbylabel/&#34;&gt;getByLabel&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/locator/getbyplaceholder/&#34;&gt;getByPlaceholder&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/locator/getbyrole/&#34;&gt;getByRole&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/locator/getbytestid/&#34;&gt;getByTestId&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/locator/getbytext/&#34;&gt;getByText&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/locator/getbytitle/&#34;&gt;getByTitle&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;highlight&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/locator/hover/&#34;&gt;hover&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/locator/innerhtml/&#34;&gt;innerHTML&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/locator/innertext/&#34;&gt;innerText&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/locator/inputvalue/&#34;&gt;inputValue&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/locator/ischecked/&#34;&gt;isChecked&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/locator/isdisabled/&#34;&gt;isDisabled&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/locator/iseditable/&#34;&gt;isEditable&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/locator/isenabled/&#34;&gt;isEnabled&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/locator/ishidden/&#34;&gt;isHidden&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/locator/isvisible/&#34;&gt;isVisible&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/locator/last/&#34;&gt;last&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/locator/locator/&#34;&gt;locator&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/locator/nth/&#34;&gt;nth&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;or&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;page&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/locator/press/&#34;&gt;press&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;pressSequentially&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;screenshot&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;scrollIntoViewIfNeeded&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/locator/selectoption/&#34;&gt;selectOption&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;selectText&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/locator/setchecked/&#34;&gt;setChecked&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;setInputFiles&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/locator/tap/&#34;&gt;tap&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/locator/textcontent/&#34;&gt;textContent&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/locator/type/&#34;&gt;type&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/locator/uncheck/&#34;&gt;uncheck&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/locator/waitfor/&#34;&gt;waitFor&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Mouse&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/mouse/click/&#34;&gt;click&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Mouse&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/mouse/dblclick/&#34;&gt;dblclick&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Mouse&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/mouse/down/&#34;&gt;down&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Mouse&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/mouse/move/&#34;&gt;move&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Mouse&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/mouse/up/&#34;&gt;up&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Mouse&lt;/td&gt;
              &lt;td&gt;wheel&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/dollar/&#34;&gt;$&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/doubledollar/&#34;&gt;$$&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;$$eval&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;$eval&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;addInitScript&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/addinitscript/&#34;&gt;browserContext.addInitScript&lt;/a&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;addListener&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;addLocatorHandler&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;addScriptTag&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;addStyleTag&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/bringtofront/&#34;&gt;bringToFront&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/check/&#34;&gt;check&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/click/&#34;&gt;click&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/close/&#34;&gt;close&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/content/&#34;&gt;content&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/context/&#34;&gt;context&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/dblclick/&#34;&gt;dblclick&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/dispatchevent/&#34;&gt;dispatchEvent&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;dragAndDrop&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/emulatemedia/&#34;&gt;emulateMedia&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/emulatevisiondeficiency/&#34;&gt;emulateVisionDeficiency&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟧&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/evaluate/&#34;&gt;evaluate&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/evaluatehandle/&#34;&gt;evaluateHandle&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;exposeBinding&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;exposeFunction&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/fill/&#34;&gt;fill&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/focus/&#34;&gt;focus&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;frame&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/framelocator/&#34;&gt;frameLocator&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/frames/&#34;&gt;frames&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/getattribute/&#34;&gt;getAttribute&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/getbyalttext/&#34;&gt;getByAltText&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/getbylabel/&#34;&gt;getByLabel&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/getbyplaceholder/&#34;&gt;getByPlaceholder&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/getbyrole/&#34;&gt;getByRole&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/getbytestid/&#34;&gt;getByTestId&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/getbytext/&#34;&gt;getByText&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/getbytitle/&#34;&gt;getByTitle&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;goBack&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;goForward&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/goto/&#34;&gt;goto&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/hover/&#34;&gt;hover&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/innerhtml/&#34;&gt;innerHTML&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/innertext/&#34;&gt;innerText&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/inputvalue/&#34;&gt;inputValue&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/ischecked/&#34;&gt;isChecked&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/isclosed/&#34;&gt;isClosed&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/isdisabled/&#34;&gt;isDisabled&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/iseditable/&#34;&gt;isEditable&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/isenabled/&#34;&gt;isEnabled&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/ishidden/&#34;&gt;isHidden&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/isvisible/&#34;&gt;isVisible&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/locator/&#34;&gt;locator&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/mainframe/&#34;&gt;mainFrame&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;off&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/on/&#34;&gt;on&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;once&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/opener/&#34;&gt;opener&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;pause&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;pdf&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;prependListener&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/press/&#34;&gt;press&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/reload/&#34;&gt;reload&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;removeAllListeners&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;removeListener&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;removeLocatorHandler&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;requestGC&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/route/&#34;&gt;route&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;routeFromHAR&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;routeWebSocket&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/screenshot/&#34;&gt;screenshot&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/selectoption/&#34;&gt;selectOption&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/setchecked/&#34;&gt;setChecked&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/setcontent/&#34;&gt;setContent&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/setdefaultnavigationtimeout/&#34;&gt;setDefaultNavigationTimeout&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/setdefaulttimeout/&#34;&gt;setDefaultTimeout&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/setextrahttpheaders/&#34;&gt;setExtraHTTPHeaders&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/setinputfiles/&#34;&gt;setInputFiles&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/setviewportsize/&#34;&gt;setViewportSize&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/tap/&#34;&gt;tap&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/textcontent/&#34;&gt;textContent&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/throttlecpu/&#34;&gt;throttleCPU&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟧&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/throttlenetwork/&#34;&gt;throttleNetwork&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟧&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/title/&#34;&gt;title&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/type/&#34;&gt;type&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/uncheck/&#34;&gt;uncheck&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/unroute/&#34;&gt;unroute&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/unrouteall/&#34;&gt;unrouteAll&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/url/&#34;&gt;url&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;video&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/viewportsize/&#34;&gt;viewportSize&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;waitForEvent&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/waitforfunction/&#34;&gt;waitForFunction&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/waitforloadstate/&#34;&gt;waitForLoadState&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/waitfornavigation/&#34;&gt;waitForNavigation&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/waitforrequest/&#34;&gt;waitForRequest&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/waitforresponse/&#34;&gt;waitForResponse&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/waitforselector/&#34;&gt;waitForSelector&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/waitfortimeout/&#34;&gt;waitForTimeout&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/waitforurl/&#34;&gt;waitForURL&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/workers/&#34;&gt;workers&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Request&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/request/allheaders/&#34;&gt;allHeaders&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Request&lt;/td&gt;
              &lt;td&gt;failure&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Request&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/request/frame/&#34;&gt;frame&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Request&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/request/headervalue/&#34;&gt;headerValue&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Request&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/request/headers/&#34;&gt;headers&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Request&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/request/headersarray/&#34;&gt;headersArray&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Request&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/request/isnavigationrequest/&#34;&gt;isNavigationRequest&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Request&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/request/method/&#34;&gt;method&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Request&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/request/postdata/&#34;&gt;postData&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Request&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/request/postdatabuffer/&#34;&gt;postDataBuffer&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Request&lt;/td&gt;
              &lt;td&gt;postDataJSON&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Request&lt;/td&gt;
              &lt;td&gt;redirectedFrom&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Request&lt;/td&gt;
              &lt;td&gt;redirectedTo&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Request&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/request/resourcetype/&#34;&gt;resourceType&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Request&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/request/response/&#34;&gt;response&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Request&lt;/td&gt;
              &lt;td&gt;serviceWorker&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Request&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/request/size/&#34;&gt;size&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟧&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Request&lt;/td&gt;
              &lt;td&gt;sizes&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/request/size/&#34;&gt;request.size&lt;/a&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Request&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/request/timing/&#34;&gt;timing&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Request&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/request/url/&#34;&gt;url&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Response&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/response/allheaders/&#34;&gt;allHeaders&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Response&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/response/body/&#34;&gt;body&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Response&lt;/td&gt;
              &lt;td&gt;finished&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Response&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/response/frame/&#34;&gt;frame&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Response&lt;/td&gt;
              &lt;td&gt;fromServiceWorker&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Response&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/response/headervalue/&#34;&gt;headerValue&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Response&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/response/headervalues/&#34;&gt;headerValues&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Response&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/response/headers/&#34;&gt;headers&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Response&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/response/headersarray/&#34;&gt;headersArray&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Response&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/response/json/&#34;&gt;json&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Response&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/response/ok/&#34;&gt;ok&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Response&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/response/request/&#34;&gt;request&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Response&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/response/securitydetails/&#34;&gt;securityDetails&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Response&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/response/serveraddr/&#34;&gt;serverAddr&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Response&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/response/size/&#34;&gt;size&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟧&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Response&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/response/status/&#34;&gt;status&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Response&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/response/statustext/&#34;&gt;statusText&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Response&lt;/td&gt;
              &lt;td&gt;text&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Response&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/response/url/&#34;&gt;url&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Route&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/route/abort/&#34;&gt;abort&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Route&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/route/continue/&#34;&gt;continue&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Route&lt;/td&gt;
              &lt;td&gt;fallback&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Route&lt;/td&gt;
              &lt;td&gt;fetch&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Route&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/route/fulfill/&#34;&gt;fulfill&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Route&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/route/request/&#34;&gt;request&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Touchscreen&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/touchscreen/tap/&#34;&gt;tap&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Worker&lt;/td&gt;
              &lt;td&gt;addListener&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Worker&lt;/td&gt;
              &lt;td&gt;evaluate&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Worker&lt;/td&gt;
              &lt;td&gt;evaluateHandle&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Worker&lt;/td&gt;
              &lt;td&gt;off&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Worker&lt;/td&gt;
              &lt;td&gt;on&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Worker&lt;/td&gt;
              &lt;td&gt;once&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Worker&lt;/td&gt;
              &lt;td&gt;prependListener&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Worker&lt;/td&gt;
              &lt;td&gt;removeListener&lt;/td&gt;
              &lt;td&gt;🟥&lt;/td&gt;
              &lt;td&gt;None&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Worker&lt;/td&gt;
              &lt;td&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/worker/url/&#34;&gt;url&lt;/a&gt;&lt;/td&gt;
              &lt;td&gt;🟩&lt;/td&gt;
              &lt;td&gt;-&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;]]></content><description>&lt;h1 id="playwright-apis-in-k6">Playwright APIs in k6&lt;/h1>
&lt;p>The following table shows which Playwright APIs are implemented in k6. k6 tries to match Playwright&amp;rsquo;s API behavior and signature exactly, but some differences may exist. For more details, refer to the individual API documentation page.&lt;/p></description></item><item><title>Recommended practices</title><link>https://grafana.com/docs/k6/v2.3.x/using-k6-browser/recommended-practices/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/using-k6-browser/recommended-practices/</guid><content><![CDATA[&lt;h1 id=&#34;recommended-practices&#34;&gt;Recommended practices&lt;/h1&gt;
&lt;p&gt;This section presents some examples and recommended practices when working with the &lt;code&gt;k6 browser&lt;/code&gt; module to leverage browser automation as part of your k6 tests.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6-browser/recommended-practices/handle-dynamic-elements/&#34;&gt;Handle stale or dynamic elements after navigation&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6-browser/recommended-practices/hybrid-approach-to-performance/&#34;&gt;Hybrid approach to performance&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6-browser/recommended-practices/page-object-model-pattern/&#34;&gt;Page object model&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6-browser/recommended-practices/prevent-cookie-banners-blocking/&#34;&gt;Prevent cookie banners from blocking interactions&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6-browser/recommended-practices/prevent-too-many-time-series-error/&#34;&gt;Prevent too many time series error&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6-browser/recommended-practices/select-elements/&#34;&gt;Select elements&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6-browser/recommended-practices/simulate-user-input-delay/&#34;&gt;Simulate user input delay&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6-browser/recommended-practices/clean-up-test-resources-page-close/&#34;&gt;Use Page.close to clean up test resources&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6-browser/recommended-practices/sleep-vs-page-wait-for-timeout/&#34;&gt;When to use sleep() and page.waitForTimeout()&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
]]></content><description>&lt;h1 id="recommended-practices">Recommended practices&lt;/h1>
&lt;p>This section presents some examples and recommended practices when working with the &lt;code>k6 browser&lt;/code> module to leverage browser automation as part of your k6 tests.&lt;/p></description></item><item><title>Browser metrics</title><link>https://grafana.com/docs/k6/v2.3.x/using-k6-browser/metrics/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/using-k6-browser/metrics/</guid><content><![CDATA[&lt;h1 id=&#34;browser-metrics&#34;&gt;Browser metrics&lt;/h1&gt;
&lt;p&gt;Follow along to learn about:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Google&amp;rsquo;s Core Web Vitals and why they are important&lt;/li&gt;
&lt;li&gt;How to analyze the browser metrics output&lt;/li&gt;
&lt;li&gt;How to set thresholds for your browser metrics&lt;/li&gt;
&lt;li&gt;How to use the Performance API to measure web performance.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;googles-core-web-vitals&#34;&gt;Google&amp;rsquo;s Core Web Vitals&lt;/h2&gt;
&lt;p&gt;The k6 browser module emits metrics based on the &lt;a href=&#34;https://web.dev/vitals/#core-web-vitals&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Core Web Vitals&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Google introduced these metrics to provided unified signals to assess user experience on the web.
The vitals are composed of three important metrics to help user experience when using your web application.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Loading performance&lt;/li&gt;
&lt;li&gt;Interactivity&lt;/li&gt;
&lt;li&gt;And visual stability&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;why-web-vitals&#34;&gt;Why web vitals&lt;/h3&gt;
&lt;p&gt;The Core Web Vitals are one of &lt;a href=&#34;https://developers.google.com/search/docs/appearance/page-experience&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Google&amp;rsquo;s Page Experience Signals&lt;/a&gt;. A positive page experience naturally leads to better quality and better search engine rankings. These golden metrics help you understand which areas of your frontend application need optimization so your pages can rank higher than similar content.&lt;/p&gt;
&lt;p&gt;Existing browser measures, such as &lt;code&gt;Load&lt;/code&gt; and &lt;code&gt;DOMContentLoaded&lt;/code&gt; times, no longer accurately reflect user experience very well.
Relying on these load events does not give the correct metric to analyze critical performance bottlenecks that your page might have. Google&amp;rsquo;s Web Vitals is a better measure of your page performance and its user experience.&lt;/p&gt;
&lt;h2 id=&#34;browser-metrics-1&#34;&gt;Browser metrics&lt;/h2&gt;
&lt;p&gt;The following Core Web Vital metrics are collected when using the k6 browser module.&lt;/p&gt;


&lt;div data-shared=&#34;browser/web-vital-core-metrics.md&#34;&gt;
            &lt;!-- vale off --&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Metric name&lt;/th&gt;
              &lt;th&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;browser_web_vital_cls&lt;/td&gt;
              &lt;td&gt;Measures the visual stability on a webpage by quantifying the amount of unexpected layout shift of visible page content. Refer to &lt;a href=&#34;https://web.dev/cls/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Cumulative Layout Shift&lt;/a&gt; for more information.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;browser_web_vital_inp&lt;/td&gt;
              &lt;td&gt;A metric that measures a page&amp;rsquo;s responsiveness. Refer to &lt;a href=&#34;https://web.dev/inp/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Interaction to Next Paint&lt;/a&gt; for more information.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;browser_web_vital_lcp&lt;/td&gt;
              &lt;td&gt;Measures the time it takes for the largest content element on a page to become visible. Refer to &lt;a href=&#34;https://web.dev/lcp/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Largest Contentful Paint&lt;/a&gt; for more information.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;!-- vale on --&gt;
&lt;/div&gt;

        
&lt;p&gt;Additionally, k6 also collects other Web Vital metrics.&lt;/p&gt;


&lt;div data-shared=&#34;browser/web-vital-other-metrics.md&#34;&gt;
            &lt;!-- vale off --&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Metric name&lt;/th&gt;
              &lt;th&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;browser_web_vital_fcp&lt;/td&gt;
              &lt;td&gt;Measures the time it takes for the browser to render the first DOM element on the page, whether that&amp;rsquo;s a text, image or header. Refer to &lt;a href=&#34;https://web.dev/fcp/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;First Contentful Paint&lt;/a&gt; for more information.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;browser_web_vital_ttfb&lt;/td&gt;
              &lt;td&gt;Measures the time it takes between the browser request and the start of the response from a server. Refer to &lt;a href=&#34;https://web.dev/ttfb/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Time to First Byte&lt;/a&gt; for more information.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;!-- vale on --&gt;
&lt;/div&gt;

        
&lt;p&gt;To review the complete list of k6 metrics, refer to the 
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6/metrics/reference/&#34;&gt;Metrics reference&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;understanding-the-browser-metrics-output&#34;&gt;Understanding the browser metrics output&lt;/h2&gt;
&lt;p&gt;When a browser test finishes, k6 reports a top-level overview of the aggregated browser metrics output.
The following snippet is an example:&lt;/p&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;As Google also recommends measuring the 75th percentile for each web vital metric, there will still be future tweaks to improve the summary output.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;


&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;  browser_data_received.......: 2.6 kB  2.0 kB/s
  browser_data_sent...........: 1.9 kB  1.5 kB/s
  browser_http_req_duration...: avg=215.4ms  min=124.9ms med=126.65ms max=394.64ms p(90)=341.04ms p(95)=367.84ms
  browser_http_req_failed.....: 0.00%   ✓ 0        ✗ 3
  browser_web_vital_cls.......: avg=0        min=0       med=0        max=0        p(90)=0        p(95)=0
  browser_web_vital_fcp.......: avg=344.15ms min=269.2ms med=344.15ms max=419.1ms  p(90)=404.11ms p(95)=411.6ms
  browser_web_vital_inp.......: avg=8ms      min=8ms     med=8ms      max=8ms      p(90)=8ms      p(95)=8ms
  browser_web_vital_lcp.......: avg=419.1ms  min=419.1ms med=419.1ms  max=419.1ms  p(90)=419.1ms  p(95)=419.1ms
  browser_web_vital_ttfb......: avg=322.4ms  min=251ms   med=322.4ms  max=393.8ms  p(90)=379.52ms p(95)=386.66ms&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;You can also visualize these results in different ways depending on your team&amp;rsquo;s needs. For more information, check out our blog post on &lt;a href=&#34;https://k6.io/blog/ways-to-visualize-k6-results/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;visualizing k6 results&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;web-vitals-across-page-navigations&#34;&gt;Web vitals across page navigations&lt;/h3&gt;
&lt;p&gt;Starting with k6 v2.3.0, browser web vital aggregates include measurements from intermediate pages when a test navigates between documents in the same tab. For example, a flow that visits a login page, an account page, and a detail page can report web vitals for each page, even if you close the tab only at the end. Earlier versions could lose LCP, CLS, and INP measurements from the intermediate pages.&lt;/p&gt;
&lt;p&gt;Each page contributes one sample for each web vital it reports. k6 records the latest available value when the main frame navigates to another document or the page closes. Not every page reports every metric: for example, INP requires a qualifying user interaction. This improvement covers navigations that load a new document; it does not add support for measuring client-side route changes within a single-page application.&lt;/p&gt;
&lt;p&gt;The additional intermediate-page samples can change averages and percentiles after you upgrade, even if the application&amp;rsquo;s performance has not changed. Use &lt;a href=&#34;#set-thresholds-for-your-browser-metrics&#34;&gt;URL-specific thresholds&lt;/a&gt; to evaluate individual pages instead of only the aggregate across the flow.&lt;/p&gt;
&lt;p&gt;Always await &lt;code&gt;page.close()&lt;/code&gt; in a &lt;code&gt;finally&lt;/code&gt; block, as shown in the &lt;a href=&#34;#measure-custom-metrics&#34;&gt;custom metrics example&lt;/a&gt;, so the last page can finish reporting its measurements. An abrupt test termination can discard measurements that have not yet been emitted.&lt;/p&gt;
&lt;h2 id=&#34;set-thresholds-for-your-browser-metrics&#34;&gt;Set thresholds for your browser metrics&lt;/h2&gt;
&lt;p&gt;The browser module can use all key k6 functionalities, such as 
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6/thresholds/&#34;&gt;Thresholds&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To set thresholds for your browser metrics:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Add the metric you want to check.&lt;/li&gt;
&lt;li&gt;Specify its threshold value.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;As the following example shows, you can also pass in different URLs if you&amp;rsquo;re going to set a threshold for other pages, especially when your script contains page navigations.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-caution&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Caution&lt;/p&gt;&lt;p&gt;By default, use URL tags to distinguish pages in thresholds. 
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6/tags-and-groups/#groups&#34;&gt;Group&lt;/a&gt; tags aren&amp;rsquo;t reliably applied to browser metrics, as described in &lt;a href=&#34;https://github.com/grafana/xk6-browser/issues/721&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;#721&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;When you enable the experimental 
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6/feature-flags/&#34;&gt;&lt;code&gt;async-metric-context&lt;/code&gt; feature flag&lt;/a&gt;, &lt;code&gt;browser_data_sent&lt;/code&gt;, &lt;code&gt;browser_data_received&lt;/code&gt;, &lt;code&gt;browser_http_req_duration&lt;/code&gt;, and &lt;code&gt;browser_http_req_failed&lt;/code&gt; keep a best-effort copy of the tags and metadata from the browser operation that initiated the request. This includes the &lt;code&gt;group&lt;/code&gt; tag. The feature doesn&amp;rsquo;t change group attribution for other browser metrics.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;!-- md-k6:skip --&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;JavaScript&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-javascript&#34;&gt;export const options = {
  thresholds: {
    &amp;#39;browser_web_vital_lcp&amp;#39;: [&amp;#39;p(90) &amp;lt; 1000&amp;#39;],
    &amp;#39;browser_web_vital_inp{url:https://test.k6.io/}&amp;#39;: [&amp;#39;p(90) &amp;lt; 80&amp;#39;],
    &amp;#39;browser_web_vital_inp{url:https://test.k6.io/my_messages.php}&amp;#39;: [&amp;#39;p(90) &amp;lt; 100&amp;#39;],
  },
};&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;When the test is run, you should see a similar output as the one below.&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;  browser_web_vital_inp..........................: avg=0s       min=0s       med=0s       max=0s       p(90)=0s       p(95)=0s
  ✓ { url:https://test.k6.io/ }..................: avg=0s       min=0s       med=0s       max=0s       p(90)=0s       p(95)=0s
  ✓ { url:https://test.k6.io/my_messages.php }...: avg=0s       min=0s       med=0s       max=0s       p(90)=0s       p(95)=0s
✓ browser_web_vital_lcp..........................: avg=460.1ms  min=460.1ms  med=460.1ms  max=460.1ms  p(90)=460.1ms  p(95)=460.1ms
  browser_web_vital_ttfb.........................: avg=339.3ms  min=258.9ms  med=339.3ms  max=419.7ms  p(90)=403.62ms p(95)=411.66ms&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;measure-custom-metrics&#34;&gt;Measure custom metrics&lt;/h2&gt;
&lt;p&gt;When using the k6 browser &lt;code&gt;page.evaluate&lt;/code&gt; function, you can call the &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/API/Performance_API&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Performance API&lt;/a&gt; to measure the performance of web applications. For example, if you want to measure the time it takes for your users to complete actions, such as a search feature, you can use the &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/API/Performance/mark&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&lt;code&gt;performance.mark&lt;/code&gt;&lt;/a&gt; method to add a timestamp in your browser&amp;rsquo;s performance timeline.
Using the &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/API/Performance/measure&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&lt;code&gt;performance.measure&lt;/code&gt;&lt;/a&gt; method, you can also measure the time difference between two performance markers. The time duration that &lt;code&gt;performance.measure&lt;/code&gt; returns can be added as a custom metric in k6 browser using 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-metrics/trend/&#34;&gt;Trends&lt;/a&gt;.&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;JavaScript&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-javascript&#34;&gt;import { browser } from &amp;#39;k6/browser&amp;#39;;
import { Trend } from &amp;#39;k6/metrics&amp;#39;;

export const options = {
  scenarios: {
    ui: {
      executor: &amp;#39;shared-iterations&amp;#39;,
      options: {
        browser: {
          type: &amp;#39;chromium&amp;#39;,
        },
      },
    },
  },
};

const myTrend = new Trend(&amp;#39;total_action_time&amp;#39;, true);

export default async function () {
  const page = await browser.newPage();

  try {
    await page.goto(&amp;#39;https://test.k6.io/browser.php&amp;#39;);
    await page.evaluate(() =&amp;gt; window.performance.mark(&amp;#39;page-visit&amp;#39;));

    await page.locator(&amp;#39;#checkbox1&amp;#39;).check();
    await page.locator(&amp;#39;#counter-button&amp;#39;).click();
    await page.locator(&amp;#39;#text1&amp;#39;).fill(&amp;#39;This is a test&amp;#39;);

    await page.evaluate(() =&amp;gt; window.performance.mark(&amp;#39;action-completed&amp;#39;));

    // Get time difference between visiting the page and completing the actions
    await page.evaluate(() =&amp;gt;
      window.performance.measure(&amp;#39;total-action-time&amp;#39;, &amp;#39;page-visit&amp;#39;, &amp;#39;action-completed&amp;#39;)
    );

    const totalActionTime = await page.evaluate(
      () =&amp;gt;
        JSON.parse(JSON.stringify(window.performance.getEntriesByName(&amp;#39;total-action-time&amp;#39;)))[0]
          .duration
    );

    myTrend.add(totalActionTime);
  } finally {
    await page.close();
  }
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;After you run the test, you should see a similar output as the one below.&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;  iteration_duration..........: avg=1.06s    min=1.06s    med=1.06s    max=1.06s    p(90)=1.06s    p(95)=1.06s
  iterations..................: 1      0.70866/s
  total_action_time.............: avg=295.3ms    min=295.3ms    med=295.3ms    max=295.3ms    p(90)=295.3ms    p(95)=295.3ms&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="browser-metrics">Browser metrics&lt;/h1>
&lt;p>Follow along to learn about:&lt;/p>
&lt;ul>
&lt;li>Google&amp;rsquo;s Core Web Vitals and why they are important&lt;/li>
&lt;li>How to analyze the browser metrics output&lt;/li>
&lt;li>How to set thresholds for your browser metrics&lt;/li>
&lt;li>How to use the Performance API to measure web performance.&lt;/li>
&lt;/ul>
&lt;h2 id="googles-core-web-vitals">Google&amp;rsquo;s Core Web Vitals&lt;/h2>
&lt;p>The k6 browser module emits metrics based on the &lt;a href="https://web.dev/vitals/#core-web-vitals" target="_blank" rel="noopener noreferrer">Core Web Vitals&lt;/a>.&lt;/p></description></item><item><title>Browser options</title><link>https://grafana.com/docs/k6/v2.3.x/using-k6-browser/options/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/using-k6-browser/options/</guid><content><![CDATA[&lt;h1 id=&#34;browser-options&#34;&gt;Browser options&lt;/h1&gt;
&lt;p&gt;To enable browser testing, add the &lt;code&gt;browser&lt;/code&gt; configuration within the &lt;code&gt;options&lt;/code&gt; property of the 
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6/scenarios/#options&#34;&gt;Scenario options&lt;/a&gt;.&lt;/p&gt;
&lt;!-- md-k6:skip --&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;JavaScript&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-javascript&#34;&gt;export const options = {
  scenarios: {
    foo: {
      executor: &amp;#39;shared-iterations&amp;#39;,
      options: {
        browser: {
          type: &amp;#39;chromium&amp;#39;,
        },
      },
    },
  },
};&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;script-options&#34;&gt;Script options&lt;/h2&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Option&lt;/th&gt;
              &lt;th&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;type&lt;sup&gt;(required)&lt;/sup&gt;&lt;/td&gt;
              &lt;td&gt;Name of the browser running the test. Options include &lt;code&gt;&#39;chromium&#39;&lt;/code&gt;.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h2 id=&#34;environment-variable-options&#34;&gt;Environment variable options&lt;/h2&gt;
&lt;p&gt;You can customize the behavior of the browser module by passing environment variables.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;Customizing browser options via environment variables is unsupported when &lt;a href=&#34;/docs/grafana-cloud/testing/k6/get-started/run-your-first-browser-tests/&#34;&gt;running browser tests in Grafana Cloud k6&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;



&lt;div data-shared=&#34;browser/env-var-options.md&#34;&gt;
            &lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Environment Variable&lt;/th&gt;
              &lt;th&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;K6_BROWSER_ARGS&lt;/td&gt;
              &lt;td&gt;Extra command line arguments to include when launching browser process. See the 
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6-browser/options/#browser-arguments&#34;&gt;browser arguments&lt;/a&gt; for usage and common arguments.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;K6_BROWSER_DEBUG&lt;/td&gt;
              &lt;td&gt;All CDP messages and internal fine grained logs will be logged if set to &lt;code&gt;true&lt;/code&gt;.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;K6_BROWSER_EXECUTABLE_PATH&lt;/td&gt;
              &lt;td&gt;Override search for browser executable in favor of specified absolute path.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;K6_BROWSER_HEADLESS&lt;/td&gt;
              &lt;td&gt;Show browser GUI or not. &lt;code&gt;true&lt;/code&gt; by default.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;K6_BROWSER_IGNORE_DEFAULT_ARGS&lt;/td&gt;
              &lt;td&gt;Ignore any of the 
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6-browser/options/#default-arguments&#34;&gt;default arguments&lt;/a&gt; included when launching a browser process.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;K6_BROWSER_TIMEOUT&lt;/td&gt;
              &lt;td&gt;Default timeout for initializing the connection to the browser instance. &lt;code&gt;&#39;30s&#39;&lt;/code&gt; if not set.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;K6_BROWSER_TRACES_METADATA&lt;/td&gt;
              &lt;td&gt;Sets additional &lt;em&gt;key-value&lt;/em&gt; metadata that is included as attributes in every span generated from browser module traces. Example: &lt;code&gt;K6_BROWSER_TRACES_METADATA=attr1=val1,attr2=val2&lt;/code&gt;. This only applies if traces generation is enabled, refer to 
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6/k6-options/reference/#traces-output&#34;&gt;Traces output&lt;/a&gt; for more details.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;The following command passes the browser options as environment variables to launch a headful browser with custom arguments.&lt;/p&gt;



  

  

  

  






  

  

  

  



  &lt;div class=&#34;code&#34; x-data=&#34;app_code([&amp;#34;bash&amp;#34;,&amp;#34;docker&amp;#34;,&amp;#34;windows&amp;#34;,&amp;#34;windows-powershell&amp;#34;], false)&#34; x-init=&#34;init()&#34; data-codetoggle=&#34;true&#34;&gt;
    &lt;div class=&#34;toggle-toolbar &#34;&gt;
      &lt;div&gt;&lt;button class=&#34;toggle-toolbar__item&#34; :class=&#34;{ &#39;toggle-toolbar__item-active&#39;: active === &#39;bash&#39; }&#34; @click=&#34;$store.code.language = &#39;bash&#39;&#34;&gt;
              &lt;span&gt;Bash&lt;/span&gt;
            &lt;/button&gt;&lt;button class=&#34;toggle-toolbar__item&#34; :class=&#34;{ &#39;toggle-toolbar__item-active&#39;: active === &#39;docker&#39; }&#34; @click=&#34;$store.code.language = &#39;docker&#39;&#34;&gt;
              &lt;span&gt;docker&lt;/span&gt;
            &lt;/button&gt;&lt;button class=&#34;toggle-toolbar__item&#34; :class=&#34;{ &#39;toggle-toolbar__item-active&#39;: active === &#39;windows&#39; }&#34; @click=&#34;$store.code.language = &#39;windows&#39;&#34;&gt;
              &lt;span&gt;windows&lt;/span&gt;
            &lt;/button&gt;&lt;button class=&#34;toggle-toolbar__item&#34; :class=&#34;{ &#39;toggle-toolbar__item-active&#39;: active === &#39;windows-powershell&#39; }&#34; @click=&#34;$store.code.language = &#39;windows-powershell&#39;&#34;&gt;
              &lt;span&gt;windows-powershell&lt;/span&gt;
            &lt;/button&gt;&lt;/div&gt;
      &lt;div class=&#34;d-flex&#34;&gt;&lt;span class=&#34;code-clipboard&#34; x-ref=&#34;tooltip&#34;&gt;
          &lt;button @click=&#34;copy()&#34;&gt;
            &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
            &lt;span&gt;Copy&lt;/span&gt;
          &lt;/button&gt;
        &lt;/span&gt;
      &lt;/div&gt;
      &lt;div class=&#34;toggle-toolbar__border&#34;&gt;&lt;/div&gt;
    &lt;/div&gt;
    
    &lt;div class=&#34;code-rendered&#34; &gt;
      
&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;K6_BROWSER_HEADLESS=false K6_BROWSER_ARGS=&amp;#39;show-property-changed-rects&amp;#39; k6 run script.js&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;docker&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-docker&#34;&gt;# WARNING!
# The grafana/k6:master-with-browser image launches a Chrome browser by setting the
# &amp;#39;no-sandbox&amp;#39; argument. Only use it with trustworthy websites.
#
# As an alternative, you can use a Docker SECCOMP profile instead, and overwrite the
# Chrome arguments to not use &amp;#39;no-sandbox&amp;#39; such as:
# docker container run --rm -i -e K6_BROWSER_ARGS=&amp;#39;&amp;#39; --security-opt seccomp=$(pwd)/chrome.json grafana/k6:master-with-browser run - &amp;lt;script.js
#
# You can find an example of a hardened SECCOMP profile in:
# https://raw.githubusercontent.com/jfrazelle/dotfiles/master/etc/docker/seccomp/chrome.json.
docker run --rm -i -e K6_BROWSER_HEADLESS=false -e K6_BROWSER_ARGS=&amp;#39;show-property-changed-rects&amp;#39; grafana/k6:master-with-browser run - &amp;lt;script.js&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;windows&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-windows&#34;&gt;set &amp;#34;K6_BROWSER_HEADLESS=false&amp;#34; &amp;amp;&amp;amp; set &amp;#34;K6_BROWSER_ARGS=&amp;#39;show-property-changed-rects&amp;#39; &amp;#34; &amp;amp;&amp;amp; k6 run script.js&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;windows-powershell&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-windows-powershell&#34;&gt;$env:K6_BROWSER_HEADLESS=&amp;#34;false&amp;#34; ; $env:K6_BROWSER_ARGS=&amp;#39;show-property-changed-rects&amp;#39; ; k6 run script.js&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

    &lt;/div&gt;
  &lt;/div&gt;


&lt;h3 id=&#34;browser-arguments&#34;&gt;Browser arguments&lt;/h3&gt;
&lt;p&gt;The following table highlights commonly useful arguments you can pass via the &lt;code&gt;K6_BROWSER_ARGS&lt;/code&gt; environment variable. Most tests run without extra arguments, because the browser module already uses sensible &lt;a href=&#34;#default-arguments&#34;&gt;defaults&lt;/a&gt;. Set these extra arguments only when you need to debug or adapt to your environment. For a complete list, refer to &lt;a href=&#34;https://peter.sh/experiments/chromium-command-line-switches/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Chromium command line switches&lt;/a&gt;.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;Arguments should not start with &lt;code&gt;--&lt;/code&gt; when passing them to &lt;code&gt;K6_BROWSER_ARGS&lt;/code&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Argument&lt;/th&gt;
              &lt;th&gt;Type&lt;/th&gt;
              &lt;th&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;disable-web-security&lt;/td&gt;
              &lt;td&gt;boolean&lt;/td&gt;
              &lt;td&gt;Disables the same-origin policy. Useful when testing a site whose CORS configuration blocks the browser from interacting with cross-origin iframes or assets.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ignore-certificate-errors&lt;/td&gt;
              &lt;td&gt;boolean&lt;/td&gt;
              &lt;td&gt;Ignores TLS certificate errors. Useful when testing against hosts with self-signed or otherwise invalid certificates.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;no-sandbox&lt;/td&gt;
              &lt;td&gt;boolean&lt;/td&gt;
              &lt;td&gt;Disables the Chromium sandbox. Needed when running as root inside Docker, CI, or Kubernetes. Only use with trustworthy targets.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;proxy-server&lt;/td&gt;
              &lt;td&gt;string&lt;/td&gt;
              &lt;td&gt;Routes browser traffic through an HTTP or SOCKS proxy. Pass the proxy address (&lt;code&gt;host:port&lt;/code&gt;) as the value. Useful for corporate proxies or inspecting traffic with tools like mitmproxy.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;For example, pass the following arguments to the &lt;code&gt;K6_BROWSER_ARGS&lt;/code&gt; environment variable to ignore TLS certificate errors and route browser traffic through a proxy when running a browser test:&lt;/p&gt;



  

  

  

  






  

  

  

  



  &lt;div class=&#34;code&#34; x-data=&#34;app_code([&amp;#34;bash&amp;#34;,&amp;#34;docker&amp;#34;,&amp;#34;windows&amp;#34;,&amp;#34;windows-powershell&amp;#34;], false)&#34; x-init=&#34;init()&#34; data-codetoggle=&#34;true&#34;&gt;
    &lt;div class=&#34;toggle-toolbar &#34;&gt;
      &lt;div&gt;&lt;button class=&#34;toggle-toolbar__item&#34; :class=&#34;{ &#39;toggle-toolbar__item-active&#39;: active === &#39;bash&#39; }&#34; @click=&#34;$store.code.language = &#39;bash&#39;&#34;&gt;
              &lt;span&gt;Bash&lt;/span&gt;
            &lt;/button&gt;&lt;button class=&#34;toggle-toolbar__item&#34; :class=&#34;{ &#39;toggle-toolbar__item-active&#39;: active === &#39;docker&#39; }&#34; @click=&#34;$store.code.language = &#39;docker&#39;&#34;&gt;
              &lt;span&gt;docker&lt;/span&gt;
            &lt;/button&gt;&lt;button class=&#34;toggle-toolbar__item&#34; :class=&#34;{ &#39;toggle-toolbar__item-active&#39;: active === &#39;windows&#39; }&#34; @click=&#34;$store.code.language = &#39;windows&#39;&#34;&gt;
              &lt;span&gt;windows&lt;/span&gt;
            &lt;/button&gt;&lt;button class=&#34;toggle-toolbar__item&#34; :class=&#34;{ &#39;toggle-toolbar__item-active&#39;: active === &#39;windows-powershell&#39; }&#34; @click=&#34;$store.code.language = &#39;windows-powershell&#39;&#34;&gt;
              &lt;span&gt;windows-powershell&lt;/span&gt;
            &lt;/button&gt;&lt;/div&gt;
      &lt;div class=&#34;d-flex&#34;&gt;&lt;span class=&#34;code-clipboard&#34; x-ref=&#34;tooltip&#34;&gt;
          &lt;button @click=&#34;copy()&#34;&gt;
            &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
            &lt;span&gt;Copy&lt;/span&gt;
          &lt;/button&gt;
        &lt;/span&gt;
      &lt;/div&gt;
      &lt;div class=&#34;toggle-toolbar__border&#34;&gt;&lt;/div&gt;
    &lt;/div&gt;
    
    &lt;div class=&#34;code-rendered&#34; &gt;
      
&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;K6_BROWSER_ARGS=&amp;#39;ignore-certificate-errors,proxy-server=127.0.0.1:8080&amp;#39; k6 run script.js&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;docker&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-docker&#34;&gt;docker run --rm -i -e K6_BROWSER_ARGS=&amp;#39;ignore-certificate-errors,proxy-server=127.0.0.1:8080&amp;#39; grafana/k6:master-with-browser run - &amp;lt;script.js&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;windows&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-windows&#34;&gt;set &amp;#34;K6_BROWSER_ARGS=&amp;#39;ignore-certificate-errors,proxy-server=127.0.0.1:8080&amp;#39;&amp;#34; &amp;amp;&amp;amp; k6 run script.js&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;windows-powershell&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-windows-powershell&#34;&gt;$env:K6_BROWSER_ARGS=&amp;#39;ignore-certificate-errors,proxy-server=127.0.0.1:8080&amp;#39; ; k6 run script.js&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

    &lt;/div&gt;
  &lt;/div&gt;


&lt;/div&gt;

        
&lt;h3 id=&#34;default-arguments&#34;&gt;Default arguments&lt;/h3&gt;
&lt;p&gt;List of default arguments included when launching the browser process. You can pass one or more of the arguments to the &lt;code&gt;K6_BROWSER_IGNORE_DEFAULT_ARGS&lt;/code&gt; environment variable when starting a test for the ones you want to ignore.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;The starting &amp;lsquo;&amp;ndash;&amp;rsquo; have been omitted from the argument names in these lists.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Argument&lt;/th&gt;
              &lt;th&gt;Value&lt;/th&gt;
              &lt;th&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;disable-background-networking&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Disables several subsystems which run network requests in the background. This is used during network performance testing to avoid measurement noise.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;enable-features&lt;/td&gt;
              &lt;td&gt;NetworkService,&lt;br /&gt;NetworkServiceInProcess&lt;/td&gt;
              &lt;td&gt;Comma-separated list of feature names to enable.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;disable-background-timer-throttling&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Disables task throttling of timer tasks from background pages.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;disable-backgrounding-occluded-windows&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Disables backgrounding renders for occluded windows. Done for tests to avoid nondeterministic behavior.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;disable-breakpad&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Disables the crash reporting.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;disable-component-extensions&lt;br /&gt;-with-background-pages&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Disables default component extensions with background pages. Useful for performance tests where these pages may interfere with results.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;disable-default-apps&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Disables the installation of default apps on the first run. This is used during automated testing.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;disable-dev-shm-usage&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;The /dev/shm partition is too small in certain VM environments, causing Chrome to fail or crash. This flag provides a work-around for this issue (a temporary directory will always be used to create anonymous shared memory files).&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;disable-extensions&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Disables extensions.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;disable-features&lt;/td&gt;
              &lt;td&gt;ImprovedCookieControls,&lt;br /&gt;LazyFrameLoading,&lt;br /&gt;GlobalMediaControls,&lt;br /&gt;DestroyProfileOnBrowserClose,&lt;br /&gt;MediaRouter,&lt;br /&gt;AcceptCHFrame&lt;/td&gt;
              &lt;td&gt;Comma-separated list of feature names to disable.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;disable-hang-monitor&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Suppresses hang monitor dialogs in renderer processes. This may allow slow unload handlers on a page to prevent the tab from closing, but the Task Manager can be used to terminate the offending process in this case.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;disable-ipc-flooding-protection&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Disables the IPC flooding protection. It is activated by default. Some javascript functions can be used to flood the browser process with IPC. This protection limits the rate at which they can be used.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;disable-popup-blocking&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Disables pop-up blocking.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;disable-prompt-on-repost&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Usually, when the user attempts to navigate to a page that was the result of a post request, the browser prompts to make sure that&amp;rsquo;s the intention of the user. This switch may be used to disable that check during automated testing.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;disable-renderer-backgrounding&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Prevents renderer process backgrounding when set.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;force-color-profile&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;srgb&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Forces all monitors to be treated as though they have the specified color profile. Accepted values are &amp;ldquo;srgb&amp;rdquo; and &amp;ldquo;generic-rgb&amp;rdquo; (currently used by Mac layout tests) and &amp;ldquo;color-spin-gamma24&amp;rdquo; (used by layout tests).&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;metrics-recording-only&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Enables the recording of metrics reports but disables reporting. This executes all the code that a normal client would use for reporting, except the report is dropped rather than sent to the server. This is useful for finding issues in the metrics code during UI and performance tests.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;no-first-run&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Skips the &amp;ldquo;First Run&amp;rdquo; tasks, whether or not it&amp;rsquo;s the first run, and the &amp;ldquo;What&amp;rsquo;s New&amp;rdquo; page. This does not drop the &amp;ldquo;First Run&amp;rdquo; sentinel and thus doesn&amp;rsquo;t prevent &amp;ldquo;First Run&amp;rdquo; from occurring the next time Chromium is launched without this flag. It also does not update the last &amp;ldquo;What&amp;rsquo;s New&amp;rdquo; milestone, so it does not prevent &amp;ldquo;What&amp;rsquo;s New&amp;rdquo; from occurring the next time Chromium is launched without this flag.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;enable-automation&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Enables indication that the browser is controlled by automation.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;password-store&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;basic&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Specifies which encryption storage backend to use. The possible values are kwallet, kwallet5, gnome, gnome-keyring, gnome-libsecret, and basic. Any other value will lead to Chromium detecting the best backend automatically.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;use-mock-keychain&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Uses mock keychain on Mac to prevent the blocking permissions dialog about: &amp;ldquo;Chrome wants to use your confidential information stored in your keychain.&amp;rdquo;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;no-service-autorun&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Disables the service process from adding itself as an autorun process. This does not delete existing autorun registrations, it just prevents the service from registering a new one.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;no-startup-window&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Does not automatically open a browser window on startup (used when launching Chrome for the purpose of hosting background apps).&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;no-default-browser-check&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Disables the default browser check. Useful for UI/browser tests where we want to avoid having the default browser info-bar displayed.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;headless&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;true&lt;/code&gt;/&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Run in headless mode, i.e., without a UI or display server dependencies. Set by &lt;code&gt;K6_BROWSER_HEADLESS&lt;/code&gt; environment variable (default true).&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;window-size&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;800,600&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Sets the initial window size. Provided as string in the format &amp;ldquo;800,600&amp;rdquo;.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;Additionally, the following arguments are set in headless mode (when &lt;code&gt;K6_BROWSER_HEADLESS&lt;/code&gt; is &lt;code&gt;true&lt;/code&gt;, which is the default option):&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Argument&lt;/th&gt;
              &lt;th&gt;Value&lt;/th&gt;
              &lt;th&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;hide-scrollbars&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Prevents creating scrollbars for web content. Useful for taking consistent screenshots.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;mute-audio&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Mutes audio sent to the audio device so it is not audible during automated testing.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;blink-settings&lt;/td&gt;
              &lt;td&gt;primaryHoverType=2,availableHoverTypes=2,&lt;br /&gt;primaryPointerType=4,availablePointerTypes=4&lt;/td&gt;
              &lt;td&gt;Sets blink settings. Format is &amp;lt;name&amp;gt;[=&amp;lt;value&amp;gt;],&amp;lt;name&amp;gt;[=&amp;lt;value&amp;gt;],&amp;hellip; The names are declared in &lt;a href=&#34;https://source.chromium.org/chromium/chromium/src/&amp;#43;/main:third_party/blink/renderer/core/frame/settings.json5&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;settings.json5&lt;/a&gt; from chromium project. For boolean type, use &amp;ldquo;true&amp;rdquo;, &amp;ldquo;false&amp;rdquo;, or omit &amp;lsquo;=&amp;lt;value&amp;gt;&amp;rsquo; part to set to true. For enum type, use the int value of the enum value.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;]]></content><description>&lt;h1 id="browser-options">Browser options&lt;/h1>
&lt;p>To enable browser testing, add the &lt;code>browser&lt;/code> configuration within the &lt;code>options&lt;/code> property of the
&lt;a href="/docs/k6/v2.3.x/using-k6/scenarios/#options">Scenario options&lt;/a>.&lt;/p>
&lt;!-- md-k6:skip -->
&lt;div class="code-snippet ">&lt;div class="lang-toolbar">
&lt;span class="lang-toolbar__item lang-toolbar__item-active">JavaScript&lt;/span>
&lt;span class="code-clipboard">
&lt;button x-data="app_code_snippet()" x-init="init()" @click="copy()">
&lt;img class="code-clipboard__icon" src="/media/images/icons/icon-copy-small-2.svg" alt="Copy code to clipboard" width="14" height="13">
&lt;span>Copy&lt;/span>
&lt;/button>
&lt;/span>
&lt;div class="lang-toolbar__border">&lt;/div>
&lt;/div>&lt;div class="code-snippet ">
&lt;pre data-expanded="false">&lt;code class="language-javascript">export const options = {
scenarios: {
foo: {
executor: &amp;#39;shared-iterations&amp;#39;,
options: {
browser: {
type: &amp;#39;chromium&amp;#39;,
},
},
},
},
};&lt;/code>&lt;/pre>
&lt;/div>
&lt;/div>
&lt;h2 id="script-options">Script options&lt;/h2>
&lt;section class="expand-table-wrapper">&lt;div class="button-div">
&lt;button class="expand-table-btn">Expand table&lt;/button>
&lt;/div>&lt;div class="responsive-table-wrapper">
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Option&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>type&lt;sup>(required)&lt;/sup>&lt;/td>
&lt;td>Name of the browser running the test. Options include &lt;code>'chromium'&lt;/code>.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;/section>&lt;h2 id="environment-variable-options">Environment variable options&lt;/h2>
&lt;p>You can customize the behavior of the browser module by passing environment variables.&lt;/p></description></item><item><title>Migrating browser scripts to k6 v0.52</title><link>https://grafana.com/docs/k6/v2.3.x/using-k6-browser/migrating-to-k6-v0-52/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/using-k6-browser/migrating-to-k6-v0-52/</guid><content><![CDATA[&lt;h1 id=&#34;migrating-browser-scripts-to-k6-v052&#34;&gt;Migrating browser scripts to k6 v0.52&lt;/h1&gt;
&lt;p&gt;This guide outlines the key changes you will need to make when moving your existing k6 experimental browser test scripts to the &lt;em&gt;latest&lt;/em&gt; 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/&#34;&gt;k6 browser module&lt;/a&gt; version bundled with &lt;a href=&#34;https://github.com/grafana/k6/releases/tag/v0.52.0&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;k6 0.52&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;key-changes&#34;&gt;Key changes&lt;/h2&gt;
&lt;p&gt;In the latest release of k6, we have graduated k6 browser module out of experimental and is now under the import &lt;code&gt;k6/browser&lt;/code&gt;. Migrating to this is a breaking change that will affect &lt;em&gt;all scripts&lt;/em&gt; that use the experimental k6 browser module. The breaking changes are:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Converted most of the k6 browser module APIs to asynchronous (async) APIs. That means they will return a &lt;code&gt;promise&lt;/code&gt; that will &lt;code&gt;resolve&lt;/code&gt; to a value when the API call succeeds or &lt;code&gt;reject&lt;/code&gt; when an error occurs.&lt;/li&gt;
&lt;li&gt;A side effect of making this async changes is that you will need to use 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/jslib/utils/check/&#34;&gt;the &lt;code&gt;check&lt;/code&gt; utility function from jslib.k6.io&lt;/a&gt; instead of working with the k6 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6/check/&#34;&gt;check&lt;/a&gt; API.&lt;/li&gt;
&lt;li&gt;Finally, it&amp;rsquo;s also worth reiterating that the 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6/group/&#34;&gt;group&lt;/a&gt; API still doesn&amp;rsquo;t work with async APIs.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you are interested in the rationale behind this change, refer to the &lt;a href=&#34;https://github.com/grafana/k6/releases/tag/v0.51.0&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;v0.51 release notes&lt;/a&gt;.&lt;/p&gt;


&lt;div class=&#34;admonition admonition-note&#34;&gt;&lt;blockquote&gt;&lt;p class=&#34;title text-uppercase&#34;&gt;Note&lt;/p&gt;&lt;p&gt;The experimental import (&lt;code&gt;k6/experimental/browser&lt;/code&gt;) and the corresponding synchronous APIs will be supported up until the 23rd of September 2024.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;h2 id=&#34;migrating-to-async&#34;&gt;Migrating to async&lt;/h2&gt;
&lt;p&gt;To ensure your scripts work with the latest release of the k6 browser module, you must:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Change the import from &lt;code&gt;k6/experimental/browser&lt;/code&gt; to &lt;code&gt;k6/browser&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Ensure that all the synchronous (sync) APIs that have been migrated over to async are handled appropriately. In most cases, you will only need to add &lt;code&gt;await&lt;/code&gt; in front of the API call.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For example, before:&lt;/p&gt;
&lt;!-- md-k6:skip --&gt;
&lt;!-- eslint-skip --&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;JavaScript&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-javascript&#34;&gt;import { browser } from &amp;#39;k6/experimental/browser&amp;#39;;

...

export default async function () {
    const page = browser.newPage();
    ...
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;And now:&lt;/p&gt;
&lt;!-- md-k6:skip --&gt;
&lt;!-- eslint-skip --&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;JavaScript&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-javascript&#34;&gt;import { browser } from &amp;#39;k6/browser&amp;#39;;

...

export default async function () {
    const page = await browser.newPage();
    ...
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;You might have already encountered async APIs when working with the browser module, such as 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/click/&#34;&gt;page.click&lt;/a&gt;, so the use of &lt;code&gt;async&lt;/code&gt; and &lt;code&gt;await&lt;/code&gt; keywords might be familiar to you.&lt;/p&gt;
&lt;p&gt;Below is a screenshot of a comparison between a generic browser test in &lt;code&gt;v0.51&lt;/code&gt; and &lt;code&gt;v0.52&lt;/code&gt; to help visualize the change:&lt;/p&gt;
&lt;p&gt;&lt;img
  class=&#34;lazyload d-inline-block&#34;
  data-src=&#34;/media/docs/k6-oss/browser-v0.52-migration-script-comparison-3.png&#34;
  alt=&#34;v0.51 &amp;amp; v0.52 script comparison&#34; width=&#34;1808&#34;
     height=&#34;1062&#34;/&gt;&lt;/p&gt;
&lt;h3 id=&#34;the-affected-apis&#34;&gt;The affected APIs&lt;/h3&gt;
&lt;div class=&#34;collapse&#34; x-data=&#34;app_collapse()&#34;&gt;
  &lt;button class=&#34;collapse-trigger&#34; @click=&#34;toggle()&#34;&gt;
    &lt;span class=&#34;body-large&#34;&gt;List of APIs to be migrated to async&lt;/span&gt;
    &lt;span class=&#34;collapse-trigger__icon&#34; :class=&#34;{ &#39;collapse-trigger__icon-open&#39; : open }&#34;&gt;
      
  &lt;svg width=&#34;27&#34; height=&#34;26&#34; viewBox=&#34;0 0 27 26&#34; fill=&#34;none&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34;&gt;
&lt;path opacity=&#34;0.2&#34; d=&#34;M1.73047 12.8359C1.73047 19.4634 7.10305 24.8359 13.7305 24.8359C20.3579 24.8359 25.7305 19.4634 25.7305 12.8359C25.7305 6.20852 20.3579 0.835937 13.7305 0.835937C7.10305 0.835937 1.73047 6.20852 1.73047 12.8359Z&#34; stroke=&#34;black&#34; stroke-width=&#34;1.5&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;/&gt;
&lt;path d=&#34;M18.2344 12.8359L9.23438 12.8359&#34; stroke=&#34;black&#34; stroke-width=&#34;1.5&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;/&gt;
&lt;path d=&#34;M13.7344 8.33594L13.7344 17.3359&#34; stroke=&#34;black&#34; stroke-width=&#34;1.5&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;/&gt;
&lt;/svg&gt;


    &lt;/span&gt;
  &lt;/button&gt;
  &lt;div class=&#34;collapse-content&#34; x-ref=&#34;content&#34; hidden=&#34;until-found&#34;&gt;
    &lt;div class=&#34;collapse-content__inner&#34; x-ref=&#34;content-inner&#34;&gt;&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Class&lt;/th&gt;
              &lt;th&gt;Method&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;Browser&lt;/td&gt;
              &lt;td&gt;closeContext&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Browser&lt;/td&gt;
              &lt;td&gt;context&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Browser&lt;/td&gt;
              &lt;td&gt;newContext&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Browser&lt;/td&gt;
              &lt;td&gt;newPage&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Browser&lt;/td&gt;
              &lt;td&gt;userAgent&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;BrowserContext&lt;/td&gt;
              &lt;td&gt;addCookies&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;BrowserContext&lt;/td&gt;
              &lt;td&gt;addInitScript&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;BrowserContext&lt;/td&gt;
              &lt;td&gt;browser&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;BrowserContext&lt;/td&gt;
              &lt;td&gt;clearCookies&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;BrowserContext&lt;/td&gt;
              &lt;td&gt;clearPermissions&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;BrowserContext&lt;/td&gt;
              &lt;td&gt;close&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;BrowserContext&lt;/td&gt;
              &lt;td&gt;cookies&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;BrowserContext&lt;/td&gt;
              &lt;td&gt;grantPermissions&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;BrowserContext&lt;/td&gt;
              &lt;td&gt;newPage&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;BrowserContext&lt;/td&gt;
              &lt;td&gt;setGeolocation&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;BrowserContext&lt;/td&gt;
              &lt;td&gt;setOffline&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;$&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;$$&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;boundingBox&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;check&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;contentFrame&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;dblclick&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;dispatchEvent&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;fill&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;focus&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;getAttribute&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;hover&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;innerHTML&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;innerText&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;inputValue&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;isChecked&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;isDisabled&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;isEditable&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;isEnabled&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;isHidden&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;isVisible&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;ownerFrame&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;press&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;screenshot&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;scrollIntoViewIfNeeded&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;selectOption&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;selectText&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;setInputFiles&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;tap&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;textContent&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;type&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;uncheck&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;waitForElementState&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;ElementHandle&lt;/td&gt;
              &lt;td&gt;waitForSelector&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;$&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;$$&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;check&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;content&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;dblclick&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;dispatchEvent&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;evaluate&amp;lt;R, Arg&amp;gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;evaluateHandle&amp;lt;R, Arg&amp;gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;fill&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;focus&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;frameElement&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;getAttribute&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;hover&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;innerHTML&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;innerText&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;inputValue&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;isChecked&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;isDisabled&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;isEditable&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;isEnabled&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;isHidden&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;isVisible&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;press&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;selectOption&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;setContent&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;setInputFiles&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;tap&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;textContent&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;title&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;type&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;uncheck&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;waitForLoadState&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;waitForSelector&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Frame&lt;/td&gt;
              &lt;td&gt;waitForTimeout&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;JSHandle&lt;/td&gt;
              &lt;td&gt;asElement&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;JSHandle&lt;/td&gt;
              &lt;td&gt;dispose&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;JSHandle&lt;/td&gt;
              &lt;td&gt;evaluate&amp;lt;R, Arg&amp;gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;JSHandle&lt;/td&gt;
              &lt;td&gt;evaluateHandle&amp;lt;R, Arg&amp;gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;JSHandle&lt;/td&gt;
              &lt;td&gt;getProperties&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;JSHandle&lt;/td&gt;
              &lt;td&gt;jsonValue&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Keyboard&lt;/td&gt;
              &lt;td&gt;down&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Keyboard&lt;/td&gt;
              &lt;td&gt;insertText&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Keyboard&lt;/td&gt;
              &lt;td&gt;press&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Keyboard&lt;/td&gt;
              &lt;td&gt;type&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Keyboard&lt;/td&gt;
              &lt;td&gt;up&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;check&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;clear&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;dblclick&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;dispatchEvent&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;fill&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;focus&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;getAttribute&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;hover&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;innerHTML&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;innerText&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;inputValue&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;isChecked&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;isDisabled&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;isEditable&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;isEnabled&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;isHidden&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;isVisible&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;press&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;selectOption&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;tap&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;textContent&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;type&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;uncheck&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Locator&lt;/td&gt;
              &lt;td&gt;waitFor&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Mouse&lt;/td&gt;
              &lt;td&gt;click&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Mouse&lt;/td&gt;
              &lt;td&gt;dblclick&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Mouse&lt;/td&gt;
              &lt;td&gt;down&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Mouse&lt;/td&gt;
              &lt;td&gt;move&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Mouse&lt;/td&gt;
              &lt;td&gt;up&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;$&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;$$&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;bringToFront&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;check&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;close&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;content&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;dblclick&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;dispatchEvent&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;emulateMedia&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;emulateVisionDeficiency&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;evaluate&amp;lt;R, Arg&amp;gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;evaluateHandle&amp;lt;R, Arg&amp;gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;fill&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;focus&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;getAttribute&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;hover&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;innerHTML&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;innerText&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;inputValue&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;isChecked&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;isDisabled&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;isEditable&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;isEnabled&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;isHidden&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;isVisible&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;on&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;opener&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;press&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;reload&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;screenshot&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;selectOption&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;setContent&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;setExtraHTTPHeaders&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;setInputFiles&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;setViewportSize&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;tap&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;textContent&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;throttleCPU&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;throttleNetwork&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;title&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;type&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;uncheck&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;viewportSize&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;waitForLoadState&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;waitForSelector&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Page&lt;/td&gt;
              &lt;td&gt;waitForTimeout&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Request&lt;/td&gt;
              &lt;td&gt;allHeaders&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Request&lt;/td&gt;
              &lt;td&gt;headerValue&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Request&lt;/td&gt;
              &lt;td&gt;headersArray&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Request&lt;/td&gt;
              &lt;td&gt;postData&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Request&lt;/td&gt;
              &lt;td&gt;resourceType&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Request&lt;/td&gt;
              &lt;td&gt;response&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Request&lt;/td&gt;
              &lt;td&gt;size&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Request&lt;/td&gt;
              &lt;td&gt;timing&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Response&lt;/td&gt;
              &lt;td&gt;allHeaders&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Response&lt;/td&gt;
              &lt;td&gt;body&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Response&lt;/td&gt;
              &lt;td&gt;headerValue&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Response&lt;/td&gt;
              &lt;td&gt;headerValues&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Response&lt;/td&gt;
              &lt;td&gt;headersArray&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Response&lt;/td&gt;
              &lt;td&gt;json&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Response&lt;/td&gt;
              &lt;td&gt;securityDetails&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Response&lt;/td&gt;
              &lt;td&gt;serverAddr&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Response&lt;/td&gt;
              &lt;td&gt;size&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Touchscreen&lt;/td&gt;
              &lt;td&gt;tap&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;h2 id=&#34;working-with-k6-check&#34;&gt;Working with k6 check&lt;/h2&gt;
&lt;p&gt;The k6 &lt;code&gt;check&lt;/code&gt; API will not &lt;code&gt;await&lt;/code&gt; promises, so calling a function that returns a &lt;code&gt;Promise&lt;/code&gt;, for example &lt;code&gt;locator.textContent()&lt;/code&gt;, inside one of the predicates will not work. Instead, you can work with &lt;a href=&#34;/docs/k6/latest/javascript-api/jslib/utils/check/&#34;&gt;the jslib.k6.io&amp;rsquo;s &lt;code&gt;check&lt;/code&gt; utility function&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For example, before:&lt;/p&gt;
&lt;!-- md-k6:skip --&gt;
&lt;!-- eslint-skip --&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;JavaScript&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-javascript&#34;&gt;check(page.locator(&amp;#39;h2&amp;#39;), {
  header: (lo) =&amp;gt; lo.textContent() == &amp;#39;Welcome, admin!&amp;#39;,
});&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;And now:&lt;/p&gt;
&lt;!-- md-k6:skip --&gt;
&lt;!-- eslint-skip --&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;JavaScript&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-javascript&#34;&gt;import { check } from &amp;#39;https://jslib.k6.io/k6-utils/1.5.0/index.js&amp;#39;;

// ...

await check(page.locator(&amp;#39;h2&amp;#39;), {
  header: async (lo) =&amp;gt; (await lo.textContent()) === &amp;#39;Welcome, admin!&amp;#39;,
});&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;groups&#34;&gt;Groups&lt;/h2&gt;
&lt;p&gt;A note on 
    &lt;a href=&#34;/docs/k6/v2.3.x/using-k6/tags-and-groups/#groups&#34;&gt;groups&lt;/a&gt;, they don&amp;rsquo;t work with async APIs either, there is no workaround as of yet. Here&amp;rsquo;s the &lt;a href=&#34;https://github.com/grafana/k6/issues/2728&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;GitHub issue&lt;/a&gt; that you can follow to keep up-to-date with relevant news on a group API that works with async APIs.&lt;/p&gt;
&lt;h2 id=&#34;migrating-from-k6-v045-or-below&#34;&gt;Migrating from k6 v0.45 or below&lt;/h2&gt;
&lt;p&gt;If you use k6 v0.45 or below, first review &lt;a href=&#34;/docs/k6/v0.51.x/migrating-to-k6-v0-46/&#34;&gt;how to migrate to v0.46&lt;/a&gt;. This guide details the breaking changes introduced in v0.46 for the &lt;code&gt;browser&lt;/code&gt; APIs and provides instructions on how to migrate to them.&lt;/p&gt;
&lt;h1 id=&#34;where-to-get-extra-help&#34;&gt;Where to get extra help&lt;/h1&gt;
&lt;p&gt;With the release of k6 &lt;code&gt;v0.52&lt;/code&gt;, you&amp;rsquo;ll also be able to find the latest type definitions and updates to the 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/&#34;&gt;k6 browser documentation&lt;/a&gt;. Refer to 
    &lt;a href=&#34;/docs/k6/v2.3.x/set-up/configure-k6-intellisense/&#34;&gt;Configure k6 IntelliSense&lt;/a&gt; for details on how to work with the type definition file in your project.&lt;/p&gt;
&lt;p&gt;For all the details, review the CHANGELOG for &lt;a href=&#34;https://github.com/grafana/k6/releases/tag/v0.52.0&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;k6 version 0.52&lt;/a&gt;. You can also ask questions in &lt;a href=&#34;https://community.grafana.com/c/grafana-k6/k6-browser/79&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;the community forum&lt;/a&gt; if you need help.&lt;/p&gt;
]]></content><description>&lt;h1 id="migrating-browser-scripts-to-k6-v052">Migrating browser scripts to k6 v0.52&lt;/h1>
&lt;p>This guide outlines the key changes you will need to make when moving your existing k6 experimental browser test scripts to the &lt;em>latest&lt;/em>
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-browser/">k6 browser module&lt;/a> version bundled with &lt;a href="https://github.com/grafana/k6/releases/tag/v0.52.0" target="_blank" rel="noopener noreferrer">k6 0.52&lt;/a>.&lt;/p></description></item></channel></rss>