Skip to main content

FrameLocator

FrameLocator represents a view to the iframe on the page. It captures the logic sufficient to retrieve the iframe and locate elements in that iframe. FrameLocator can be created with either Page.frameLocator(selector) or Locator.frameLocator(selector) method.

Locator locator = page.frameLocator("#my-frame").getByText("Submit");
locator.click();

Strictness

Frame locators are strict. This means that all operations on frame locators will throw if more than one element matches a given selector.

// Throws if there are several frames in DOM:
page.frame_locator(".result-frame").getByRole("button").click();

// Works because we explicitly tell locator to pick the first frame:
page.frame_locator(".result-frame").first().getByRole("button").click();

Converting Locator to FrameLocator

If you have a Locator object pointing to an iframe it can be converted to FrameLocator using :scope CSS selector:

Locator frameLocator = locator.frameLocator(':scope');

FrameLocator.first()

Added in: v1.17

Returns locator to the first matching frame.

FrameLocator.frameLocator(selector)

Added in: v1.17

When working with iframes, you can create a frame locator that will enter the iframe and allow selecting elements in that iframe.

FrameLocator.getByAltText(text[, options])

Added in: v1.27
  • text <String|Pattern> Text to locate the element for.#
  • options <FrameLocator.GetByAltTextOptions>
    • setExact <boolean> Whether to find an exact match: case-sensitive and whole-string. Default to false. Ignored when locating by a regular expression. Note that exact match still trims whitespace.#
  • returns: <Locator>#

Allows locating elements by their alt text. For example, this method will find the image by alt text "Castle":

<img alt='Castle'>

FrameLocator.getByLabel(text[, options])

Added in: v1.27
  • text <String|Pattern> Text to locate the element for.#
  • options <FrameLocator.GetByLabelOptions>
    • setExact <boolean> Whether to find an exact match: case-sensitive and whole-string. Default to false. Ignored when locating by a regular expression. Note that exact match still trims whitespace.#
  • returns: <Locator>#

Allows locating input elements by the text of the associated label. For example, this method will find the input by label text "Password" in the following DOM:

<label for="password-input">Password:</label>
<input id="password-input">

FrameLocator.getByPlaceholder(text[, options])

Added in: v1.27
  • text <String|Pattern> Text to locate the element for.#
  • options <FrameLocator.GetByPlaceholderOptions>
    • setExact <boolean> Whether to find an exact match: case-sensitive and whole-string. Default to false. Ignored when locating by a regular expression. Note that exact match still trims whitespace.#
  • returns: <Locator>#

Allows locating input elements by the placeholder text. For example, this method will find the input by placeholder "Country":

<input placeholder="Country">

FrameLocator.getByRole(role[, options])

Added in: v1.27
  • role <enum AriaRole { ALERT, ALERTDIALOG, APPLICATION, ARTICLE, BANNER, BLOCKQUOTE, BUTTON, CAPTION, CELL, CHECKBOX, CODE, COLUMNHEADER, COMBOBOX, COMPLEMENTARY, CONTENTINFO, DEFINITION, DELETION, DIALOG, DIRECTORY, DOCUMENT, EMPHASIS, FEED, FIGURE, FORM, GENERIC, GRID, GRIDCELL, GROUP, HEADING, IMG, INSERTION, LINK, LIST, LISTBOX, LISTITEM, LOG, MAIN, MARQUEE, MATH, METER, MENU, MENUBAR, MENUITEM, MENUITEMCHECKBOX, MENUITEMRADIO, NAVIGATION, NONE, NOTE, OPTION, PARAGRAPH, PRESENTATION, PROGRESSBAR, RADIO, RADIOGROUP, REGION, ROW, ROWGROUP, ROWHEADER, SCROLLBAR, SEARCH, SEARCHBOX, SEPARATOR, SLIDER, SPINBUTTON, STATUS, STRONG, SUBSCRIPT, SUPERSCRIPT, SWITCH, TAB, TABLE, TABLIST, TABPANEL, TERM, TEXTBOX, TIME, TIMER, TOOLBAR, TOOLTIP, TREE, TREEGRID, TREEITEM }> Required aria role.#

  • options <FrameLocator.GetByRoleOptions>

    • setChecked <boolean> An attribute that is usually set by aria-checked or native <input type=checkbox> controls.#

      Learn more about aria-checked.

    • setDisabled <boolean> An attribute that is usually set by aria-disabled or disabled.#

      note

      Unlike most other attributes, disabled is inherited through the DOM hierarchy. Learn more about aria-disabled.

    • setExact <boolean> Whether name is matched exactly: case-sensitive and whole-string. Defaults to false. Ignored when name is a regular expression. Note that exact match still trims whitespace. Added in: v1.28#

    • setExpanded <boolean> An attribute that is usually set by aria-expanded.#

      Learn more about aria-expanded.

    • setIncludeHidden <boolean> Option that controls whether hidden elements are matched. By default, only non-hidden elements, as defined by ARIA, are matched by role selector.#

      Learn more about aria-hidden.

    • setLevel <int> A number attribute that is usually present for roles heading, listitem, row, treeitem, with default values for <h1>-<h6> elements.#

      Learn more about aria-level.

    • setName <String|Pattern> Option to match the accessible name. By default, matching is case-insensitive and searches for a substring, use exact to control this behavior.#

      Learn more about accessible name.

    • setPressed <boolean> An attribute that is usually set by aria-pressed.#

      Learn more about aria-pressed.

    • setSelected <boolean> An attribute that is usually set by aria-selected.#

      Learn more about aria-selected.

  • returns: <Locator>#

