1062 lines
40 KiB
Java
1062 lines
40 KiB
Java
/*
|
|
* Copyright (c) Microsoft Corporation.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
package com.microsoft.playwright;
|
|
|
|
import com.microsoft.playwright.options.*;
|
|
import java.util.regex.Pattern;
|
|
|
|
/**
|
|
* FrameLocator represents a view to the {@code iframe} on the page. It captures the logic sufficient to retrieve the
|
|
* {@code iframe} and locate elements in that iframe. FrameLocator can be created with either {@link
|
|
* com.microsoft.playwright.Locator#contentFrame Locator.contentFrame()}, {@link com.microsoft.playwright.Page#frameLocator
|
|
* Page.frameLocator()} or {@link com.microsoft.playwright.Locator#frameLocator Locator.frameLocator()} method.
|
|
* <pre>{@code
|
|
* Locator locator = page.locator("#my-frame").contentFrame().getByText("Submit");
|
|
* locator.click();
|
|
* }</pre>
|
|
*
|
|
* <p> <strong>Strictness</strong>
|
|
*
|
|
* <p> Frame locators are strict. This means that all operations on frame locators will throw if more than one element matches
|
|
* a given selector.
|
|
* <pre>{@code
|
|
* // Throws if there are several frames in DOM:
|
|
* page.locator(".result-frame").contentFrame().getByRole(AriaRole.BUTTON).click();
|
|
*
|
|
* // Works because we explicitly tell locator to pick the first frame:
|
|
* page.locator(".result-frame").first().contentFrame().getByRole(AriaRole.BUTTON).click();
|
|
* }</pre>
|
|
*
|
|
* <p> <strong>Converting Locator to FrameLocator</strong>
|
|
*
|
|
* <p> If you have a {@code Locator} object pointing to an {@code iframe} it can be converted to {@code FrameLocator} using
|
|
* {@link com.microsoft.playwright.Locator#contentFrame Locator.contentFrame()}.
|
|
*
|
|
* <p> <strong>Converting FrameLocator to Locator</strong>
|
|
*
|
|
* <p> If you have a {@code FrameLocator} object it can be converted to {@code Locator} pointing to the same {@code iframe}
|
|
* using {@link com.microsoft.playwright.FrameLocator#owner FrameLocator.owner()}.
|
|
*/
|
|
public interface FrameLocator {
|
|
class GetByAltTextOptions {
|
|
/**
|
|
* 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.
|
|
*/
|
|
public Boolean exact;
|
|
|
|
/**
|
|
* 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.
|
|
*/
|
|
public GetByAltTextOptions setExact(boolean exact) {
|
|
this.exact = exact;
|
|
return this;
|
|
}
|
|
}
|
|
class GetByLabelOptions {
|
|
/**
|
|
* 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.
|
|
*/
|
|
public Boolean exact;
|
|
|
|
/**
|
|
* 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.
|
|
*/
|
|
public GetByLabelOptions setExact(boolean exact) {
|
|
this.exact = exact;
|
|
return this;
|
|
}
|
|
}
|
|
class GetByPlaceholderOptions {
|
|
/**
|
|
* 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.
|
|
*/
|
|
public Boolean exact;
|
|
|
|
/**
|
|
* 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.
|
|
*/
|
|
public GetByPlaceholderOptions setExact(boolean exact) {
|
|
this.exact = exact;
|
|
return this;
|
|
}
|
|
}
|
|
class GetByRoleOptions {
|
|
/**
|
|
* An attribute that is usually set by {@code aria-checked} or native {@code <input type=checkbox>} controls.
|
|
*
|
|
* <p> Learn more about <a href="https://www.w3.org/TR/wai-aria-1.2/#aria-checked">{@code aria-checked}</a>.
|
|
*/
|
|
public Boolean checked;
|
|
/**
|
|
* Option to match the <a href="https://w3c.github.io/accname/#dfn-accessible-description">accessible description</a>. By
|
|
* default, matching is case-insensitive and searches for a substring, use {@code exact} to control this behavior.
|
|
*
|
|
* <p> Learn more about <a href="https://w3c.github.io/accname/#dfn-accessible-description">accessible description</a>.
|
|
*/
|
|
public Object description;
|
|
/**
|
|
* An attribute that is usually set by {@code aria-disabled} or {@code disabled}.
|
|
*
|
|
* <p> <strong>NOTE:</strong> Unlike most other attributes, {@code disabled} is inherited through the DOM hierarchy. Learn more about <a
|
|
* href="https://www.w3.org/TR/wai-aria-1.2/#aria-disabled">{@code aria-disabled}</a>.
|
|
*/
|
|
public Boolean disabled;
|
|
/**
|
|
* Whether {@code name} and {@code description} are matched exactly: case-sensitive and whole-string. Defaults to false.
|
|
* Ignored when the value is a regular expression. Note that exact match still trims whitespace.
|
|
*/
|
|
public Boolean exact;
|
|
/**
|
|
* An attribute that is usually set by {@code aria-expanded}.
|
|
*
|
|
* <p> Learn more about <a href="https://www.w3.org/TR/wai-aria-1.2/#aria-expanded">{@code aria-expanded}</a>.
|
|
*/
|
|
public Boolean expanded;
|
|
/**
|
|
* Option that controls whether hidden elements are matched. By default, only non-hidden elements, as <a
|
|
* href="https://www.w3.org/TR/wai-aria-1.2/#tree_exclusion">defined by ARIA</a>, are matched by role selector.
|
|
*
|
|
* <p> Learn more about <a href="https://www.w3.org/TR/wai-aria-1.2/#aria-hidden">{@code aria-hidden}</a>.
|
|
*/
|
|
public Boolean includeHidden;
|
|
/**
|
|
* A number attribute that is usually present for roles {@code heading}, {@code listitem}, {@code row}, {@code treeitem},
|
|
* with default values for {@code <h1>-<h6>} elements.
|
|
*
|
|
* <p> Learn more about <a href="https://www.w3.org/TR/wai-aria-1.2/#aria-level">{@code aria-level}</a>.
|
|
*/
|
|
public Integer level;
|
|
/**
|
|
* Option to match the <a href="https://w3c.github.io/accname/#dfn-accessible-name">accessible name</a>. By default,
|
|
* matching is case-insensitive and searches for a substring, use {@code exact} to control this behavior.
|
|
*
|
|
* <p> Learn more about <a href="https://w3c.github.io/accname/#dfn-accessible-name">accessible name</a>.
|
|
*/
|
|
public Object name;
|
|
/**
|
|
* An attribute that is usually set by {@code aria-pressed}.
|
|
*
|
|
* <p> Learn more about <a href="https://www.w3.org/TR/wai-aria-1.2/#aria-pressed">{@code aria-pressed}</a>.
|
|
*/
|
|
public Boolean pressed;
|
|
/**
|
|
* An attribute that is usually set by {@code aria-selected}.
|
|
*
|
|
* <p> Learn more about <a href="https://www.w3.org/TR/wai-aria-1.2/#aria-selected">{@code aria-selected}</a>.
|
|
*/
|
|
public Boolean selected;
|
|
|
|
/**
|
|
* An attribute that is usually set by {@code aria-checked} or native {@code <input type=checkbox>} controls.
|
|
*
|
|
* <p> Learn more about <a href="https://www.w3.org/TR/wai-aria-1.2/#aria-checked">{@code aria-checked}</a>.
|
|
*/
|
|
public GetByRoleOptions setChecked(boolean checked) {
|
|
this.checked = checked;
|
|
return this;
|
|
}
|
|
/**
|
|
* Option to match the <a href="https://w3c.github.io/accname/#dfn-accessible-description">accessible description</a>. By
|
|
* default, matching is case-insensitive and searches for a substring, use {@code exact} to control this behavior.
|
|
*
|
|
* <p> Learn more about <a href="https://w3c.github.io/accname/#dfn-accessible-description">accessible description</a>.
|
|
*/
|
|
public GetByRoleOptions setDescription(String description) {
|
|
this.description = description;
|
|
return this;
|
|
}
|
|
/**
|
|
* Option to match the <a href="https://w3c.github.io/accname/#dfn-accessible-description">accessible description</a>. By
|
|
* default, matching is case-insensitive and searches for a substring, use {@code exact} to control this behavior.
|
|
*
|
|
* <p> Learn more about <a href="https://w3c.github.io/accname/#dfn-accessible-description">accessible description</a>.
|
|
*/
|
|
public GetByRoleOptions setDescription(Pattern description) {
|
|
this.description = description;
|
|
return this;
|
|
}
|
|
/**
|
|
* An attribute that is usually set by {@code aria-disabled} or {@code disabled}.
|
|
*
|
|
* <p> <strong>NOTE:</strong> Unlike most other attributes, {@code disabled} is inherited through the DOM hierarchy. Learn more about <a
|
|
* href="https://www.w3.org/TR/wai-aria-1.2/#aria-disabled">{@code aria-disabled}</a>.
|
|
*/
|
|
public GetByRoleOptions setDisabled(boolean disabled) {
|
|
this.disabled = disabled;
|
|
return this;
|
|
}
|
|
/**
|
|
* Whether {@code name} and {@code description} are matched exactly: case-sensitive and whole-string. Defaults to false.
|
|
* Ignored when the value is a regular expression. Note that exact match still trims whitespace.
|
|
*/
|
|
public GetByRoleOptions setExact(boolean exact) {
|
|
this.exact = exact;
|
|
return this;
|
|
}
|
|
/**
|
|
* An attribute that is usually set by {@code aria-expanded}.
|
|
*
|
|
* <p> Learn more about <a href="https://www.w3.org/TR/wai-aria-1.2/#aria-expanded">{@code aria-expanded}</a>.
|
|
*/
|
|
public GetByRoleOptions setExpanded(boolean expanded) {
|
|
this.expanded = expanded;
|
|
return this;
|
|
}
|
|
/**
|
|
* Option that controls whether hidden elements are matched. By default, only non-hidden elements, as <a
|
|
* href="https://www.w3.org/TR/wai-aria-1.2/#tree_exclusion">defined by ARIA</a>, are matched by role selector.
|
|
*
|
|
* <p> Learn more about <a href="https://www.w3.org/TR/wai-aria-1.2/#aria-hidden">{@code aria-hidden}</a>.
|
|
*/
|
|
public GetByRoleOptions setIncludeHidden(boolean includeHidden) {
|
|
this.includeHidden = includeHidden;
|
|
return this;
|
|
}
|
|
/**
|
|
* A number attribute that is usually present for roles {@code heading}, {@code listitem}, {@code row}, {@code treeitem},
|
|
* with default values for {@code <h1>-<h6>} elements.
|
|
*
|
|
* <p> Learn more about <a href="https://www.w3.org/TR/wai-aria-1.2/#aria-level">{@code aria-level}</a>.
|
|
*/
|
|
public GetByRoleOptions setLevel(int level) {
|
|
this.level = level;
|
|
return this;
|
|
}
|
|
/**
|
|
* Option to match the <a href="https://w3c.github.io/accname/#dfn-accessible-name">accessible name</a>. By default,
|
|
* matching is case-insensitive and searches for a substring, use {@code exact} to control this behavior.
|
|
*
|
|
* <p> Learn more about <a href="https://w3c.github.io/accname/#dfn-accessible-name">accessible name</a>.
|
|
*/
|
|
public GetByRoleOptions setName(String name) {
|
|
this.name = name;
|
|
return this;
|
|
}
|
|
/**
|
|
* Option to match the <a href="https://w3c.github.io/accname/#dfn-accessible-name">accessible name</a>. By default,
|
|
* matching is case-insensitive and searches for a substring, use {@code exact} to control this behavior.
|
|
*
|
|
* <p> Learn more about <a href="https://w3c.github.io/accname/#dfn-accessible-name">accessible name</a>.
|
|
*/
|
|
public GetByRoleOptions setName(Pattern name) {
|
|
this.name = name;
|
|
return this;
|
|
}
|
|
/**
|
|
* An attribute that is usually set by {@code aria-pressed}.
|
|
*
|
|
* <p> Learn more about <a href="https://www.w3.org/TR/wai-aria-1.2/#aria-pressed">{@code aria-pressed}</a>.
|
|
*/
|
|
public GetByRoleOptions setPressed(boolean pressed) {
|
|
this.pressed = pressed;
|
|
return this;
|
|
}
|
|
/**
|
|
* An attribute that is usually set by {@code aria-selected}.
|
|
*
|
|
* <p> Learn more about <a href="https://www.w3.org/TR/wai-aria-1.2/#aria-selected">{@code aria-selected}</a>.
|
|
*/
|
|
public GetByRoleOptions setSelected(boolean selected) {
|
|
this.selected = selected;
|
|
return this;
|
|
}
|
|
}
|
|
class GetByTextOptions {
|
|
/**
|
|
* 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.
|
|
*/
|
|
public Boolean exact;
|
|
|
|
/**
|
|
* 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.
|
|
*/
|
|
public GetByTextOptions setExact(boolean exact) {
|
|
this.exact = exact;
|
|
return this;
|
|
}
|
|
}
|
|
class GetByTitleOptions {
|
|
/**
|
|
* 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.
|
|
*/
|
|
public Boolean exact;
|
|
|
|
/**
|
|
* 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.
|
|
*/
|
|
public GetByTitleOptions setExact(boolean exact) {
|
|
this.exact = exact;
|
|
return this;
|
|
}
|
|
}
|
|
class LocatorOptions {
|
|
/**
|
|
* Narrows down the results of the method to those which contain elements matching this relative locator. For example,
|
|
* {@code article} that has {@code text=Playwright} matches {@code <article><div>Playwright</div></article>}.
|
|
*
|
|
* <p> Inner locator **must be relative** to the outer locator and is queried starting with the outer locator match, not the
|
|
* document root. For example, you can find {@code content} that has {@code div} in {@code
|
|
* <article><content><div>Playwright</div></content></article>}. However, looking for {@code content} that has {@code
|
|
* article div} will fail, because the inner locator must be relative and should not use any elements outside the {@code
|
|
* content}.
|
|
*
|
|
* <p> Note that outer and inner locators must belong to the same frame. Inner locator must not contain {@code FrameLocator}s.
|
|
*/
|
|
public Locator has;
|
|
/**
|
|
* Matches elements that do not contain an element that matches an inner locator. Inner locator is queried against the
|
|
* outer one. For example, {@code article} that does not have {@code div} matches {@code
|
|
* <article><span>Playwright</span></article>}.
|
|
*
|
|
* <p> Note that outer and inner locators must belong to the same frame. Inner locator must not contain {@code FrameLocator}s.
|
|
*/
|
|
public Locator hasNot;
|
|
/**
|
|
* Matches elements that do not contain 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.
|
|
*/
|
|
public Object hasNotText;
|
|
/**
|
|
* 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, {@code "Playwright"} matches {@code
|
|
* <article><div>Playwright</div></article>}.
|
|
*/
|
|
public Object hasText;
|
|
|
|
/**
|
|
* Narrows down the results of the method to those which contain elements matching this relative locator. For example,
|
|
* {@code article} that has {@code text=Playwright} matches {@code <article><div>Playwright</div></article>}.
|
|
*
|
|
* <p> Inner locator **must be relative** to the outer locator and is queried starting with the outer locator match, not the
|
|
* document root. For example, you can find {@code content} that has {@code div} in {@code
|
|
* <article><content><div>Playwright</div></content></article>}. However, looking for {@code content} that has {@code
|
|
* article div} will fail, because the inner locator must be relative and should not use any elements outside the {@code
|
|
* content}.
|
|
*
|
|
* <p> Note that outer and inner locators must belong to the same frame. Inner locator must not contain {@code FrameLocator}s.
|
|
*/
|
|
public LocatorOptions setHas(Locator has) {
|
|
this.has = has;
|
|
return this;
|
|
}
|
|
/**
|
|
* Matches elements that do not contain an element that matches an inner locator. Inner locator is queried against the
|
|
* outer one. For example, {@code article} that does not have {@code div} matches {@code
|
|
* <article><span>Playwright</span></article>}.
|
|
*
|
|
* <p> Note that outer and inner locators must belong to the same frame. Inner locator must not contain {@code FrameLocator}s.
|
|
*/
|
|
public LocatorOptions setHasNot(Locator hasNot) {
|
|
this.hasNot = hasNot;
|
|
return this;
|
|
}
|
|
/**
|
|
* Matches elements that do not contain 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.
|
|
*/
|
|
public LocatorOptions setHasNotText(String hasNotText) {
|
|
this.hasNotText = hasNotText;
|
|
return this;
|
|
}
|
|
/**
|
|
* Matches elements that do not contain 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.
|
|
*/
|
|
public LocatorOptions setHasNotText(Pattern hasNotText) {
|
|
this.hasNotText = hasNotText;
|
|
return this;
|
|
}
|
|
/**
|
|
* 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, {@code "Playwright"} matches {@code
|
|
* <article><div>Playwright</div></article>}.
|
|
*/
|
|
public LocatorOptions setHasText(String hasText) {
|
|
this.hasText = hasText;
|
|
return this;
|
|
}
|
|
/**
|
|
* 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, {@code "Playwright"} matches {@code
|
|
* <article><div>Playwright</div></article>}.
|
|
*/
|
|
public LocatorOptions setHasText(Pattern hasText) {
|
|
this.hasText = hasText;
|
|
return this;
|
|
}
|
|
}
|
|
/**
|
|
* @deprecated Use {@link com.microsoft.playwright.Locator#first Locator.first()} followed by {@link
|
|
* com.microsoft.playwright.Locator#contentFrame Locator.contentFrame()} instead.
|
|
*
|
|
* @since v1.17
|
|
*/
|
|
FrameLocator first();
|
|
/**
|
|
* When working with iframes, you can create a frame locator that will enter the iframe and allow selecting elements in
|
|
* that iframe.
|
|
*
|
|
* @param selector A selector to use when resolving DOM element.
|
|
* @since v1.17
|
|
*/
|
|
FrameLocator frameLocator(String selector);
|
|
/**
|
|
* Allows locating elements by their alt text.
|
|
*
|
|
* <p> <strong>Usage</strong>
|
|
*
|
|
* <p> For example, this method will find the image by alt text "Playwright logo":
|
|
* <pre>{@code
|
|
* page.getByAltText("Playwright logo").click();
|
|
* }</pre>
|
|
*
|
|
* @param text Text to locate the element for.
|
|
* @since v1.27
|
|
*/
|
|
default Locator getByAltText(String text) {
|
|
return getByAltText(text, null);
|
|
}
|
|
/**
|
|
* Allows locating elements by their alt text.
|
|
*
|
|
* <p> <strong>Usage</strong>
|
|
*
|
|
* <p> For example, this method will find the image by alt text "Playwright logo":
|
|
* <pre>{@code
|
|
* page.getByAltText("Playwright logo").click();
|
|
* }</pre>
|
|
*
|
|
* @param text Text to locate the element for.
|
|
* @since v1.27
|
|
*/
|
|
Locator getByAltText(String text, GetByAltTextOptions options);
|
|
/**
|
|
* Allows locating elements by their alt text.
|
|
*
|
|
* <p> <strong>Usage</strong>
|
|
*
|
|
* <p> For example, this method will find the image by alt text "Playwright logo":
|
|
* <pre>{@code
|
|
* page.getByAltText("Playwright logo").click();
|
|
* }</pre>
|
|
*
|
|
* @param text Text to locate the element for.
|
|
* @since v1.27
|
|
*/
|
|
default Locator getByAltText(Pattern text) {
|
|
return getByAltText(text, null);
|
|
}
|
|
/**
|
|
* Allows locating elements by their alt text.
|
|
*
|
|
* <p> <strong>Usage</strong>
|
|
*
|
|
* <p> For example, this method will find the image by alt text "Playwright logo":
|
|
* <pre>{@code
|
|
* page.getByAltText("Playwright logo").click();
|
|
* }</pre>
|
|
*
|
|
* @param text Text to locate the element for.
|
|
* @since v1.27
|
|
*/
|
|
Locator getByAltText(Pattern text, GetByAltTextOptions options);
|
|
/**
|
|
* Allows locating input elements by the text of the associated {@code <label>} or {@code aria-labelledby} element, or by
|
|
* the {@code aria-label} attribute.
|
|
*
|
|
* <p> <strong>Usage</strong>
|
|
*
|
|
* <p> For example, this method will find inputs by label "Username" and "Password" in the following DOM:
|
|
* <pre>{@code
|
|
* page.getByLabel("Username").fill("john");
|
|
* page.getByLabel("Password").fill("secret");
|
|
* }</pre>
|
|
*
|
|
* @param text Text to locate the element for.
|
|
* @since v1.27
|
|
*/
|
|
default Locator getByLabel(String text) {
|
|
return getByLabel(text, null);
|
|
}
|
|
/**
|
|
* Allows locating input elements by the text of the associated {@code <label>} or {@code aria-labelledby} element, or by
|
|
* the {@code aria-label} attribute.
|
|
*
|
|
* <p> <strong>Usage</strong>
|
|
*
|
|
* <p> For example, this method will find inputs by label "Username" and "Password" in the following DOM:
|
|
* <pre>{@code
|
|
* page.getByLabel("Username").fill("john");
|
|
* page.getByLabel("Password").fill("secret");
|
|
* }</pre>
|
|
*
|
|
* @param text Text to locate the element for.
|
|
* @since v1.27
|
|
*/
|
|
Locator getByLabel(String text, GetByLabelOptions options);
|
|
/**
|
|
* Allows locating input elements by the text of the associated {@code <label>} or {@code aria-labelledby} element, or by
|
|
* the {@code aria-label} attribute.
|
|
*
|
|
* <p> <strong>Usage</strong>
|
|
*
|
|
* <p> For example, this method will find inputs by label "Username" and "Password" in the following DOM:
|
|
* <pre>{@code
|
|
* page.getByLabel("Username").fill("john");
|
|
* page.getByLabel("Password").fill("secret");
|
|
* }</pre>
|
|
*
|
|
* @param text Text to locate the element for.
|
|
* @since v1.27
|
|
*/
|
|
default Locator getByLabel(Pattern text) {
|
|
return getByLabel(text, null);
|
|
}
|
|
/**
|
|
* Allows locating input elements by the text of the associated {@code <label>} or {@code aria-labelledby} element, or by
|
|
* the {@code aria-label} attribute.
|
|
*
|
|
* <p> <strong>Usage</strong>
|
|
*
|
|
* <p> For example, this method will find inputs by label "Username" and "Password" in the following DOM:
|
|
* <pre>{@code
|
|
* page.getByLabel("Username").fill("john");
|
|
* page.getByLabel("Password").fill("secret");
|
|
* }</pre>
|
|
*
|
|
* @param text Text to locate the element for.
|
|
* @since v1.27
|
|
*/
|
|
Locator getByLabel(Pattern text, GetByLabelOptions options);
|
|
/**
|
|
* Allows locating input elements by the placeholder text.
|
|
*
|
|
* <p> <strong>Usage</strong>
|
|
*
|
|
* <p> For example, consider the following DOM structure.
|
|
*
|
|
* <p> You can fill the input after locating it by the placeholder text:
|
|
* <pre>{@code
|
|
* page.getByPlaceholder("name@example.com").fill("playwright@microsoft.com");
|
|
* }</pre>
|
|
*
|
|
* @param text Text to locate the element for.
|
|
* @since v1.27
|
|
*/
|
|
default Locator getByPlaceholder(String text) {
|
|
return getByPlaceholder(text, null);
|
|
}
|
|
/**
|
|
* Allows locating input elements by the placeholder text.
|
|
*
|
|
* <p> <strong>Usage</strong>
|
|
*
|
|
* <p> For example, consider the following DOM structure.
|
|
*
|
|
* <p> You can fill the input after locating it by the placeholder text:
|
|
* <pre>{@code
|
|
* page.getByPlaceholder("name@example.com").fill("playwright@microsoft.com");
|
|
* }</pre>
|
|
*
|
|
* @param text Text to locate the element for.
|
|
* @since v1.27
|
|
*/
|
|
Locator getByPlaceholder(String text, GetByPlaceholderOptions options);
|
|
/**
|
|
* Allows locating input elements by the placeholder text.
|
|
*
|
|
* <p> <strong>Usage</strong>
|
|
*
|
|
* <p> For example, consider the following DOM structure.
|
|
*
|
|
* <p> You can fill the input after locating it by the placeholder text:
|
|
* <pre>{@code
|
|
* page.getByPlaceholder("name@example.com").fill("playwright@microsoft.com");
|
|
* }</pre>
|
|
*
|
|
* @param text Text to locate the element for.
|
|
* @since v1.27
|
|
*/
|
|
default Locator getByPlaceholder(Pattern text) {
|
|
return getByPlaceholder(text, null);
|
|
}
|
|
/**
|
|
* Allows locating input elements by the placeholder text.
|
|
*
|
|
* <p> <strong>Usage</strong>
|
|
*
|
|
* <p> For example, consider the following DOM structure.
|
|
*
|
|
* <p> You can fill the input after locating it by the placeholder text:
|
|
* <pre>{@code
|
|
* page.getByPlaceholder("name@example.com").fill("playwright@microsoft.com");
|
|
* }</pre>
|
|
*
|
|
* @param text Text to locate the element for.
|
|
* @since v1.27
|
|
*/
|
|
Locator getByPlaceholder(Pattern text, GetByPlaceholderOptions options);
|
|
/**
|
|
* Allows locating elements by their <a href="https://www.w3.org/TR/wai-aria-1.2/#roles">ARIA role</a>, <a
|
|
* href="https://www.w3.org/TR/wai-aria-1.2/#aria-attributes">ARIA attributes</a> and <a
|
|
* href="https://w3c.github.io/accname/#dfn-accessible-name">accessible name</a>.
|
|
*
|
|
* <p> <strong>Usage</strong>
|
|
*
|
|
* <p> Consider the following DOM structure.
|
|
*
|
|
* <p> You can locate each element by its implicit role:
|
|
* <pre>{@code
|
|
* assertThat(page
|
|
* .getByRole(AriaRole.HEADING,
|
|
* new Page.GetByRoleOptions().setName("Sign up")))
|
|
* .isVisible();
|
|
*
|
|
* page.getByRole(AriaRole.CHECKBOX,
|
|
* new Page.GetByRoleOptions().setName("Subscribe"))
|
|
* .check();
|
|
*
|
|
* page.getByRole(AriaRole.BUTTON,
|
|
* new Page.GetByRoleOptions().setName(
|
|
* Pattern.compile("submit", Pattern.CASE_INSENSITIVE)))
|
|
* .click();
|
|
* }</pre>
|
|
*
|
|
* <p> <strong>Details</strong>
|
|
*
|
|
* <p> Role selector **does not replace** accessibility audits and conformance tests, but rather gives early feedback about the
|
|
* ARIA guidelines.
|
|
*
|
|
* <p> Many html elements have an implicitly <a href="https://w3c.github.io/html-aam/#html-element-role-mappings">defined
|
|
* role</a> that is recognized by the role selector. You can find all the <a
|
|
* href="https://www.w3.org/TR/wai-aria-1.2/#role_definitions">supported roles here</a>. ARIA guidelines **do not
|
|
* recommend** duplicating implicit roles and attributes by setting {@code role} and/or {@code aria-*} attributes to
|
|
* default values.
|
|
*
|
|
* @param role Required aria role.
|
|
* @since v1.27
|
|
*/
|
|
default Locator getByRole(AriaRole role) {
|
|
return getByRole(role, null);
|
|
}
|
|
/**
|
|
* Allows locating elements by their <a href="https://www.w3.org/TR/wai-aria-1.2/#roles">ARIA role</a>, <a
|
|
* href="https://www.w3.org/TR/wai-aria-1.2/#aria-attributes">ARIA attributes</a> and <a
|
|
* href="https://w3c.github.io/accname/#dfn-accessible-name">accessible name</a>.
|
|
*
|
|
* <p> <strong>Usage</strong>
|
|
*
|
|
* <p> Consider the following DOM structure.
|
|
*
|
|
* <p> You can locate each element by its implicit role:
|
|
* <pre>{@code
|
|
* assertThat(page
|
|
* .getByRole(AriaRole.HEADING,
|
|
* new Page.GetByRoleOptions().setName("Sign up")))
|
|
* .isVisible();
|
|
*
|
|
* page.getByRole(AriaRole.CHECKBOX,
|
|
* new Page.GetByRoleOptions().setName("Subscribe"))
|
|
* .check();
|
|
*
|
|
* page.getByRole(AriaRole.BUTTON,
|
|
* new Page.GetByRoleOptions().setName(
|
|
* Pattern.compile("submit", Pattern.CASE_INSENSITIVE)))
|
|
* .click();
|
|
* }</pre>
|
|
*
|
|
* <p> <strong>Details</strong>
|
|
*
|
|
* <p> Role selector **does not replace** accessibility audits and conformance tests, but rather gives early feedback about the
|
|
* ARIA guidelines.
|
|
*
|
|
* <p> Many html elements have an implicitly <a href="https://w3c.github.io/html-aam/#html-element-role-mappings">defined
|
|
* role</a> that is recognized by the role selector. You can find all the <a
|
|
* href="https://www.w3.org/TR/wai-aria-1.2/#role_definitions">supported roles here</a>. ARIA guidelines **do not
|
|
* recommend** duplicating implicit roles and attributes by setting {@code role} and/or {@code aria-*} attributes to
|
|
* default values.
|
|
*
|
|
* @param role Required aria role.
|
|
* @since v1.27
|
|
*/
|
|
Locator getByRole(AriaRole role, GetByRoleOptions options);
|
|
/**
|
|
* Locate element by the test id.
|
|
*
|
|
* <p> <strong>Usage</strong>
|
|
*
|
|
* <p> Consider the following DOM structure.
|
|
*
|
|
* <p> You can locate the element by its test id:
|
|
* <pre>{@code
|
|
* page.getByTestId("directions").click();
|
|
* }</pre>
|
|
*
|
|
* <p> <strong>Details</strong>
|
|
*
|
|
* <p> By default, the {@code data-testid} attribute is used as a test id. Use {@link
|
|
* com.microsoft.playwright.Selectors#setTestIdAttribute Selectors.setTestIdAttribute()} to configure a different test id
|
|
* attribute if necessary.
|
|
*
|
|
* @param testId Id to locate the element by.
|
|
* @since v1.27
|
|
*/
|
|
Locator getByTestId(String testId);
|
|
/**
|
|
* Locate element by the test id.
|
|
*
|
|
* <p> <strong>Usage</strong>
|
|
*
|
|
* <p> Consider the following DOM structure.
|
|
*
|
|
* <p> You can locate the element by its test id:
|
|
* <pre>{@code
|
|
* page.getByTestId("directions").click();
|
|
* }</pre>
|
|
*
|
|
* <p> <strong>Details</strong>
|
|
*
|
|
* <p> By default, the {@code data-testid} attribute is used as a test id. Use {@link
|
|
* com.microsoft.playwright.Selectors#setTestIdAttribute Selectors.setTestIdAttribute()} to configure a different test id
|
|
* attribute if necessary.
|
|
*
|
|
* @param testId Id to locate the element by.
|
|
* @since v1.27
|
|
*/
|
|
Locator getByTestId(Pattern testId);
|
|
/**
|
|
* Allows locating elements that contain given text.
|
|
*
|
|
* <p> See also {@link com.microsoft.playwright.Locator#filter Locator.filter()} that allows to match by another criteria, like
|
|
* an accessible role, and then filter by the text content.
|
|
*
|
|
* <p> <strong>Usage</strong>
|
|
*
|
|
* <p> Consider the following DOM structure:
|
|
*
|
|
* <p> You can locate by text substring, exact string, or a regular expression:
|
|
* <pre>{@code
|
|
* // 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));
|
|
* }</pre>
|
|
*
|
|
* <p> <strong>Details</strong>
|
|
*
|
|
* <p> 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.
|
|
*
|
|
* <p> Input elements of the type {@code button} and {@code submit} are matched by their {@code value} instead of the text
|
|
* content. For example, locating by text {@code "Log in"} matches {@code <input type=button value="Log in">}.
|
|
*
|
|
* @param text Text to locate the element for.
|
|
* @since v1.27
|
|
*/
|
|
default Locator getByText(String text) {
|
|
return getByText(text, null);
|
|
}
|
|
/**
|
|
* Allows locating elements that contain given text.
|
|
*
|
|
* <p> See also {@link com.microsoft.playwright.Locator#filter Locator.filter()} that allows to match by another criteria, like
|
|
* an accessible role, and then filter by the text content.
|
|
*
|
|
* <p> <strong>Usage</strong>
|
|
*
|
|
* <p> Consider the following DOM structure:
|
|
*
|
|
* <p> You can locate by text substring, exact string, or a regular expression:
|
|
* <pre>{@code
|
|
* // 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));
|
|
* }</pre>
|
|
*
|
|
* <p> <strong>Details</strong>
|
|
*
|
|
* <p> 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.
|
|
*
|
|
* <p> Input elements of the type {@code button} and {@code submit} are matched by their {@code value} instead of the text
|
|
* content. For example, locating by text {@code "Log in"} matches {@code <input type=button value="Log in">}.
|
|
*
|
|
* @param text Text to locate the element for.
|
|
* @since v1.27
|
|
*/
|
|
Locator getByText(String text, GetByTextOptions options);
|
|
/**
|
|
* Allows locating elements that contain given text.
|
|
*
|
|
* <p> See also {@link com.microsoft.playwright.Locator#filter Locator.filter()} that allows to match by another criteria, like
|
|
* an accessible role, and then filter by the text content.
|
|
*
|
|
* <p> <strong>Usage</strong>
|
|
*
|
|
* <p> Consider the following DOM structure:
|
|
*
|
|
* <p> You can locate by text substring, exact string, or a regular expression:
|
|
* <pre>{@code
|
|
* // 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));
|
|
* }</pre>
|
|
*
|
|
* <p> <strong>Details</strong>
|
|
*
|
|
* <p> 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.
|
|
*
|
|
* <p> Input elements of the type {@code button} and {@code submit} are matched by their {@code value} instead of the text
|
|
* content. For example, locating by text {@code "Log in"} matches {@code <input type=button value="Log in">}.
|
|
*
|
|
* @param text Text to locate the element for.
|
|
* @since v1.27
|
|
*/
|
|
default Locator getByText(Pattern text) {
|
|
return getByText(text, null);
|
|
}
|
|
/**
|
|
* Allows locating elements that contain given text.
|
|
*
|
|
* <p> See also {@link com.microsoft.playwright.Locator#filter Locator.filter()} that allows to match by another criteria, like
|
|
* an accessible role, and then filter by the text content.
|
|
*
|
|
* <p> <strong>Usage</strong>
|
|
*
|
|
* <p> Consider the following DOM structure:
|
|
*
|
|
* <p> You can locate by text substring, exact string, or a regular expression:
|
|
* <pre>{@code
|
|
* // 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));
|
|
* }</pre>
|
|
*
|
|
* <p> <strong>Details</strong>
|
|
*
|
|
* <p> 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.
|
|
*
|
|
* <p> Input elements of the type {@code button} and {@code submit} are matched by their {@code value} instead of the text
|
|
* content. For example, locating by text {@code "Log in"} matches {@code <input type=button value="Log in">}.
|
|
*
|
|
* @param text Text to locate the element for.
|
|
* @since v1.27
|
|
*/
|
|
Locator getByText(Pattern text, GetByTextOptions options);
|
|
/**
|
|
* Allows locating elements by their title attribute.
|
|
*
|
|
* <p> <strong>Usage</strong>
|
|
*
|
|
* <p> Consider the following DOM structure.
|
|
*
|
|
* <p> You can check the issues count after locating it by the title text:
|
|
* <pre>{@code
|
|
* assertThat(page.getByTitle("Issues count")).hasText("25 issues");
|
|
* }</pre>
|
|
*
|
|
* @param text Text to locate the element for.
|
|
* @since v1.27
|
|
*/
|
|
default Locator getByTitle(String text) {
|
|
return getByTitle(text, null);
|
|
}
|
|
/**
|
|
* Allows locating elements by their title attribute.
|
|
*
|
|
* <p> <strong>Usage</strong>
|
|
*
|
|
* <p> Consider the following DOM structure.
|
|
*
|
|
* <p> You can check the issues count after locating it by the title text:
|
|
* <pre>{@code
|
|
* assertThat(page.getByTitle("Issues count")).hasText("25 issues");
|
|
* }</pre>
|
|
*
|
|
* @param text Text to locate the element for.
|
|
* @since v1.27
|
|
*/
|
|
Locator getByTitle(String text, GetByTitleOptions options);
|
|
/**
|
|
* Allows locating elements by their title attribute.
|
|
*
|
|
* <p> <strong>Usage</strong>
|
|
*
|
|
* <p> Consider the following DOM structure.
|
|
*
|
|
* <p> You can check the issues count after locating it by the title text:
|
|
* <pre>{@code
|
|
* assertThat(page.getByTitle("Issues count")).hasText("25 issues");
|
|
* }</pre>
|
|
*
|
|
* @param text Text to locate the element for.
|
|
* @since v1.27
|
|
*/
|
|
default Locator getByTitle(Pattern text) {
|
|
return getByTitle(text, null);
|
|
}
|
|
/**
|
|
* Allows locating elements by their title attribute.
|
|
*
|
|
* <p> <strong>Usage</strong>
|
|
*
|
|
* <p> Consider the following DOM structure.
|
|
*
|
|
* <p> You can check the issues count after locating it by the title text:
|
|
* <pre>{@code
|
|
* assertThat(page.getByTitle("Issues count")).hasText("25 issues");
|
|
* }</pre>
|
|
*
|
|
* @param text Text to locate the element for.
|
|
* @since v1.27
|
|
*/
|
|
Locator getByTitle(Pattern text, GetByTitleOptions options);
|
|
/**
|
|
* @deprecated Use {@link com.microsoft.playwright.Locator#last Locator.last()} followed by {@link
|
|
* com.microsoft.playwright.Locator#contentFrame Locator.contentFrame()} instead.
|
|
*
|
|
* @since v1.17
|
|
*/
|
|
FrameLocator last();
|
|
/**
|
|
* The method finds an element matching the specified selector in the locator's subtree. It also accepts filter options,
|
|
* similar to {@link com.microsoft.playwright.Locator#filter Locator.filter()} method.
|
|
*
|
|
* <p> <a href="https://playwright.dev/java/docs/locators">Learn more about locators</a>.
|
|
*
|
|
* @param selectorOrLocator A selector or locator to use when resolving DOM element.
|
|
* @since v1.17
|
|
*/
|
|
default Locator locator(String selectorOrLocator) {
|
|
return locator(selectorOrLocator, null);
|
|
}
|
|
/**
|
|
* The method finds an element matching the specified selector in the locator's subtree. It also accepts filter options,
|
|
* similar to {@link com.microsoft.playwright.Locator#filter Locator.filter()} method.
|
|
*
|
|
* <p> <a href="https://playwright.dev/java/docs/locators">Learn more about locators</a>.
|
|
*
|
|
* @param selectorOrLocator A selector or locator to use when resolving DOM element.
|
|
* @since v1.17
|
|
*/
|
|
Locator locator(String selectorOrLocator, LocatorOptions options);
|
|
/**
|
|
* The method finds an element matching the specified selector in the locator's subtree. It also accepts filter options,
|
|
* similar to {@link com.microsoft.playwright.Locator#filter Locator.filter()} method.
|
|
*
|
|
* <p> <a href="https://playwright.dev/java/docs/locators">Learn more about locators</a>.
|
|
*
|
|
* @param selectorOrLocator A selector or locator to use when resolving DOM element.
|
|
* @since v1.17
|
|
*/
|
|
default Locator locator(Locator selectorOrLocator) {
|
|
return locator(selectorOrLocator, null);
|
|
}
|
|
/**
|
|
* The method finds an element matching the specified selector in the locator's subtree. It also accepts filter options,
|
|
* similar to {@link com.microsoft.playwright.Locator#filter Locator.filter()} method.
|
|
*
|
|
* <p> <a href="https://playwright.dev/java/docs/locators">Learn more about locators</a>.
|
|
*
|
|
* @param selectorOrLocator A selector or locator to use when resolving DOM element.
|
|
* @since v1.17
|
|
*/
|
|
Locator locator(Locator selectorOrLocator, LocatorOptions options);
|
|
/**
|
|
* @deprecated Use {@link com.microsoft.playwright.Locator#nth Locator.nth()} followed by {@link
|
|
* com.microsoft.playwright.Locator#contentFrame Locator.contentFrame()} instead.
|
|
*
|
|
* @since v1.17
|
|
*/
|
|
FrameLocator nth(int index);
|
|
/**
|
|
* Returns a {@code Locator} object pointing to the same {@code iframe} as this frame locator.
|
|
*
|
|
* <p> Useful when you have a {@code FrameLocator} object obtained somewhere, and later on would like to interact with the
|
|
* {@code iframe} element.
|
|
*
|
|
* <p> For a reverse operation, use {@link com.microsoft.playwright.Locator#contentFrame Locator.contentFrame()}.
|
|
*
|
|
* <p> <strong>Usage</strong>
|
|
* <pre>{@code
|
|
* FrameLocator frameLocator = page.locator("iframe[name=\"embedded\"]").contentFrame();
|
|
* // ...
|
|
* Locator locator = frameLocator.owner();
|
|
* assertThat(locator).isVisible();
|
|
* }</pre>
|
|
*
|
|
* @since v1.43
|
|
*/
|
|
Locator owner();
|
|
}
|
|
|