# class: Locator
* since: v1.14
Locators are the central piece of Playwright's auto-waiting and retry-ability. In a nutshell, locators represent
a way to find element(s) on the page at any moment. Locator can be created with the [`method: Page.locator`] method.
[Learn more about locators](../locators.md).
## async method: Locator.all
* since: v1.29
- returns: <[Array]<[Locator]>>
When locator points to a list of elements, returns array of locators, pointing
to respective elements.
Note that [`method: Locator.all`] does not wait for elements to match the locator, and instead immediately returns whatever is present in the page. To avoid flakiness when elements are loaded dynamically, wait for the loading to finish before calling [`method: Locator.all`].
**Usage**
```js
for (const li of await page.getByRole('listitem').all())
await li.click();
```
```python async
for li in await page.get_by_role('listitem').all():
await li.click();
```
```python sync
for li in page.get_by_role('listitem').all():
li.click();
```
```java
for (Locator li : page.getByRole('listitem').all())
li.click();
```
```csharp
foreach (var li in await page.GetByRole('listitem').AllAsync())
await li.ClickAsync();
```
## async method: Locator.allInnerTexts
* since: v1.14
- returns: <[Array]<[string]>>
Returns an array of `node.innerText` values for all matching nodes.
**Usage**
```js
const texts = await page.getByRole('link').allInnerTexts();
```
```python async
texts = await page.get_by_role("link").all_inner_texts()
```
```python sync
texts = page.get_by_role("link").all_inner_texts()
```
```java
String[] texts = page.getByRole(AriaRole.LINK).allInnerTexts();
```
```csharp
var texts = await page.GetByRole(AriaRole.Link).AllInnerTextsAsync();
```
## async method: Locator.allTextContents
* since: v1.14
- returns: <[Array]<[string]>>
Returns an array of `node.textContent` values for all matching nodes.
**Usage**
```js
const texts = await page.getByRole('link').allTextContents();
```
```python async
texts = await page.get_by_role("link").all_text_contents()
```
```python sync
texts = page.get_by_role("link").all_text_contents()
```
```java
String[] texts = page.getByRole(AriaRole.LINK).allTextContents();
```
```csharp
var texts = await page.GetByRole(AriaRole.Link).AllTextContentsAsync();
```
## async method: Locator.blur
* since: v1.28
Calls [blur](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/blur) on the element.
### option: Locator.blur.timeout = %%-input-timeout-%%
* since: v1.28
## async method: Locator.boundingBox
* since: v1.14
- returns: <[null]|[Object]>
- `x` <[float]> the x coordinate of the element in pixels.
- `y` <[float]> the y coordinate of the element in pixels.
- `width` <[float]> the width of the element in pixels.
- `height` <[float]> the height of the element in pixels.
This method returns the bounding box of the element matching the locator, or `null` if the element is not visible. The bounding box is
calculated relative to the main frame viewport - which is usually the same as the browser window.
**Details**
Scrolling affects the returned bounding box, similarly to
[Element.getBoundingClientRect](https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect). That
means `x` and/or `y` may be negative.
Elements from child frames return the bounding box relative to the main frame, unlike the
[Element.getBoundingClientRect](https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect).
Assuming the page is static, it is safe to use bounding box coordinates to perform input. For example, the following
snippet should click the center of the element.
**Usage**
```js
const box = await page.getByRole('button').boundingBox();
await page.mouse.click(box.x + box.width / 2, box.y + box.height / 2);
```
```java
BoundingBox box = page.getByRole(AriaRole.BUTTON).boundingBox();
page.mouse().click(box.x + box.width / 2, box.y + box.height / 2);
```
```python async
box = await page.get_by_role("button").bounding_box()
await page.mouse.click(box["x"] + box["width"] / 2, box["y"] + box["height"] / 2)
```
```python sync
box = page.get_by_role("button").bounding_box()
page.mouse.click(box["x"] + box["width"] / 2, box["y"] + box["height"] / 2)
```
```csharp
var box = await page.GetByRole(AriaRole.Button).BoundingBoxAsync();
await page.Mouse.ClickAsync(box.X + box.Width / 2, box.Y + box.Height / 2);
```
### option: Locator.boundingBox.timeout = %%-input-timeout-%%
* since: v1.14
## async method: Locator.check
* since: v1.14
Ensure that checkbox or radio element is checked.
**Details**
Performs the following steps:
1. Ensure that element is a checkbox or a radio input. If not, this method throws. If the element is already
checked, this method returns immediately.
1. Wait for [actionability](../actionability.md) checks on the element, unless [`option: force`] option is set.
1. Scroll the element into view if needed.
1. Use [`property: Page.mouse`] to click in the center of the element.
1. Wait for initiated navigations to either succeed or fail, unless [`option: noWaitAfter`] option is set.
1. Ensure that the element is now checked. If not, this method throws.
If the element is detached from the DOM at any moment during the action, this method throws.
When all steps combined have not finished during the specified [`option: timeout`], this method throws a
[TimeoutError]. Passing zero timeout disables this.
**Usage**
```js
await page.getByRole('checkbox').check();
```
```java
page.getByRole(AriaRole.CHECKBOX).check();
```
```python async
await page.get_by_role("checkbox").check()
```
```python sync
page.get_by_role("checkbox").check()
```
```csharp
await page.GetByRole(AriaRole.Checkbox).CheckAsync();
```
### option: Locator.check.position = %%-input-position-%%
* since: v1.14
### option: Locator.check.force = %%-input-force-%%
* since: v1.14
### option: Locator.check.noWaitAfter = %%-input-no-wait-after-%%
* since: v1.14
### option: Locator.check.timeout = %%-input-timeout-%%
* since: v1.14
### option: Locator.check.trial = %%-input-trial-%%
* since: v1.14
## async method: Locator.clear
* since: v1.28
Clear the input field.
**Details**
This method waits for [actionability](../actionability.md) checks, focuses the element, clears it and triggers an `input` event after clearing.
If the target element is not an ``, `