---
title: "Keyboard | Grafana k6 documentation"
description: "Browser module: Keyboard Class"
---

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

# Keyboard

> Caution
> 
> This API is a work in progress. Some of the following functionalities might behave unexpectedly.

`Keyboard` provide a way to interact with a virtual keyboard.

Expand table

| Method                                                                               | Description                                                                                      |
|--------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------|
| [down(key)](/docs/k6/latest/javascript-api/k6-browser/keyboard/down/)                | Dispatches a `keydown` event.                                                                    |
| [up(key)](/docs/k6/latest/javascript-api/k6-browser/keyboard/up/)                    | Dispatches a `keyup` event.                                                                      |
| [press(key\[, options\])](/docs/k6/latest/javascript-api/k6-browser/keyboard/press/) | Dispatches a `keydown` event followed by an `keyup` event.                                       |
| [type(text\[, options\])](/docs/k6/latest/javascript-api/k6-browser/keyboard/type/)  | Dispatches a `keydown`, `keypress` or`input`, and `keyup` events for each character in the text. |
| [insertText(text)](/docs/k6/latest/javascript-api/k6-browser/keyboard/inserttext/)   | Dispatches only an `input` event.                                                                |

### Example

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

```javascript
import { browser } from 'k6/browser';

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

export default async function () {
  const page = await browser.newPage();
  await page.goto('https://test.k6.io/my_messages.php', {
    waitUntil: 'networkidle'
  });

  const login = page.locator('input[name="login"]');
  await login.click();
  await page.keyboard.type("admin");

  const password = page.locator('input[name="password"]');
  await password.click();
  await page.keyboard.type("123");

  await Promise.all([
    page.keyboard.press('Enter'), // submit
    page.waitForNavigation(),
  ]);

  await page.close();
}
```