Allows locating elements by their ARIA role, ARIA attributes and accessible name. Note that role selector does not replace accessibility audits and conformance tests, but rather gives early feedback about the ARIA guidelines.

Note that many html elements have an implicitly defined role that is recognized by the role selector. You can find all the supported roles here. ARIA guidelines do not recommend duplicating implicit roles and attributes by setting role and/or aria-* attributes to default values.

FrameLocator.getByTestId(testId)

Added in: v1.27

Locate element by the test id. By default, the data-testid attribute is used as a test id. Use Selectors.setTestIdAttribute(attributeName) to configure a different test id attribute if necessary.

FrameLocator.getByText(text[, options])

Added in: v1.27
  • text <String|Pattern> Text to locate the element for.#
  • options <FrameLocator.GetByTextOptions>
    • setExact <boolean> Whether to find an exact match: case-sensitive and whole-string. Default to false. Ignored when locating by a regular expression. Note that exact match still trims whitespace.#
  • returns: <Locator>#

Allows locating elements that contain given text. Consider the following DOM structure:

<div>Hello <span>world</span></div>
<div>Hello</div>

You can locate by text substring, exact string, or a regular expression:

// Matches <span>
page.getByText("world")

// Matches first <div>
page.getByText("Hello world")

// Matches second <div>
page.getByText("Hello", new Page.GetByTextOptions().setExact(true))

// Matches both <div>s
page.getByText(Pattern.compile("Hello"))

// Matches second <div>
page.getByText(Pattern.compile("^hello$", Pattern.CASE_INSENSITIVE))

See also Locator.filter([options]) that allows to match by another criteria, like an accessible role, and then filter by the text content.

note

Matching by text always normalizes whitespace, even with exact match. For example, it turns multiple spaces into one, turns line breaks into spaces and ignores leading and trailing whitespace.

note

Input elements of the type button and submit are matched by their value instead of the text content. For example, locating by text "Log in" matches <input type=button value="Log in">.

FrameLocator.getByTitle(text[, options])

Added in: v1.27
  • text <String|Pattern> Text to locate the element for.#
  • options <FrameLocator.GetByTitleOptions>
    • setExact <boolean> Whether to find an exact match: case-sensitive and whole-string. Default to false. Ignored when locating by a regular expression. Note that exact match still trims whitespace.#
  • returns: <Locator>#

Allows locating elements by their title. For example, this method will find the button by its title "Place the order":

<button title='Place the order'>Order Now</button>

FrameLocator.last()

Added in: v1.17

Returns locator to the last matching frame.

FrameLocator.locator(selector[, options])

Added in: v1.17
  • selector <String> A selector to use when resolving DOM element. See working with selectors for more details.#

  • options <FrameLocator.LocatorOptions>

    • setHas <Locator> Matches elements containing an element that matches an inner locator. Inner locator is queried against the outer one. For example, article that has text=Playwright matches <article><div>Playwright</div></article>.#

      Note that outer and inner locators must belong to the same frame. Inner locator must not contain FrameLocators.

    • setHasText <String|Pattern> Matches elements containing specified text somewhere inside, possibly in a child or a descendant element. When passed a string, matching is case-insensitive and searches for a substring. For example, "Playwright" matches <article><div>Playwright</div></article>.#

  • returns: <Locator>#

The method finds an element matching the specified selector in the locator's subtree. It also accepts filter options, similar to Locator.filter([options]) method.

Learn more about locators.

FrameLocator.nth(index)

Added in: v1.17

Returns locator to the n-th matching frame. It's zero based, nth(0) selects the first frame.