# find_elements

Find elements by text, identifier, role or a plain description, best match first.

Find elements by text, identifier, role or a plain description, best match first.

| | |
|---|---|
| REST operation | [`findElements`](/reference/rest/observation/#findelements) (`POST /v1/devices/{deviceId}/elements/find`) |
| Needs a device | yes |
| Read only | yes |
| Profiles | `full` |

## Parameters

| Name | Required | Type | Goes to | What it is |
|---|---|---|---|---|
| `device_id` | yes | string | path `deviceId` | Stable device id such as `ios:00008120-001A2B3C4D5E6F70` or `android:R58M123ABC`. |
| `lease` | no | string | header `Silan-Lease` | Lease token when the device is claimed. |
| `text` | no | string | body `text` |  |
| `identifier` | no | string | body `identifier` |  |
| `role` | no | `application`, `window`, `button`, `link`, `text`, `textField`, `secureTextField`, `searchField`, `image`, `icon`, `cell`, `list`, `switchControl`, `slider`, `picker`, `tab`, `tabBar`, `navigationBar`, `toolbar`, `alert`, `sheet`, `keyboard`, `keyboardKey`, `webView`, `notificationBanner`, `other` | body `role` |  |
| `description` | no | string | body `description` | Free text like "the red Checkout button"; tree first, then vision. |
| `match` | no | `exact`, `contains`, `regex`, `caseInsensitive` | body `match` |  |

## Example call

```text
find_elements({ device_id: "ios:00008120-001A2B3C4D5E6F70" })
```