---
title: "addInitScript() | Grafana k6 documentation"
description: "Adds an init script."
---

> For a curated documentation index, see [llms.txt](/llms.txt). For the complete documentation index, see [llms-full.txt](/llms-full.txt).

# addInitScript()

Adds a script which will be evaluated in one of the following scenarios:

- Whenever a [page](/docs/k6/latest/javascript-api/k6-browser/page/) is created in the [browser context](/docs/k6/latest/javascript-api/k6-browser/browsercontext/) or is navigated.
- Whenever a child [frame](/docs/k6/latest/javascript-api/k6-browser/frame/) is attached or navigated in any [page](/docs/k6/latest/javascript-api/k6-browser/page/) in the [browser context](/docs/k6/latest/javascript-api/k6-browser/browsercontext/). In this case, the script is evaluated in the context of the newly attached [frame](/docs/k6/latest/javascript-api/k6-browser/frame/).

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 `Math.random`.

### Returns

Expand table

| Type            | Description                                                                                                                                 |
|-----------------|---------------------------------------------------------------------------------------------------------------------------------------------|
| `Promise<void>` | A Promise that fulfills when the script has been added to the [browser context](/docs/k6/latest/javascript-api/k6-browser/browsercontext/). |

### Example

JavaScript ![Copy code to clipboard](/media/images/icons/icon-copy-small-2.svg) Copy

```javascript
import { browser } from 'k6/browser';
import { check } from 'https://jslib.k6.io/k6-utils/1.5.0/index.js';

export const options = {
  scenarios: {
    browser: {
      executor: 'shared-iterations',
      options: {
        browser: {
          type: 'chromium',
        },
      },
    },
  },
};

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

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

  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('about:blank');

  await page.setContent(`
  <html>
    <head></head>
    <body>
      <div id="random">waiting...</div>
    </body>
    <script>
        document.getElementById('random').textContent = Math.random();
    </script>
  </html>`);

  await check(page.locator('#random'), {
    'is zero': async random => await random.textContent() == '0'
  });

  await page.close();
}
```
