<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>BrowserContext on Grafana Labs</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/</link><description>Recent content in BrowserContext on Grafana Labs</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/index.xml" rel="self" type="application/rss+xml"/><item><title>addCookies()</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/addcookies/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/addcookies/</guid><content><![CDATA[&lt;h1 id=&#34;addcookies&#34;&gt;addCookies()&lt;/h1&gt;
&lt;p&gt;Adds a list of 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/cookie/&#34;&gt;cookies&lt;/a&gt; into the 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/&#34;&gt;browser context&lt;/a&gt;. All pages within this 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/&#34;&gt;browser context&lt;/a&gt; will have these 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/cookie/&#34;&gt;cookies&lt;/a&gt; set.&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;If a 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/cookie/&#34;&gt;cookie&lt;/a&gt;&amp;rsquo;s &lt;code&gt;url&lt;/code&gt; property is not provided, both &lt;code&gt;domain&lt;/code&gt; and &lt;code&gt;path&lt;/code&gt; properties must be specified.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;h3 id=&#34;returns&#34;&gt;Returns&lt;/h3&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;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;&lt;code&gt;Promise&amp;lt;void&amp;gt;&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;A Promise that fulfills when the 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/cookie/&#34;&gt;cookies&lt;/a&gt; have been added to the 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/&#34;&gt;browser context&lt;/a&gt;.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;example&#34;&gt;Example&lt;/h3&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: {
    browser: {
      executor: &amp;#39;shared-iterations&amp;#39;,
      options: {
        browser: {
          type: &amp;#39;chromium&amp;#39;,
        },
      },
    },
  },
};

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

  try {
    const unixTimeSinceEpoch = Math.round(new Date() / 1000);
    const day = 60 * 60 * 24;
    const dayAfter = unixTimeSinceEpoch &amp;#43; day;
    const dayBefore = unixTimeSinceEpoch - day;

    await context.addCookies([
      // this cookie expires at the end of the session
      {
        name: &amp;#39;testcookie&amp;#39;,
        value: &amp;#39;1&amp;#39;,
        sameSite: &amp;#39;Strict&amp;#39;,
        domain: &amp;#39;httpbin.org&amp;#39;,
        path: &amp;#39;/&amp;#39;,
        httpOnly: true,
        secure: true,
      },
      // this cookie expires in a day
      {
        name: &amp;#39;testcookie2&amp;#39;,
        value: &amp;#39;2&amp;#39;,
        sameSite: &amp;#39;Lax&amp;#39;,
        domain: &amp;#39;httpbin.org&amp;#39;,
        path: &amp;#39;/&amp;#39;,
        expires: dayAfter,
      },
      // this cookie expires in the past, so it will be removed.
      {
        name: &amp;#39;testcookie3&amp;#39;,
        value: &amp;#39;3&amp;#39;,
        sameSite: &amp;#39;Lax&amp;#39;,
        domain: &amp;#39;httpbin.org&amp;#39;,
        path: &amp;#39;/&amp;#39;,
        expires: dayBefore,
      },
    ]);

    const response = await page.goto(&amp;#39;https://httpbin.org/cookies&amp;#39;, {
      waitUntil: &amp;#39;networkidle&amp;#39;,
    });
    console.log(response.json());
    // prints:
    // {&amp;#34;cookies&amp;#34;:{&amp;#34;testcookie&amp;#34;:&amp;#34;1&amp;#34;,&amp;#34;testcookie2&amp;#34;:&amp;#34;2&amp;#34;}}
  } finally {
    await page.close();
  }
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="addcookies">addCookies()&lt;/h1>
&lt;p>Adds a list of
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/cookie/">cookies&lt;/a> into the
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/">browser context&lt;/a>. All pages within this
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/">browser context&lt;/a> will have these
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/cookie/">cookies&lt;/a> set.&lt;/p>
&lt;div class="admonition admonition-note">&lt;blockquote>&lt;p class="title text-uppercase">Note&lt;/p>&lt;p>If a
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/cookie/">cookie&lt;/a>&amp;rsquo;s &lt;code>url&lt;/code> property is not provided, both &lt;code>domain&lt;/code> and &lt;code>path&lt;/code> properties must be specified.&lt;/p></description></item><item><title>addInitScript()</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/addinitscript/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/addinitscript/</guid><content><![CDATA[&lt;h1 id=&#34;addinitscript&#34;&gt;addInitScript()&lt;/h1&gt;
&lt;p&gt;Adds a script which will be evaluated in one of the following scenarios:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Whenever a 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/&#34;&gt;page&lt;/a&gt; is created in the 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/&#34;&gt;browser context&lt;/a&gt; or is navigated.&lt;/li&gt;
&lt;li&gt;Whenever a child 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/&#34;&gt;frame&lt;/a&gt; is attached or navigated in any 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/&#34;&gt;page&lt;/a&gt; in the 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/&#34;&gt;browser context&lt;/a&gt;. In this case, the script is evaluated in the context of the newly attached 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/frame/&#34;&gt;frame&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The script is evaluated after the document is created but before any of its scripts are run. This is useful to amend the JavaScript environment, for example, to override &lt;code&gt;Math.random&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&#34;returns&#34;&gt;Returns&lt;/h3&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;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;&lt;code&gt;Promise&amp;lt;void&amp;gt;&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;A Promise that fulfills when the script has been added to the 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/&#34;&gt;browser context&lt;/a&gt;.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;example&#34;&gt;Example&lt;/h3&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 { check } from &amp;#39;https://jslib.k6.io/k6-utils/1.5.0/index.js&amp;#39;;

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

