mirror of
https://github.com/microsoft/playwright.git
synced 2025-06-26 21:40:17 +00:00
parent
0f72ef0584
commit
7bd8032439
@ -833,26 +833,83 @@ element should intersect viewport at any positive ratio. Defaults to `0`.
|
|||||||
|
|
||||||
Ensures that [Locator] points to an [attached](../actionability.md#attached) and [visible](../actionability.md#visible) DOM node.
|
Ensures that [Locator] points to an [attached](../actionability.md#attached) and [visible](../actionability.md#visible) DOM node.
|
||||||
|
|
||||||
|
To check that at least one element from the list is visible, use [`method: Locator.first`].
|
||||||
|
|
||||||
**Usage**
|
**Usage**
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
// A specific element is visible.
|
||||||
await expect(page.getByText('Welcome')).toBeVisible();
|
await expect(page.getByText('Welcome')).toBeVisible();
|
||||||
|
|
||||||
|
// At least one item in the list is visible.
|
||||||
|
await expect(page.getByTestId('todo-item').first()).toBeVisible();
|
||||||
|
|
||||||
|
// At least one of the two elements is visible, possibly both.
|
||||||
|
await expect(
|
||||||
|
page.getByRole('button', { name: 'Sign in' })
|
||||||
|
.or(page.getByRole('button', { name: 'Sign up' }))
|
||||||
|
.first()
|
||||||
|
).toBeVisible();
|
||||||
```
|
```
|
||||||
|
|
||||||
```java
|
```java
|
||||||
|
// A specific element is visible.
|
||||||
assertThat(page.getByText("Welcome")).isVisible();
|
assertThat(page.getByText("Welcome")).isVisible();
|
||||||
|
|
||||||
|
// At least one item in the list is visible.
|
||||||
|
asserThat(page.getByTestId("todo-item").first()).isVisible();
|
||||||
|
|
||||||
|
// At least one of the two elements is visible, possibly both.
|
||||||
|
asserThat(
|
||||||
|
page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Sign in"))
|
||||||
|
.or(page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Sign up")))
|
||||||
|
.first()
|
||||||
|
).isVisible();
|
||||||
```
|
```
|
||||||
|
|
||||||
```python async
|
```python async
|
||||||
|
# A specific element is visible.
|
||||||
await expect(page.get_by_text("Welcome")).to_be_visible()
|
await expect(page.get_by_text("Welcome")).to_be_visible()
|
||||||
|
|
||||||
|
# At least one item in the list is visible.
|
||||||
|
await expect(page.get_by_test_id("todo-item").first).to_be_visible()
|
||||||
|
|
||||||
|
# At least one of the two elements is visible, possibly both.
|
||||||
|
await expect(
|
||||||
|
page.get_by_role("button", name="Sign in")
|
||||||
|
.or_(page.get_by_role("button", name="Sign up"))
|
||||||
|
.first
|
||||||
|
).to_be_visible()
|
||||||
```
|
```
|
||||||
|
|
||||||
```python sync
|
```python sync
|
||||||
|
# A specific element is visible.
|
||||||
expect(page.get_by_text("Welcome")).to_be_visible()
|
expect(page.get_by_text("Welcome")).to_be_visible()
|
||||||
|
|
||||||
|
# At least one item in the list is visible.
|
||||||
|
expect(page.get_by_test_id("todo-item").first).to_be_visible()
|
||||||
|
|
||||||
|
# At least one of the two elements is visible, possibly both.
|
||||||
|
expect(
|
||||||
|
page.get_by_role("button", name="Sign in")
|
||||||
|
.or_(page.get_by_role("button", name="Sign up"))
|
||||||
|
.first
|
||||||
|
).to_be_visible()
|
||||||
```
|
```
|
||||||
|
|
||||||
```csharp
|
```csharp
|
||||||
|
// A specific element is visible.
|
||||||
await Expect(Page.GetByText("Welcome")).ToBeVisibleAsync();
|
await Expect(Page.GetByText("Welcome")).ToBeVisibleAsync();
|
||||||
|
|
||||||
|
// At least one item in the list is visible.
|
||||||
|
await Expect(Page.GetByTestId("todo-item").First).ToBeVisibleAsync();
|
||||||
|
|
||||||
|
// At least one of the two elements is visible, possibly both.
|
||||||
|
await Expect(
|
||||||
|
Page.GetByRole(AriaRole.Button, new() { Name = "Sign in" })
|
||||||
|
.Or(Page.GetByRole(AriaRole.Button, new() { Name = "Sign up" }))
|
||||||
|
.First
|
||||||
|
).ToBeVisibleAsync();
|
||||||
```
|
```
|
||||||
|
|
||||||
### option: LocatorAssertions.toBeVisible.visible
|
### option: LocatorAssertions.toBeVisible.visible
|
||||||
|
|||||||
@ -1171,13 +1171,13 @@ For example, consider a scenario where you'd like to click on a "New email" butt
|
|||||||
|
|
||||||
:::note
|
:::note
|
||||||
If both "New email" button and security dialog appear on screen, the "or" locator will match both of them,
|
If both "New email" button and security dialog appear on screen, the "or" locator will match both of them,
|
||||||
possibly throwing the ["strict mode violation" error](#strictness).
|
possibly throwing the ["strict mode violation" error](#strictness). In this case, you can use [`method: Locator.first`] to only match one of them.
|
||||||
:::
|
:::
|
||||||
|
|
||||||
```js
|
```js
|
||||||
const newEmail = page.getByRole('button', { name: 'New' });
|
const newEmail = page.getByRole('button', { name: 'New' });
|
||||||
const dialog = page.getByText('Confirm security settings');
|
const dialog = page.getByText('Confirm security settings');
|
||||||
await expect(newEmail.or(dialog)).toBeVisible();
|
await expect(newEmail.or(dialog).first()).toBeVisible();
|
||||||
if (await dialog.isVisible())
|
if (await dialog.isVisible())
|
||||||
await page.getByRole('button', { name: 'Dismiss' }).click();
|
await page.getByRole('button', { name: 'Dismiss' }).click();
|
||||||
await newEmail.click();
|
await newEmail.click();
|
||||||
@ -1186,7 +1186,7 @@ await newEmail.click();
|
|||||||
```java
|
```java
|
||||||
Locator newEmail = page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("New"));
|
Locator newEmail = page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("New"));
|
||||||
Locator dialog = page.getByText("Confirm security settings");
|
Locator dialog = page.getByText("Confirm security settings");
|
||||||
assertThat(newEmail.or(dialog)).isVisible();
|
assertThat(newEmail.or(dialog).first()).isVisible();
|
||||||
if (dialog.isVisible())
|
if (dialog.isVisible())
|
||||||
page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Dismiss")).click();
|
page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Dismiss")).click();
|
||||||
newEmail.click();
|
newEmail.click();
|
||||||
@ -1195,7 +1195,7 @@ newEmail.click();
|
|||||||
```python async
|
```python async
|
||||||
new_email = page.get_by_role("button", name="New")
|
new_email = page.get_by_role("button", name="New")
|
||||||
dialog = page.get_by_text("Confirm security settings")
|
dialog = page.get_by_text("Confirm security settings")
|
||||||
await expect(new_email.or_(dialog)).to_be_visible()
|
await expect(new_email.or_(dialog).first).to_be_visible()
|
||||||
if (await dialog.is_visible()):
|
if (await dialog.is_visible()):
|
||||||
await page.get_by_role("button", name="Dismiss").click()
|
await page.get_by_role("button", name="Dismiss").click()
|
||||||
await new_email.click()
|
await new_email.click()
|
||||||
@ -1204,7 +1204,7 @@ await new_email.click()
|
|||||||
```python sync
|
```python sync
|
||||||
new_email = page.get_by_role("button", name="New")
|
new_email = page.get_by_role("button", name="New")
|
||||||
dialog = page.get_by_text("Confirm security settings")
|
dialog = page.get_by_text("Confirm security settings")
|
||||||
expect(new_email.or_(dialog)).to_be_visible()
|
expect(new_email.or_(dialog).first).to_be_visible()
|
||||||
if (dialog.is_visible()):
|
if (dialog.is_visible()):
|
||||||
page.get_by_role("button", name="Dismiss").click()
|
page.get_by_role("button", name="Dismiss").click()
|
||||||
new_email.click()
|
new_email.click()
|
||||||
@ -1213,7 +1213,7 @@ new_email.click()
|
|||||||
```csharp
|
```csharp
|
||||||
var newEmail = page.GetByRole(AriaRole.Button, new() { Name = "New" });
|
var newEmail = page.GetByRole(AriaRole.Button, new() { Name = "New" });
|
||||||
var dialog = page.GetByText("Confirm security settings");
|
var dialog = page.GetByText("Confirm security settings");
|
||||||
await Expect(newEmail.Or(dialog)).ToBeVisibleAsync();
|
await Expect(newEmail.Or(dialog).First).ToBeVisibleAsync();
|
||||||
if (await dialog.IsVisibleAsync())
|
if (await dialog.IsVisibleAsync())
|
||||||
await page.GetByRole(AriaRole.Button, new() { Name = "Dismiss" }).ClickAsync();
|
await page.GetByRole(AriaRole.Button, new() { Name = "Dismiss" }).ClickAsync();
|
||||||
await newEmail.ClickAsync();
|
await newEmail.ClickAsync();
|
||||||
|
|||||||
14
packages/playwright/types/test.d.ts
vendored
14
packages/playwright/types/test.d.ts
vendored
@ -5455,10 +5455,24 @@ interface LocatorAssertions {
|
|||||||
* Ensures that {@link Locator} points to an [attached](https://playwright.dev/docs/actionability#attached) and
|
* Ensures that {@link Locator} points to an [attached](https://playwright.dev/docs/actionability#attached) and
|
||||||
* [visible](https://playwright.dev/docs/actionability#visible) DOM node.
|
* [visible](https://playwright.dev/docs/actionability#visible) DOM node.
|
||||||
*
|
*
|
||||||
|
* To check that at least one element from the list is visible, use
|
||||||
|
* [locator.first()](https://playwright.dev/docs/api/class-locator#locator-first).
|
||||||
|
*
|
||||||
* **Usage**
|
* **Usage**
|
||||||
*
|
*
|
||||||
* ```js
|
* ```js
|
||||||
|
* // A specific element is visible.
|
||||||
* await expect(page.getByText('Welcome')).toBeVisible();
|
* await expect(page.getByText('Welcome')).toBeVisible();
|
||||||
|
*
|
||||||
|
* // At least one item in the list is visible.
|
||||||
|
* await expect(page.getByTestId('todo-item').first()).toBeVisible();
|
||||||
|
*
|
||||||
|
* // At least one of the two elements is visible, possibly both.
|
||||||
|
* await expect(
|
||||||
|
* page.getByRole('button', { name: 'Sign in' })
|
||||||
|
* .or(page.getByRole('button', { name: 'Sign up' }))
|
||||||
|
* .first()
|
||||||
|
* ).toBeVisible();
|
||||||
* ```
|
* ```
|
||||||
*
|
*
|
||||||
* @param options
|
* @param options
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user