---
title: "waitForFunction(pageFunction, arg[, options]) | Grafana k6 documentation"
description: "Browser module: page.waitForFunction(pageFunction, arg[, options]) method"
---

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

# waitForFunction(pageFunction, arg\[, options])

Returns when the `pageFunction` returns a truthy value.

Expand table

| Parameter       | Type            | Default | Description                                                                                                                                                                                                                                                   |
|-----------------|-----------------|---------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| pageFunction    | function        |         | Function to be evaluated in the page context.                                                                                                                                                                                                                 |
| arg             | string          | `''`    | Optional argument to pass to `pageFunction`                                                                                                                                                                                                                   |
| options         | object          | `null`  |                                                                                                                                                                                                                                                               |
| options.polling | number or `raf` | `raf`   | If `polling` is `'raf'`, then `pageFunction` is constantly executed in `requestAnimationFrame` callback. If `polling` is a number, then it is treated as an interval in milliseconds at which the function would be executed.                                 |
| options.timeout | number          | `30000` | Maximum time in milliseconds. Pass `0` to disable the timeout. Default is overridden by the `setDefaultTimeout` option on [BrowserContext](/docs/k6/next/javascript-api/k6-browser/browsercontext/) or [Page](/docs/k6/next/javascript-api/k6-browser/page/). |

### Returns

Expand table

| Type                                                                          | Description                                       |
|-------------------------------------------------------------------------------|---------------------------------------------------|
| Promise&lt; [JSHandle](/docs/k6/next/javascript-api/k6-browser/jshandle/)&gt; | The `JSHandle` instance associated with the page. |

### 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 page = await browser.newPage();

  try {
    await page.evaluate(() => {
      setTimeout(() => {
        const el = document.createElement('h1');
        el.innerHTML = 'Hello';
        document.body.appendChild(el);
      }, 1000);
    });

    const ok = await page.waitForFunction("document.querySelector('h1')", {
      polling: 'mutation',
      timeout: 2000,
    });
    await check(ok, {
      'waitForFunction successfully resolved': async (ok) =>
          await ok.innerHTML() == 'Hello'
    });
  } finally {
    await page.close();
  }
}
```