export default async function () {
  const browserContext = await browser.newContext();

  // This will execute and override the existing implementation of Math.random.
  await browserContext.addInitScript(&amp;#39;Math.random = function(){return 0}&amp;#39;);

  const page = await browserContext.newPage();

  // In this example we are going to set the content manually, so we first
  // navigate to about:blank which will execute the init script, before setting
  // the content on the page.
  await page.goto(&amp;#39;about:blank&amp;#39;);

  await page.setContent(`
  &amp;lt;html&amp;gt;
    &amp;lt;head&amp;gt;&amp;lt;/head&amp;gt;
    &amp;lt;body&amp;gt;
      &amp;lt;div id=&amp;#34;random&amp;#34;&amp;gt;waiting...&amp;lt;/div&amp;gt;
    &amp;lt;/body&amp;gt;
    &amp;lt;script&amp;gt;
        document.getElementById(&amp;#39;random&amp;#39;).textContent = Math.random();
    &amp;lt;/script&amp;gt;
  &amp;lt;/html&amp;gt;`);

  await check(page.locator(&amp;#39;#random&amp;#39;), {
    &amp;#39;is zero&amp;#39;: async random =&amp;gt; await random.textContent() == &amp;#39;0&amp;#39;
  });

  await page.close();
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="addinitscript">addInitScript()&lt;/h1>
&lt;p>Adds a script which will be evaluated in one of the following scenarios:&lt;/p>
&lt;ul>
&lt;li>Whenever a
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-browser/page/">page&lt;/a> is created in the
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/">browser context&lt;/a> or is navigated.&lt;/li>
&lt;li>Whenever a child
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-browser/frame/">frame&lt;/a> is attached or navigated in any
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-browser/page/">page&lt;/a> in the
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/">browser context&lt;/a>. In this case, the script is evaluated in the context of the newly attached
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-browser/frame/">frame&lt;/a>.&lt;/li>
&lt;/ul>
&lt;p>The script is evaluated after the document is created but before any of its scripts are run. This is useful to amend the JavaScript environment, for example, to override &lt;code>Math.random&lt;/code>.&lt;/p></description></item><item><title>clearCookies()</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/clearcookies/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/clearcookies/</guid><content><![CDATA[&lt;h1 id=&#34;clearcookies&#34;&gt;clearCookies()&lt;/h1&gt;
&lt;p&gt;Clears the 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/&#34;&gt;browser context&lt;/a&gt;&amp;rsquo;s cookies.&lt;/p&gt;
&lt;h3 id=&#34;returns&#34;&gt;Returns&lt;/h3&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;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;&lt;code&gt;Promise&amp;lt;void&amp;gt;&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;A Promise that fulfills when the cookies have been cleared from the 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/&#34;&gt;browser context&lt;/a&gt;.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;example&#34;&gt;Example&lt;/h3&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: {
    browser: {
      executor: &amp;#39;shared-iterations&amp;#39;,
      options: {
        browser: {
          type: &amp;#39;chromium&amp;#39;,
        },
      },
    },
  },
};

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

  await page.goto(&amp;#39;https://httpbin.org/cookies/set?testcookie=testcookievalue&amp;#39;);
  let cookies = await context.cookies();
  console.log(cookies.length); // prints: 1

  await context.clearCookies();
  cookies = await context.cookies();
  console.log(cookies.length); // prints: 0
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="clearcookies">clearCookies()&lt;/h1>
&lt;p>Clears the
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/">browser context&lt;/a>&amp;rsquo;s cookies.&lt;/p>
&lt;h3 id="returns">Returns&lt;/h3>
&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>Type&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>Promise&amp;lt;void&amp;gt;&lt;/code>&lt;/td>
&lt;td>A Promise that fulfills when the cookies have been cleared from the
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/">browser context&lt;/a>.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;/section>&lt;h3 id="example">Example&lt;/h3>
&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">import { browser } from &amp;#39;k6/browser&amp;#39;;
export const options = {
scenarios: {
browser: {
executor: &amp;#39;shared-iterations&amp;#39;,
options: {
browser: {
type: &amp;#39;chromium&amp;#39;,
},
},
},
},
};
export default async function () {
const context = await browser.newContext();
const page = await context.newPage();
await page.goto(&amp;#39;https://httpbin.org/cookies/set?testcookie=testcookievalue&amp;#39;);
let cookies = await context.cookies();
console.log(cookies.length); // prints: 1
await context.clearCookies();
cookies = await context.cookies();
console.log(cookies.length); // prints: 0
}&lt;/code>&lt;/pre>
&lt;/div>
&lt;/div></description></item><item><title>clearPermissions()</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/clearpermissions/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/clearpermissions/</guid><content><![CDATA[&lt;h1 id=&#34;clearpermissions&#34;&gt;clearPermissions()&lt;/h1&gt;
&lt;p&gt;Clears all permission overrides for the 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/&#34;&gt;browser context&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;returns&#34;&gt;Returns&lt;/h3&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;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;&lt;code&gt;Promise&amp;lt;void&amp;gt;&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;A Promise that fulfills when the permissions have been cleared from the 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/&#34;&gt;browser context&lt;/a&gt;.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;example&#34;&gt;Example&lt;/h3&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: {
    browser: {
      executor: &amp;#39;shared-iterations&amp;#39;,
      options: {
        browser: {
          type: &amp;#39;chromium&amp;#39;,
        },
      },
    },
  },
};

export default async function () {
  const context = await browser.newContext();
  await context.grantPermissions([&amp;#39;clipboard-read&amp;#39;]);
  // do stuff ...
  await context.clearPermissions();
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="clearpermissions">clearPermissions()&lt;/h1>
&lt;p>Clears all permission overrides for the
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/">browser context&lt;/a>.&lt;/p>
&lt;h3 id="returns">Returns&lt;/h3>
&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>Type&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>Promise&amp;lt;void&amp;gt;&lt;/code>&lt;/td>
&lt;td>A Promise that fulfills when the permissions have been cleared from the
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/">browser context&lt;/a>.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;/section>&lt;h3 id="example">Example&lt;/h3>
&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">import { browser } from &amp;#39;k6/browser&amp;#39;;
export const options = {
scenarios: {
browser: {
executor: &amp;#39;shared-iterations&amp;#39;,
options: {
browser: {
type: &amp;#39;chromium&amp;#39;,
},
},
},
},
};
export default async function () {
const context = await browser.newContext();
await context.grantPermissions([&amp;#39;clipboard-read&amp;#39;]);
// do stuff ...
await context.clearPermissions();
}&lt;/code>&lt;/pre>
&lt;/div>
&lt;/div></description></item><item><title>close()</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/close/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/close/</guid><content><![CDATA[&lt;h1 id=&#34;close&#34;&gt;close()&lt;/h1&gt;
&lt;p&gt;Close the 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/&#34;&gt;browser context&lt;/a&gt; and all its 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/&#34;&gt;pages&lt;/a&gt;. The 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/&#34;&gt;browser context&lt;/a&gt; is unusable after this call and a new one must be created. This is typically called to cleanup before ending the test.&lt;/p&gt;
&lt;h3 id=&#34;returns&#34;&gt;Returns&lt;/h3&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;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;&lt;code&gt;Promise&amp;lt;void&amp;gt;&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;A Promise that fulfills when the 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/&#34;&gt;browser context&lt;/a&gt; and all its 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/&#34;&gt;page&lt;/a&gt;s have been closed.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;example&#34;&gt;Example&lt;/h3&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: {
    browser: {
      executor: &amp;#39;shared-iterations&amp;#39;,
      options: {
        browser: {
          type: &amp;#39;chromium&amp;#39;,
        },
      },
    },
  },
};

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

  await context.close();
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="close">close()&lt;/h1>
&lt;p>Close the
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/">browser context&lt;/a> and all its
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-browser/page/">pages&lt;/a>. The
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/">browser context&lt;/a> is unusable after this call and a new one must be created. This is typically called to cleanup before ending the test.&lt;/p></description></item><item><title>Cookie</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/cookie/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/cookie/</guid><content><![CDATA[&lt;h1 id=&#34;cookie&#34;&gt;Cookie&lt;/h1&gt;
&lt;p&gt;Cookie class represents a cookie in the 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/&#34;&gt;BrowserContext&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;See the &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;HTTP Cookies documentation&lt;/a&gt; on the Mozilla website for more details about cookies.&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;Property&lt;/th&gt;
              &lt;th&gt;Type&lt;/th&gt;
              &lt;th&gt;Default&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;name&lt;/td&gt;
              &lt;td&gt;string&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;The cookie&amp;rsquo;s name. Required.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;value&lt;/td&gt;
              &lt;td&gt;string&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;The cookie&amp;rsquo;s value. Required.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;domain&lt;/td&gt;
              &lt;td&gt;string&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;The cookie&amp;rsquo;s domain.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;path&lt;/td&gt;
              &lt;td&gt;string&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;&#39;/&#39;&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;The cookie&amp;rsquo;s path.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;url&lt;/td&gt;
              &lt;td&gt;string&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;The cookie&amp;rsquo;s URL.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;expires&lt;/td&gt;
              &lt;td&gt;number&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;-1&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;The cookie&amp;rsquo;s expiration date as the number of seconds since the UNIX epoch. &lt;code&gt;-1&lt;/code&gt; means a session cookie.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;httpOnly&lt;/td&gt;
              &lt;td&gt;bool&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;A cookie is inaccessible to the JavaScript &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;document.cookie&lt;/a&gt; API when this property is &lt;code&gt;true&lt;/code&gt;.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;secure&lt;/td&gt;
              &lt;td&gt;bool&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;The cookie&amp;rsquo;s secure flag.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;sameSite&lt;/td&gt;
              &lt;td&gt;string&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;&#39;Lax&#39;&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;The cookie&amp;rsquo;s same site flag. It can be one of &lt;code&gt;&#39;Strict&#39;&lt;/code&gt;, &lt;code&gt;&#39;Lax&#39;&lt;/code&gt;, and &lt;code&gt;&#39;None&#39;&lt;/code&gt;.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;]]></content><description>&lt;h1 id="cookie">Cookie&lt;/h1>
&lt;p>Cookie class represents a cookie in the
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/">BrowserContext&lt;/a>.&lt;/p>
&lt;p>See the &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies" target="_blank" rel="noopener noreferrer">HTTP Cookies documentation&lt;/a> on the Mozilla website for more details about cookies.&lt;/p>
&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>Property&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Default&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>name&lt;/td>
&lt;td>string&lt;/td>
&lt;td>&lt;code>&amp;quot;&amp;quot;&lt;/code>&lt;/td>
&lt;td>The cookie&amp;rsquo;s name. Required.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>value&lt;/td>
&lt;td>string&lt;/td>
&lt;td>&lt;code>&amp;quot;&amp;quot;&lt;/code>&lt;/td>
&lt;td>The cookie&amp;rsquo;s value. Required.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>domain&lt;/td>
&lt;td>string&lt;/td>
&lt;td>&lt;code>&amp;quot;&amp;quot;&lt;/code>&lt;/td>
&lt;td>The cookie&amp;rsquo;s domain.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>path&lt;/td>
&lt;td>string&lt;/td>
&lt;td>&lt;code>'/'&lt;/code>&lt;/td>
&lt;td>The cookie&amp;rsquo;s path.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>url&lt;/td>
&lt;td>string&lt;/td>
&lt;td>&lt;code>&amp;quot;&amp;quot;&lt;/code>&lt;/td>
&lt;td>The cookie&amp;rsquo;s URL.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>expires&lt;/td>
&lt;td>number&lt;/td>
&lt;td>&lt;code>-1&lt;/code>&lt;/td>
&lt;td>The cookie&amp;rsquo;s expiration date as the number of seconds since the UNIX epoch. &lt;code>-1&lt;/code> means a session cookie.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>httpOnly&lt;/td>
&lt;td>bool&lt;/td>
&lt;td>&lt;code>false&lt;/code>&lt;/td>
&lt;td>A cookie is inaccessible to the JavaScript &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie" target="_blank" rel="noopener noreferrer">document.cookie&lt;/a> API when this property is &lt;code>true&lt;/code>.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>secure&lt;/td>
&lt;td>bool&lt;/td>
&lt;td>&lt;code>false&lt;/code>&lt;/td>
&lt;td>The cookie&amp;rsquo;s secure flag.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>sameSite&lt;/td>
&lt;td>string&lt;/td>
&lt;td>&lt;code>'Lax'&lt;/code>&lt;/td>
&lt;td>The cookie&amp;rsquo;s same site flag. It can be one of &lt;code>'Strict'&lt;/code>, &lt;code>'Lax'&lt;/code>, and &lt;code>'None'&lt;/code>.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;/section></description></item><item><title>cookies([urls])</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/cookies/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/cookies/</guid><content><![CDATA[&lt;h1 id=&#34;cookiesurls&#34;&gt;cookies([urls])&lt;/h1&gt;
&lt;p&gt;Returns a list of 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/cookie/&#34;&gt;cookies&lt;/a&gt; from the 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/&#34;&gt;browser context&lt;/a&gt; filtered by the provided &lt;code&gt;urls&lt;/code&gt;. If no &lt;code&gt;urls&lt;/code&gt; are provided, all cookies are returned.&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;Parameter&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;urls&lt;/td&gt;
              &lt;td&gt;array&lt;/td&gt;
              &lt;td&gt;A string array of URLs to filter the 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/cookie/&#34;&gt;cookies&lt;/a&gt; in the 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/&#34;&gt;browser context&lt;/a&gt;.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;returns&#34;&gt;Returns&lt;/h3&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;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;&lt;code&gt;Promise&amp;lt;Array&amp;lt;Cookie&amp;gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;A Promise that fulfills with an array of 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/cookie/&#34;&gt;cookies&lt;/a&gt;.&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;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/cookie/&#34;&gt;Cookies&lt;/a&gt; can be added with 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/addcookies/&#34;&gt;BrowserContext.addCookies&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;h3 id=&#34;example&#34;&gt;Example&lt;/h3&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;,
        },
      },
    },
  },
};

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

  try {
    // get cookies from the browser context
    let cookies = await context.cookies();
    console.log(&amp;#39;initial cookies length:&amp;#39;, cookies.length); // prints 0

    // let&amp;#39;s add more cookies to filter by urls
    await context.addCookies([
      { name: &amp;#39;foo&amp;#39;, value: &amp;#39;foovalue&amp;#39;, sameSite: &amp;#39;Strict&amp;#39;, url: &amp;#39;http://foo.com&amp;#39; },
      { name: &amp;#39;bar&amp;#39;, value: &amp;#39;barvalue&amp;#39;, sameSite: &amp;#39;Lax&amp;#39;, url: &amp;#39;https://bar.com&amp;#39; },
      { name: &amp;#39;baz&amp;#39;, value: &amp;#39;bazvalue&amp;#39;, sameSite: &amp;#39;Lax&amp;#39;, url: &amp;#39;https://baz.com&amp;#39; },
    ]);

    // get all cookies
    cookies = await context.cookies();
    console.log(&amp;#39;filtered cookies length:&amp;#39;, cookies.length); // prints 3

    // get cookies filtered by urls
    cookies = await context.cookies(&amp;#39;http://foo.com&amp;#39;, &amp;#39;https://baz.com&amp;#39;);
    console.log(&amp;#39;filtered cookies length:&amp;#39;, cookies.length); // prints 2

    // the first filtered cookie
    console.log(&amp;#34;1st cookie&amp;#39;s name :&amp;#34;, cookies[0].name); // prints foo
    console.log(&amp;#34;1st cookie&amp;#39;s value:&amp;#34;, cookies[0].value); // prints foovalue
    // the first filtered cookie
    console.log(&amp;#34;2nd cookie&amp;#39;s name :&amp;#34;, cookies[1].name); // prints baz
    console.log(&amp;#34;2nd cookie&amp;#39;s value:&amp;#34;, cookies[1].value); // prints bazvalue
  } finally {
    await page.close();
  }
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="cookiesurls">cookies([urls])&lt;/h1>
&lt;p>Returns a list of
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/cookie/">cookies&lt;/a> from the
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/">browser context&lt;/a> filtered by the provided &lt;code>urls&lt;/code>. If no &lt;code>urls&lt;/code> are provided, all cookies are returned.&lt;/p>
&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>Parameter&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>urls&lt;/td>
&lt;td>array&lt;/td>
&lt;td>A string array of URLs to filter the
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/cookie/">cookies&lt;/a> in the
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/">browser context&lt;/a>.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;/section>&lt;h3 id="returns">Returns&lt;/h3>
&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>Type&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>Promise&amp;lt;Array&amp;lt;Cookie&amp;gt;&amp;gt;&lt;/code>&lt;/td>
&lt;td>A Promise that fulfills with an array of
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/cookie/">cookies&lt;/a>.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;/section>
&lt;div class="admonition admonition-note">&lt;blockquote>&lt;p class="title text-uppercase">Note&lt;/p></description></item><item><title>grantPermissions(permissions[, options])</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/grantpermissions/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/grantpermissions/</guid><content><![CDATA[&lt;h1 id=&#34;grantpermissionspermissions-options&#34;&gt;grantPermissions(permissions[, options])&lt;/h1&gt;
&lt;p&gt;Grants specified permissions to the 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/&#34;&gt;browser context&lt;/a&gt;. Only grants corresponding permissions to the given origin if specified.&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;Parameter&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;permissions&lt;/td&gt;
              &lt;td&gt;array&lt;/td&gt;
              &lt;td&gt;A string array of permissions to grant. A permission can be one of the following values: &lt;code&gt;&#39;geolocation&#39;&lt;/code&gt;, &lt;code&gt;&#39;midi&#39;&lt;/code&gt;, &lt;code&gt;&#39;midi-sysex&#39;&lt;/code&gt; (system-exclusive midi), &lt;code&gt;&#39;notifications&#39;&lt;/code&gt;, &lt;code&gt;&#39;camera&#39;&lt;/code&gt;, &lt;code&gt;&#39;microphone&#39;&lt;/code&gt;, &lt;code&gt;&#39;background-sync&#39;&lt;/code&gt;, &lt;code&gt;&#39;ambient-light-sensor&#39;&lt;/code&gt;, &lt;code&gt;&#39;accelerometer&#39;&lt;/code&gt;, &lt;code&gt;&#39;gyroscope&#39;&lt;/code&gt;, &lt;code&gt;&#39;magnetometer&#39;&lt;/code&gt;, &lt;code&gt;&#39;accessibility-events&#39;&lt;/code&gt;, &lt;code&gt;&#39;clipboard-read&#39;&lt;/code&gt;, &lt;code&gt;&#39;clipboard-write&#39;&lt;/code&gt;, &lt;code&gt;&#39;payment-handler&#39;&lt;/code&gt;.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;options&lt;/td&gt;
              &lt;td&gt;object&lt;/td&gt;
              &lt;td&gt;Optional.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;options.origin&lt;/td&gt;
              &lt;td&gt;string&lt;/td&gt;
              &lt;td&gt;The &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Glossary/Origin&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;origin&lt;/a&gt; to grant permissions to, e.g. &lt;code&gt;&#39;https://example.com&#39;&lt;/code&gt;.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;returns&#34;&gt;Returns&lt;/h3&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;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;&lt;code&gt;Promise&amp;lt;void&amp;gt;&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;A Promise that fulfills when the permissions have been granted.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;example&#34;&gt;Example&lt;/h3&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: {
    browser: {
      executor: &amp;#39;shared-iterations&amp;#39;,
      options: {
        browser: {
          type: &amp;#39;chromium&amp;#39;,
        },
      },
    },
  },
};

export default async function () {
  const context = await browser.newContext();
  await context.grantPermissions([&amp;#39;clipboard-read&amp;#39;, &amp;#39;clipboard-write&amp;#39;], {
    origin: &amp;#39;https://example.com/&amp;#39;,
  });
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="grantpermissionspermissions-options">grantPermissions(permissions[, options])&lt;/h1>
&lt;p>Grants specified permissions to the
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/">browser context&lt;/a>. Only grants corresponding permissions to the given origin if specified.&lt;/p>
&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>Parameter&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>permissions&lt;/td>
&lt;td>array&lt;/td>
&lt;td>A string array of permissions to grant. A permission can be one of the following values: &lt;code>'geolocation'&lt;/code>, &lt;code>'midi'&lt;/code>, &lt;code>'midi-sysex'&lt;/code> (system-exclusive midi), &lt;code>'notifications'&lt;/code>, &lt;code>'camera'&lt;/code>, &lt;code>'microphone'&lt;/code>, &lt;code>'background-sync'&lt;/code>, &lt;code>'ambient-light-sensor'&lt;/code>, &lt;code>'accelerometer'&lt;/code>, &lt;code>'gyroscope'&lt;/code>, &lt;code>'magnetometer'&lt;/code>, &lt;code>'accessibility-events'&lt;/code>, &lt;code>'clipboard-read'&lt;/code>, &lt;code>'clipboard-write'&lt;/code>, &lt;code>'payment-handler'&lt;/code>.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>options&lt;/td>
&lt;td>object&lt;/td>
&lt;td>Optional.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>options.origin&lt;/td>
&lt;td>string&lt;/td>
&lt;td>The &lt;a href="https://developer.mozilla.org/en-US/docs/Glossary/Origin" target="_blank" rel="noopener noreferrer">origin&lt;/a> to grant permissions to, e.g. &lt;code>'https://example.com'&lt;/code>.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;/section>&lt;h3 id="returns">Returns&lt;/h3>
&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>Type&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>Promise&amp;lt;void&amp;gt;&lt;/code>&lt;/td>
&lt;td>A Promise that fulfills when the permissions have been granted.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;/section>&lt;h3 id="example">Example&lt;/h3>
&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">import { browser } from &amp;#39;k6/browser&amp;#39;;
export const options = {
scenarios: {
browser: {
executor: &amp;#39;shared-iterations&amp;#39;,
options: {
browser: {
type: &amp;#39;chromium&amp;#39;,
},
},
},
},
};
export default async function () {
const context = await browser.newContext();
await context.grantPermissions([&amp;#39;clipboard-read&amp;#39;, &amp;#39;clipboard-write&amp;#39;], {
origin: &amp;#39;https://example.com/&amp;#39;,
});
}&lt;/code>&lt;/pre>
&lt;/div>
&lt;/div></description></item><item><title>newPage()</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/newpage/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/newpage/</guid><content><![CDATA[&lt;h1 id=&#34;newpage&#34;&gt;newPage()&lt;/h1&gt;
&lt;p&gt;Uses the 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/&#34;&gt;browser context&lt;/a&gt; to create and return a new 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/&#34;&gt;page&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;returns&#34;&gt;Returns&lt;/h3&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;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;&lt;code&gt;Promise&amp;lt;Page&amp;gt;&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;A Promise that fulfills with a new 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/&#34;&gt;page&lt;/a&gt; object.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;example&#34;&gt;Example&lt;/h3&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 context = await browser.newContext();
  const page = await context.newPage();

  try {
    await page.goto(&amp;#39;https://test.k6.io/browser.php&amp;#39;);
  } finally {
    await page.close();
  }
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="newpage">newPage()&lt;/h1>
&lt;p>Uses the
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/">browser context&lt;/a> to create and return a new
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-browser/page/">page&lt;/a>.&lt;/p>
&lt;h3 id="returns">Returns&lt;/h3>
&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>Type&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>Promise&amp;lt;Page&amp;gt;&lt;/code>&lt;/td>
&lt;td>A Promise that fulfills with a new
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-browser/page/">page&lt;/a> object.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;/section>&lt;h3 id="example">Example&lt;/h3>
&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">import { browser } from &amp;#39;k6/browser&amp;#39;;
export default async function () {
const context = await browser.newContext();
const page = await context.newPage();
try {
await page.goto(&amp;#39;https://test.k6.io/browser.php&amp;#39;);
} finally {
await page.close();
}
}&lt;/code>&lt;/pre>
&lt;/div>
&lt;/div></description></item><item><title>pages()</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/pages/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/pages/</guid><content><![CDATA[&lt;h1 id=&#34;pages&#34;&gt;pages()&lt;/h1&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;This feature has &lt;strong&gt;known issues&lt;/strong&gt;. For details, refer to
&lt;a href=&#34;https://github.com/grafana/xk6-browser/issues/444&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;#444&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;Returns all open 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/&#34;&gt;Page&lt;/a&gt;s in the &lt;code&gt;BrowserContext&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&#34;returns&#34;&gt;Returns&lt;/h3&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;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;&lt;code&gt;Array&amp;lt;Page&amp;gt;&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;An array of 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/&#34;&gt;page&lt;/a&gt; objects.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;example&#34;&gt;Example&lt;/h3&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: {
    browser: {
      executor: &amp;#39;shared-iterations&amp;#39;,
      options: {
        browser: {
          type: &amp;#39;chromium&amp;#39;,
        },
      },
    },
  },
};

export default async function () {
  const context = await browser.newContext();
  await context.newPage();
  const pages = context.pages();
  console.log(pages.length); // 1
  await context.close();
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="pages">pages()&lt;/h1>
&lt;div class="admonition admonition-caution">&lt;blockquote>&lt;p class="title text-uppercase">Caution&lt;/p>&lt;p>This feature has &lt;strong>known issues&lt;/strong>. For details, refer to
&lt;a href="https://github.com/grafana/xk6-browser/issues/444" target="_blank" rel="noopener noreferrer">#444&lt;/a>.&lt;/p>&lt;/blockquote>&lt;/div>
&lt;p>Returns all open
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-browser/page/">Page&lt;/a>s in the &lt;code>BrowserContext&lt;/code>.&lt;/p>
&lt;h3 id="returns">Returns&lt;/h3>
&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>Type&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>Array&amp;lt;Page&amp;gt;&lt;/code>&lt;/td>
&lt;td>An array of
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-browser/page/">page&lt;/a> objects.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;/section>&lt;h3 id="example">Example&lt;/h3>
&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">import { browser } from &amp;#39;k6/browser&amp;#39;;
export const options = {
scenarios: {
browser: {
executor: &amp;#39;shared-iterations&amp;#39;,
options: {
browser: {
type: &amp;#39;chromium&amp;#39;,
},
},
},
},
};
export default async function () {
const context = await browser.newContext();
await context.newPage();
const pages = context.pages();
console.log(pages.length); // 1
await context.close();
}&lt;/code>&lt;/pre>
&lt;/div>
&lt;/div></description></item><item><title>setDefaultNavigationTimeout(timeout)</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/setdefaultnavigationtimeout/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/setdefaultnavigationtimeout/</guid><content><![CDATA[&lt;h1 id=&#34;setdefaultnavigationtimeouttimeout&#34;&gt;setDefaultNavigationTimeout(timeout)&lt;/h1&gt;
&lt;p&gt;Sets the default maximum navigation timeout for 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/goto/&#34;&gt;Page.goto()&lt;/a&gt;.&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;Parameter&lt;/th&gt;
              &lt;th&gt;Type&lt;/th&gt;
              &lt;th&gt;Default&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;timeout&lt;/td&gt;
              &lt;td&gt;number&lt;/td&gt;
              &lt;td&gt;Dependent on the action.&lt;/td&gt;
              &lt;td&gt;The timeout in milliseconds.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;example&#34;&gt;Example&lt;/h3&gt;
&lt;!-- md-k6:nofail --&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: {
    browser: {
      executor: &amp;#39;shared-iterations&amp;#39;,
      options: {
        browser: {
          type: &amp;#39;chromium&amp;#39;,
        },
      },
    },
  },
};

export default async function () {
  const context = await browser.newContext();
  const page = await context.newPage();
  context.setDefaultNavigationTimeout(1000); // 1s

  try {
    await page.goto(&amp;#39;https://quickpizza.grafana.com/api/delay/5&amp;#39;);
  } finally {
    await page.close();
  }
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="setdefaultnavigationtimeouttimeout">setDefaultNavigationTimeout(timeout)&lt;/h1>
&lt;p>Sets the default maximum navigation timeout for
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-browser/page/goto/">Page.goto()&lt;/a>.&lt;/p>
&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>Parameter&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Default&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>timeout&lt;/td>
&lt;td>number&lt;/td>
&lt;td>Dependent on the action.&lt;/td>
&lt;td>The timeout in milliseconds.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;/section>&lt;h3 id="example">Example&lt;/h3>
&lt;!-- md-k6:nofail -->
&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">import { browser } from &amp;#39;k6/browser&amp;#39;;
export const options = {
scenarios: {
browser: {
executor: &amp;#39;shared-iterations&amp;#39;,
options: {
browser: {
type: &amp;#39;chromium&amp;#39;,
},
},
},
},
};
export default async function () {
const context = await browser.newContext();
const page = await context.newPage();
context.setDefaultNavigationTimeout(1000); // 1s
try {
await page.goto(&amp;#39;https://quickpizza.grafana.com/api/delay/5&amp;#39;);
} finally {
await page.close();
}
}&lt;/code>&lt;/pre>
&lt;/div>
&lt;/div></description></item><item><title>setDefaultTimeout(timeout)</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/setdefaulttimeout/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/setdefaulttimeout/</guid><content><![CDATA[&lt;h1 id=&#34;setdefaulttimeouttimeout&#34;&gt;setDefaultTimeout(timeout)&lt;/h1&gt;
&lt;p&gt;Sets the default maximum timeout for all methods accepting a &lt;code&gt;timeout&lt;/code&gt; option in milliseconds.&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;Parameter&lt;/th&gt;
              &lt;th&gt;Type&lt;/th&gt;
              &lt;th&gt;Default&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;timeout&lt;/td&gt;
              &lt;td&gt;number&lt;/td&gt;
              &lt;td&gt;Dependent on the action.&lt;/td&gt;
              &lt;td&gt;The timeout in milliseconds.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;example&#34;&gt;Example&lt;/h3&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: {
    browser: {
      executor: &amp;#39;shared-iterations&amp;#39;,
      options: {
        browser: {
          type: &amp;#39;chromium&amp;#39;,
        },
      },
    },
  },
};

export default async function () {
  const context = await browser.newContext();
  context.setDefaultTimeout(1000); // 1s
  const page = await context.newPage();
  await page.click(&amp;#39;h2&amp;#39;); // times out
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="setdefaulttimeouttimeout">setDefaultTimeout(timeout)&lt;/h1>
&lt;p>Sets the default maximum timeout for all methods accepting a &lt;code>timeout&lt;/code> option in milliseconds.&lt;/p>
&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>Parameter&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Default&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>timeout&lt;/td>
&lt;td>number&lt;/td>
&lt;td>Dependent on the action.&lt;/td>
&lt;td>The timeout in milliseconds.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;/section>&lt;h3 id="example">Example&lt;/h3>
&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">import { browser } from &amp;#39;k6/browser&amp;#39;;
export const options = {
scenarios: {
browser: {
executor: &amp;#39;shared-iterations&amp;#39;,
options: {
browser: {
type: &amp;#39;chromium&amp;#39;,
},
},
},
},
};
export default async function () {
const context = await browser.newContext();
context.setDefaultTimeout(1000); // 1s
const page = await context.newPage();
await page.click(&amp;#39;h2&amp;#39;); // times out
}&lt;/code>&lt;/pre>
&lt;/div>
&lt;/div></description></item><item><title>setGeolocation(geolocation)</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/setgeolocation/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/setgeolocation/</guid><content><![CDATA[&lt;h1 id=&#34;setgeolocationgeolocation&#34;&gt;setGeolocation(geolocation)&lt;/h1&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;This feature has &lt;strong&gt;known issues&lt;/strong&gt;. For details, refer to
&lt;a href=&#34;https://github.com/grafana/xk6-browser/issues/435&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;#435&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;

&lt;p&gt;Sets the 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/&#34;&gt;browser context&lt;/a&gt;&amp;rsquo;s geolocation.&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;Parameter&lt;/th&gt;
              &lt;th&gt;Type&lt;/th&gt;
              &lt;th&gt;Default&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;geolocation&lt;/td&gt;
              &lt;td&gt;object&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;null&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;geolocation.latitude&lt;/td&gt;
              &lt;td&gt;number&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Latitude between -90 and 90.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;geolocation.longitude&lt;/td&gt;
              &lt;td&gt;number&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Latitude between -180 and 180.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;geolocation.accuracy&lt;/td&gt;
              &lt;td&gt;number&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Optional non-negative accuracy value.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;returns&#34;&gt;Returns&lt;/h3&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;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;&lt;code&gt;Promise&amp;lt;void&amp;gt;&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;A Promise that fulfills when the geolocation has been set.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;example&#34;&gt;Example&lt;/h3&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: {
    browser: {
      executor: &amp;#39;shared-iterations&amp;#39;,
      options: {
        browser: {
          type: &amp;#39;chromium&amp;#39;,
        },
      },
    },
  },
};

export default async function () {
  const context = await browser.newContext();
  await context.setGeolocation({ latitude: 59.95, longitude: 30.31667 });
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="setgeolocationgeolocation">setGeolocation(geolocation)&lt;/h1>
&lt;div class="admonition admonition-caution">&lt;blockquote>&lt;p class="title text-uppercase">Caution&lt;/p>&lt;p>This feature has &lt;strong>known issues&lt;/strong>. For details, refer to
&lt;a href="https://github.com/grafana/xk6-browser/issues/435" target="_blank" rel="noopener noreferrer">#435&lt;/a>.&lt;/p>&lt;/blockquote>&lt;/div>
&lt;p>Sets the
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/">browser context&lt;/a>&amp;rsquo;s geolocation.&lt;/p>
&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>Parameter&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Default&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>geolocation&lt;/td>
&lt;td>object&lt;/td>
&lt;td>&lt;code>null&lt;/code>&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>geolocation.latitude&lt;/td>
&lt;td>number&lt;/td>
&lt;td>&lt;code>0&lt;/code>&lt;/td>
&lt;td>Latitude between -90 and 90.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>geolocation.longitude&lt;/td>
&lt;td>number&lt;/td>
&lt;td>&lt;code>0&lt;/code>&lt;/td>
&lt;td>Latitude between -180 and 180.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>geolocation.accuracy&lt;/td>
&lt;td>number&lt;/td>
&lt;td>&lt;code>0&lt;/code>&lt;/td>
&lt;td>Optional non-negative accuracy value.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;/section>&lt;h3 id="returns">Returns&lt;/h3>
&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>Type&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>Promise&amp;lt;void&amp;gt;&lt;/code>&lt;/td>
&lt;td>A Promise that fulfills when the geolocation has been set.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;/section>&lt;h3 id="example">Example&lt;/h3>
&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">import { browser } from &amp;#39;k6/browser&amp;#39;;
export const options = {
scenarios: {
browser: {
executor: &amp;#39;shared-iterations&amp;#39;,
options: {
browser: {
type: &amp;#39;chromium&amp;#39;,
},
},
},
},
};
export default async function () {
const context = await browser.newContext();
await context.setGeolocation({ latitude: 59.95, longitude: 30.31667 });
}&lt;/code>&lt;/pre>
&lt;/div>
&lt;/div></description></item><item><title>setOffline(offline)</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/setoffline/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/setoffline/</guid><content><![CDATA[&lt;h1 id=&#34;setofflineoffline&#34;&gt;setOffline(offline)&lt;/h1&gt;
&lt;p&gt;Toggles the 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/&#34;&gt;browser context&lt;/a&gt;&amp;rsquo;s connectivity on/off.&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;Parameter&lt;/th&gt;
              &lt;th&gt;Type&lt;/th&gt;
              &lt;th&gt;Default&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;offline&lt;/td&gt;
              &lt;td&gt;boolean&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Whether to emulate the 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/&#34;&gt;browser context&lt;/a&gt; being disconnected (&lt;code&gt;true&lt;/code&gt;) or connected (&lt;code&gt;false&lt;/code&gt;).&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;returns&#34;&gt;Returns&lt;/h3&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;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;&lt;code&gt;Promise&amp;lt;void&amp;gt;&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;A Promise that fulfills when the connectivity has been set.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;example&#34;&gt;Example&lt;/h3&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: {
    browser: {
      executor: &amp;#39;shared-iterations&amp;#39;,
      options: {
        browser: {
          type: &amp;#39;chromium&amp;#39;,
        },
      },
    },
  },
};

export default async function () {
  const context = await browser.newContext();

  await context.setOffline(true);

  const page = await context.newPage();

  try {
    // Will not be able to load the page
    await page.goto(&amp;#39;https://test.k6.io/browser.php&amp;#39;);
  } finally {
    await page.close();
  }
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="setofflineoffline">setOffline(offline)&lt;/h1>
&lt;p>Toggles the
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/">browser context&lt;/a>&amp;rsquo;s connectivity on/off.&lt;/p>
&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>Parameter&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Default&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>offline&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>&lt;code>false&lt;/code>&lt;/td>
&lt;td>Whether to emulate the
&lt;a href="/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/">browser context&lt;/a> being disconnected (&lt;code>true&lt;/code>) or connected (&lt;code>false&lt;/code>).&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;/section>&lt;h3 id="returns">Returns&lt;/h3>
&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>Type&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>Promise&amp;lt;void&amp;gt;&lt;/code>&lt;/td>
&lt;td>A Promise that fulfills when the connectivity has been set.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;/section>&lt;h3 id="example">Example&lt;/h3>
&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">import { browser } from &amp;#39;k6/browser&amp;#39;;
export const options = {
scenarios: {
browser: {
executor: &amp;#39;shared-iterations&amp;#39;,
options: {
browser: {
type: &amp;#39;chromium&amp;#39;,
},
},
},
},
};
export default async function () {
const context = await browser.newContext();
await context.setOffline(true);
const page = await context.newPage();
try {
// Will not be able to load the page
await page.goto(&amp;#39;https://test.k6.io/browser.php&amp;#39;);
} finally {
await page.close();
}
}&lt;/code>&lt;/pre>
&lt;/div>
&lt;/div></description></item><item><title>waitForEvent(event[, optionsOrPredicate])</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/waitforevent/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/javascript-api/k6-browser/browsercontext/waitforevent/</guid><content><![CDATA[&lt;p&gt;Waits for the event to fire and returns its value. If a predicate function has been set it will pass the value to the predicate function, which must return &lt;code&gt;true&lt;/code&gt; for the promise to resolve.&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;Parameter&lt;/th&gt;
              &lt;th&gt;Type&lt;/th&gt;
              &lt;th&gt;Default&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;event&lt;/td&gt;
              &lt;td&gt;string&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;null&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Name of event to wait for. Currently the &lt;code&gt;&#39;page&#39;&lt;/code&gt; event is the only one that is supported.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;optionsOrPredicate&lt;/td&gt;
              &lt;td&gt;function|object&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;null&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Optional. If it&amp;rsquo;s a function, the &lt;code&gt;&#39;page&#39;&lt;/code&gt; event data will be passed to it and it must return &lt;code&gt;true&lt;/code&gt; to continue.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;optionsOrPredicate.predicate&lt;/td&gt;
              &lt;td&gt;function&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;null&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Optional. Function that will be called when the &lt;code&gt;&#39;page&#39;&lt;/code&gt; event is emitted. The event data will be passed to it and it must return &lt;code&gt;true&lt;/code&gt; to continue.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;optionsOrPredicate.timeout&lt;/td&gt;
              &lt;td&gt;number&lt;/td&gt;
              &lt;td&gt;&lt;code&gt;30000&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;Optional. Maximum time to wait in milliseconds.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;returns&#34;&gt;Returns&lt;/h3&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;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;&lt;code&gt;Promise&amp;lt;Page&amp;gt;&lt;/code&gt;&lt;/td&gt;
              &lt;td&gt;A Promise that fulfills with a 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/k6-browser/page/&#34;&gt;page&lt;/a&gt; object when the &lt;code&gt;page&lt;/code&gt; event has been emitted.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;example&#34;&gt;Example&lt;/h3&gt;
&lt;p&gt;This API is useful when you want to wait for the new page to open after clicking on a link that opens in a new tab.&lt;/p&gt;
&lt;CodeGroup labels={[]}&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;,
        },
      },
    },
  },
};

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

  await page.goto(&amp;#39;https://test.k6.io/&amp;#39;);

  await page.keyboard.down(&amp;#39;ControlOrMeta&amp;#39;);

  // Open the link in a new tab with the help of the meta key.
  // Wait for the new page to be created.
  const browserContext = browser.context();
  const [newTab] = await Promise.all([
    browserContext.waitForEvent(&amp;#39;page&amp;#39;),
    await page.locator(&amp;#39;a[href=&amp;#34;/my_messages.php&amp;#34;]&amp;#39;).click(),
  ]);

  await page.keyboard.up(&amp;#39;ControlOrMeta&amp;#39;);

  // Wait for the new page (tab) to load.
  await newTab.waitForLoadState(&amp;#39;load&amp;#39;);

  // Take screenshots of each page.
  await page.screenshot({ path: `screenshot-page.png` });
  await newTab.screenshot({ path: `screenshot-newTab.png` });

  await newTab.close();
  await page.close();
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/CodeGroup&gt;
&lt;p&gt;Here&amp;rsquo;s an example working with the predicate:&lt;/p&gt;
&lt;CodeGroup labels={[]}&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: {
    browser: {
      executor: &amp;#39;shared-iterations&amp;#39;,
      options: {
        browser: {
          type: &amp;#39;chromium&amp;#39;,
        },
      },
    },
  },
};

export default async function () {
  const context = await browser.newContext();

  // Call waitForEvent with a predicate which will return true once at least
  // one page has been created.
  let counter = 0;
  const promise = await context.waitForEvent(&amp;#39;page&amp;#39;, {
    predicate: (page) =&amp;gt; {
      if (&amp;#43;&amp;#43;counter &amp;gt;= 1) {
        return true;
      }
      return false;
    },
  });

  // Now we create a page.
  const page = await context.newPage();

  // Wait for the predicate to pass.
  await promise;
  console.log(&amp;#39;predicate passed&amp;#39;);

  await page.close();
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;/CodeGroup&gt;
]]></content><description>&lt;p>Waits for the event to fire and returns its value. If a predicate function has been set it will pass the value to the predicate function, which must return &lt;code>true&lt;/code> for the promise to resolve.&lt;/p></description></item></channel></rss>