docs(python): enable web-first assertions (#10390)

This commit is contained in:
Max Schmitt 2021-11-18 00:46:30 +01:00 коммит произвёл GitHub
Родитель 70ede0d987
Коммит 0781d0303b
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
5 изменённых файлов: 440 добавлений и 168 удалений

1
.gitignore поставляемый
Просмотреть файл

@ -23,3 +23,4 @@ playwright-report
/packages/*/LICENSE
/packages/*/NOTICE
/packages/playwright/README.md
/packages/playwright-core/api.json

Просмотреть файл

@ -1,5 +1,5 @@
# class: LocatorAssertions
* langs: java
* langs: java, python
The [LocatorAssertions] class provides assertion methods that can be used to make assertions about the [Locator] state in the tests. A new instance of [LocatorAssertions] is created by calling [`method: PlaywrightAssertions.assertThatLocator`]:
@ -18,7 +18,314 @@ public class TestLocator {
}
```
## method: LocatorAssertions.containsText
## method: LocatorAssertions.not
* langs: java
- returns: <[LocatorAssertions]>
Makes the assertion check for the opposite condition. For example, this code tests that the Locator doesn't contain text `"error"`:
```java
assertThat(locator).not().containsText("error");
```
## method: LocatorAssertions.NotToBeChecked
* langs: python
The opposite of [`method: LocatorAssertions.toBeChecked`].
### option: LocatorAssertions.NotToBeChecked.timeout = %%-assertions-timeout-%%
## method: LocatorAssertions.NotToBeDisabled
* langs: python
The opposite of [`method: LocatorAssertions.toBeDisabled`].
### option: LocatorAssertions.NotToBeDisabled.timeout = %%-assertions-timeout-%%
## method: LocatorAssertions.NotToBeEditable
* langs: python
The opposite of [`method: LocatorAssertions.toBeEditable`].
### option: LocatorAssertions.NotToBeEditable.timeout = %%-assertions-timeout-%%
## method: LocatorAssertions.NotToBeEmpty
* langs: python
The opposite of [`method: LocatorAssertions.toBeEmpty`].
### option: LocatorAssertions.NotToBeEmpty.timeout = %%-assertions-timeout-%%
## method: LocatorAssertions.NotToBeEnabled
* langs: python
The opposite of [`method: LocatorAssertions.toBeEnabled`].
### option: LocatorAssertions.NotToBeEnabled.timeout = %%-assertions-timeout-%%
## method: LocatorAssertions.NotToBeFocused
* langs: python
The opposite of [`method: LocatorAssertions.toBeFocused`].
### option: LocatorAssertions.NotToBeFocused.timeout = %%-assertions-timeout-%%
## method: LocatorAssertions.NotToBeHidden
* langs: python
The opposite of [`method: LocatorAssertions.toBeHidden`].
### option: LocatorAssertions.NotToBeHidden.timeout = %%-assertions-timeout-%%
## method: LocatorAssertions.NotToBeVisible
* langs: python
The opposite of [`method: LocatorAssertions.toBeVisible`].
### option: LocatorAssertions.NotToBeVisible.timeout = %%-assertions-timeout-%%
## method: LocatorAssertions.NotToContainText
* langs: python
The opposite of [`method: LocatorAssertions.toContainText`].
### param: LocatorAssertions.NotToContainText.expected
- `expected` <[string]|[RegExp]|[Array]<[string]>|[Array]<[RegExp]>>
Expected substring or RegExp or a list of those.
### option: LocatorAssertions.NotToContainText.useInnerText
- `useInnerText` <[boolean]>
Whether to use `element.innerText` instead of `element.textContent` when retrieving DOM node text.
### option: LocatorAssertions.NotToContainText.timeout = %%-assertions-timeout-%%
## method: LocatorAssertions.NotToHaveAttribute
* langs: python
The opposite of [`method: LocatorAssertions.toHaveAttribute`].
### param: LocatorAssertions.NotToHaveAttribute.name
- `name` <[string]>
Attribute name.
### param: LocatorAssertions.NotToHaveAttribute.value
- `value` <[string]|[RegExp]>
Expected attribute value.
### option: LocatorAssertions.NotToHaveAttribute.timeout = %%-assertions-timeout-%%
## method: LocatorAssertions.NotToHaveClass
* langs: python
The opposite of [`method: LocatorAssertions.toHaveClass`].
### param: LocatorAssertions.NotToHaveClass.expected
- `expected` <[string]|[RegExp]|[Array]<[string]>|[Array]<[RegExp]>>
Expected class or RegExp or a list of those.
### option: LocatorAssertions.NotToHaveClass.timeout = %%-assertions-timeout-%%
## method: LocatorAssertions.NotToHaveCount
* langs: python
The opposite of [`method: LocatorAssertions.toHaveCount`].
### param: LocatorAssertions.NotToHaveCount.count
- `count` <[int]>
Expected count.
### option: LocatorAssertions.NotToHaveCount.timeout = %%-assertions-timeout-%%
## method: LocatorAssertions.NotToHaveCSS
* langs: python
The opposite of [`method: LocatorAssertions.toHaveCSS`].
### param: LocatorAssertions.NotToHaveCSS.name
- `name` <[string]>
CSS property name.
### param: LocatorAssertions.NotToHaveCSS.value
- `value` <[string]|[RegExp]>
CSS property value.
### option: LocatorAssertions.NotToHaveCSS.timeout = %%-assertions-timeout-%%
## method: LocatorAssertions.NotToHaveId
* langs: python
The opposite of [`method: LocatorAssertions.toHaveId`].
### param: LocatorAssertions.NotToHaveId.id
- `id` <[string]|[RegExp]>
Element id.
### option: LocatorAssertions.NotToHaveId.timeout = %%-assertions-timeout-%%
## method: LocatorAssertions.NotToHaveJSProperty
* langs: python
The opposite of [`method: LocatorAssertions.toHaveJSProperty`].
### param: LocatorAssertions.NotToHaveJSProperty.name
- `name` <[string]>
Property name.
### param: LocatorAssertions.NotToHaveJSProperty.value
- `value` <[Serializable]>
Property value.
### option: LocatorAssertions.NotToHaveJSProperty.timeout = %%-assertions-timeout-%%
## method: LocatorAssertions.NotToHaveText
* langs: python
The opposite of [`method: LocatorAssertions.toHaveText`].
### param: LocatorAssertions.NotToHaveText.expected
- `expected` <[string]|[RegExp]|[Array]<[string]>|[Array]<[RegExp]>>
Expected substring or RegExp or a list of those.
### option: LocatorAssertions.NotToHaveText.useInnerText
- `useInnerText` <[boolean]>
Whether to use `element.innerText` instead of `element.textContent` when retrieving DOM node text.
### option: LocatorAssertions.NotToHaveText.timeout = %%-assertions-timeout-%%
## method: LocatorAssertions.NotToHaveValue
* langs: python
The opposite of [`method: LocatorAssertions.toHaveValue`].
### param: LocatorAssertions.NotToHaveValue.value
- `value` <[string]|[RegExp]>
Expected value.
### option: LocatorAssertions.NotToHaveValue.timeout = %%-assertions-timeout-%%
## method: LocatorAssertions.toBeChecked
* langs:
- alias-java: isChecked
Ensures the [Locator] points to a checked input.
```java
assertThat(page.locator(".subscribe")).isChecked();
```
### option: LocatorAssertions.toBeChecked.timeout = %%-assertions-timeout-%%
## method: LocatorAssertions.toBeDisabled
* langs:
- alias-java: isDisabled
Ensures the [Locator] points to a disabled element.
```java
assertThat(page.locator("button.submit")).isDisabled();
```
### option: LocatorAssertions.toBeDisabled.timeout = %%-assertions-timeout-%%
## method: LocatorAssertions.toBeEditable
* langs:
- alias-java: isEditable
Ensures the [Locator] points to an editable element.
```java
assertThat(page.locator("input")).isEditable();
```
### option: LocatorAssertions.toBeEditable.timeout = %%-assertions-timeout-%%
## method: LocatorAssertions.toBeEmpty
* langs:
- alias-java: isEmpty
Ensures the [Locator] points to an empty editable element or to a DOM node that has no text.
```java
assertThat(page.locator("div.warning")).isEmpty();
```
### option: LocatorAssertions.toBeEmpty.timeout = %%-assertions-timeout-%%
## method: LocatorAssertions.toBeEnabled
* langs:
- alias-java: isEnabled
Ensures the [Locator] points to an enabled element.
```java
assertThat(page.locator("button.submit")).isEnabled();
```
### option: LocatorAssertions.toBeEnabled.timeout = %%-assertions-timeout-%%
## method: LocatorAssertions.toBeFocused
* langs:
- alias-java: isFocused
Ensures the [Locator] points to a focused DOM node.
```java
assertThat(page.locator("input")).isFocused();
```
### option: LocatorAssertions.toBeFocused.timeout = %%-assertions-timeout-%%
## method: LocatorAssertions.toBeHidden
* langs:
- alias-java: isHidden
Ensures the [Locator] points to a hidden DOM node, which is the opposite of [visible](./actionability.md#visible).
```java
assertThat(page.locator(".my-element")).isHidden();
```
### option: LocatorAssertions.toBeHidden.timeout = %%-assertions-timeout-%%
## method: LocatorAssertions.toBeVisible
* langs:
- alias-java: isVisible
Ensures the [Locator] points to a [visible](./actionability.md#visible) DOM node.
```java
assertThat(page.locator(".my-element")).toBeVisible();
```
### option: LocatorAssertions.toBeVisible.timeout = %%-assertions-timeout-%%
## method: LocatorAssertions.toContainText
* langs:
- alias-java: containsText
Ensures the [Locator] points to an element that contains the given text. You can use regular expressions for the value as well.
@ -32,19 +339,22 @@ Note that if array is passed as an expected value, entire lists can be asserted:
assertThat(page.locator("list > .list-item")).containsText(new String[] {"Text 1", "Text 4", "Text 5"});
```
### param: LocatorAssertions.containsText.expected
### param: LocatorAssertions.toContainText.expected
- `expected` <[string]|[RegExp]|[Array]<[string]>|[Array]<[RegExp]>>
Expected substring or RegExp or a list of those.
### option: LocatorAssertions.containsText.useInnerText
### option: LocatorAssertions.toContainText.useInnerText
- `useInnerText` <[boolean]>
Whether to use `element.innerText` instead of `element.textContent` when retrieving DOM node text.
### option: LocatorAssertions.containsText.timeout = %%-assertions-timeout-%%
### option: LocatorAssertions.toContainText.timeout = %%-assertions-timeout-%%
## method: LocatorAssertions.hasAttribute
## method: LocatorAssertions.toHaveAttribute
* langs:
- alias-java: hasAttribute
Ensures the [Locator] points to an element with given attribute.
@ -52,19 +362,21 @@ Ensures the [Locator] points to an element with given attribute.
assertThat(page.locator("input")).hasAttribute("type", "text");
```
### param: LocatorAssertions.hasAttribute.name
### param: LocatorAssertions.toHaveAttribute.name
- `name` <[string]>
Attribute name.
### param: LocatorAssertions.hasAttribute.value
### param: LocatorAssertions.toHaveAttribute.value
- `value` <[string]|[RegExp]>
Expected attribute value.
### option: LocatorAssertions.hasAttribute.timeout = %%-assertions-timeout-%%
### option: LocatorAssertions.toHaveAttribute.timeout = %%-assertions-timeout-%%
## method: LocatorAssertions.hasClass
## method: LocatorAssertions.toHaveClass
* langs:
- alias-java: hasClass
Ensures the [Locator] points to an element with given CSS class.
@ -78,14 +390,17 @@ Note that if array is passed as an expected value, entire lists can be asserted:
assertThat(page.locator("list > .component")).hasClass(new String[] {"component", "component selected", "component"});
```
### param: LocatorAssertions.hasClass.expected
### param: LocatorAssertions.toHaveClass.expected
- `expected` <[string]|[RegExp]|[Array]<[string]>|[Array]<[RegExp]>>
Expected class or RegExp or a list of those.
### option: LocatorAssertions.hasClass.timeout = %%-assertions-timeout-%%
### option: LocatorAssertions.toHaveClass.timeout = %%-assertions-timeout-%%
## method: LocatorAssertions.hasCount
## method: LocatorAssertions.toHaveCount
* langs:
- alias-java: hasCount
Ensures the [Locator] resolves to an exact number of DOM nodes.
@ -93,14 +408,16 @@ Ensures the [Locator] resolves to an exact number of DOM nodes.
assertThat(page.locator("list > .component")).hasCount(3);
```
### param: LocatorAssertions.hasCount.count
### param: LocatorAssertions.toHaveCount.count
- `count` <[int]>
Expected count.
### option: LocatorAssertions.hasCount.timeout = %%-assertions-timeout-%%
### option: LocatorAssertions.toHaveCount.timeout = %%-assertions-timeout-%%
## method: LocatorAssertions.hasCSS
## method: LocatorAssertions.toHaveCSS
* langs:
- alias-java: hasCSS
Ensures the [Locator] resolves to an element with the given computed CSS style.
@ -108,19 +425,21 @@ Ensures the [Locator] resolves to an element with the given computed CSS style.
assertThat(page.locator("button")).hasCSS("display", "flex");
```
### param: LocatorAssertions.hasCSS.name
### param: LocatorAssertions.toHaveCSS.name
- `name` <[string]>
CSS property name.
### param: LocatorAssertions.hasCSS.value
### param: LocatorAssertions.toHaveCSS.value
- `value` <[string]|[RegExp]>
CSS property value.
### option: LocatorAssertions.hasCSS.timeout = %%-assertions-timeout-%%
### option: LocatorAssertions.toHaveCSS.timeout = %%-assertions-timeout-%%
## method: LocatorAssertions.hasId
## method: LocatorAssertions.toHaveId
* langs:
- alias-java: hasId
Ensures the [Locator] points to an element with the given DOM Node ID.
@ -128,14 +447,17 @@ Ensures the [Locator] points to an element with the given DOM Node ID.
assertThat(page.locator("input")).hasId("lastname");
```
### param: LocatorAssertions.hasId.id
- `id` <[string]>
### param: LocatorAssertions.toHaveId.id
- `id` <[string]|[RegExp]>
Element id.
### option: LocatorAssertions.hasId.timeout = %%-assertions-timeout-%%
### option: LocatorAssertions.toHaveId.timeout = %%-assertions-timeout-%%
## method: LocatorAssertions.hasJSProperty
## method: LocatorAssertions.toHaveJSProperty
* langs:
- alias-java: hasJSProperty
Ensures the [Locator] points to an element with given JavaScript property. Note that this property can be of a primitive type as well as a plain serializable JavaScript object.
@ -143,19 +465,21 @@ Ensures the [Locator] points to an element with given JavaScript property. Note
assertThat(page.locator("input")).hasJSProperty("type", "text");
```
### param: LocatorAssertions.hasJSProperty.name
### param: LocatorAssertions.toHaveJSProperty.name
- `name` <[string]>
Property name.
### param: LocatorAssertions.hasJSProperty.value
### param: LocatorAssertions.toHaveJSProperty.value
- `value` <[Serializable]>
Property value.
### option: LocatorAssertions.hasJSProperty.timeout = %%-assertions-timeout-%%
### option: LocatorAssertions.toHaveJSProperty.timeout = %%-assertions-timeout-%%
## method: LocatorAssertions.hasText
## method: LocatorAssertions.toHaveText
* langs:
- alias-java: hasText
Ensures the [Locator] points to an element with the given text. You can use regular expressions for the value as well.
@ -170,19 +494,21 @@ Note that if array is passed as an expected value, entire lists can be asserted:
assertThat(page.locator("list > .component")).hasText(new String[] {"Text 1", "Text 2", "Text 3"});
```
### param: LocatorAssertions.hasText.expected
### param: LocatorAssertions.toHaveText.expected
- `expected` <[string]|[RegExp]|[Array]<[string]>|[Array]<[RegExp]>>
Expected substring or RegExp or a list of those.
### option: LocatorAssertions.hasText.useInnerText
### option: LocatorAssertions.toHaveText.useInnerText
- `useInnerText` <[boolean]>
Whether to use `element.innerText` instead of `element.textContent` when retrieving DOM node text.
### option: LocatorAssertions.hasText.timeout = %%-assertions-timeout-%%
### option: LocatorAssertions.toHaveText.timeout = %%-assertions-timeout-%%
## method: LocatorAssertions.hasValue
## method: LocatorAssertions.toHaveValue
* langs:
- alias-java: hasValue
Ensures the [Locator] points to an element with the given input value. You can use regular expressions for the value as well.
@ -190,98 +516,9 @@ Ensures the [Locator] points to an element with the given input value. You can u
assertThat(page.locator("input[type=number]")).hasValue(Pattern.compile("[0-9]"));
```
### param: LocatorAssertions.hasValue.value
### param: LocatorAssertions.toHaveValue.value
- `value` <[string]|[RegExp]>
Expected value.
### option: LocatorAssertions.hasValue.timeout = %%-assertions-timeout-%%
## method: LocatorAssertions.isChecked
Ensures the [Locator] points to a checked input.
```java
assertThat(page.locator(".subscribe")).isChecked();
```
### option: LocatorAssertions.isChecked.timeout = %%-assertions-timeout-%%
## method: LocatorAssertions.isDisabled
Ensures the [Locator] points to a disabled element.
```java
assertThat(page.locator("button.submit")).isDisabled();
```
### option: LocatorAssertions.isDisabled.timeout = %%-assertions-timeout-%%
## method: LocatorAssertions.isEditable
Ensures the [Locator] points to an editable element.
```java
assertThat(page.locator("input")).isEditable();
```
### option: LocatorAssertions.isEditable.timeout = %%-assertions-timeout-%%
## method: LocatorAssertions.isEmpty
Ensures the [Locator] points to an empty editable element or to a DOM node that has no text.
```java
assertThat(page.locator("div.warning")).isEmpty();
```
### option: LocatorAssertions.isEmpty.timeout = %%-assertions-timeout-%%
## method: LocatorAssertions.isEnabled
Ensures the [Locator] points to an enabled element.
```java
assertThat(page.locator("button.submit")).isEnabled();
```
### option: LocatorAssertions.isEnabled.timeout = %%-assertions-timeout-%%
## method: LocatorAssertions.isFocused
Ensures the [Locator] points to a focused DOM node.
```java
assertThat(page.locator("input")).isFocused();
```
### option: LocatorAssertions.isFocused.timeout = %%-assertions-timeout-%%
## method: LocatorAssertions.isHidden
Ensures the [Locator] points to a hidden DOM node, which is the opposite of [visible](./actionability.md#visible).
```java
assertThat(page.locator(".my-element")).isHidden();
```
### option: LocatorAssertions.isHidden.timeout = %%-assertions-timeout-%%
## method: LocatorAssertions.isVisible
Ensures the [Locator] points to a [visible](./actionability.md#visible) DOM node.
```java
assertThat(page.locator(".my-element")).isVisible();
```
### option: LocatorAssertions.isVisible.timeout = %%-assertions-timeout-%%
## method: LocatorAssertions.not
- returns: <[LocatorAssertions]>
Makes the assertion check for the opposite condition. For example, this code tests that the Locator doesn't contain text `"error"`:
```java
assertThat(locator).not().containsText("error");
```
### option: LocatorAssertions.toHaveValue.timeout = %%-assertions-timeout-%%

Просмотреть файл

@ -1,5 +1,5 @@
# class: PageAssertions
* langs: java
* langs: java, python
The [PageAssertions] class provides assertion methods that can be used to make assertions about the [Page] state in the tests. A new instance of [LocatorAssertions] is created by calling [`method: PlaywrightAssertions.assertThatPage`]:
@ -18,37 +18,9 @@ public class TestPage {
}
```
## method: PageAssertions.hasTitle
Ensures the page has the given title.
```java
assertThat(page).hasTitle("Playwright");
```
### param: PageAssertions.hasTitle.titleOrRegExp
- `titleOrRegExp` <[string]|[RegExp]>
Expected title or RegExp.
### option: PageAssertions.hasTitle.timeout = %%-assertions-timeout-%%
## method: PageAssertions.hasURL
Ensures the page is navigated to the given URL.
```java
assertThat(page).hasURL(".com");
```
### param: PageAssertions.hasURL.urlOrRegExp
- `urlOrRegExp` <[string]|[RegExp]>
Expected substring or RegExp.
### option: PageAssertions.hasURL.timeout = %%-assertions-timeout-%%
## method: PageAssertions.not
* langs: java
- returns: <[PageAssertions]>
Makes the assertion check for the opposite condition. For example, this code tests that the page URL doesn't contain `"error"`:
@ -56,3 +28,63 @@ Makes the assertion check for the opposite condition. For example, this code tes
```java
assertThat(page).not().hasURL("error");
```
## method: PageAssertions.NotToHaveTitle
* langs: python
The opposite of [`method: PageAssertions.toHaveTitle`].
### param: PageAssertions.NotToHaveTitle.titleOrRegExp
- `titleOrRegExp` <[string]|[RegExp]>
Expected title or RegExp.
### option: PageAssertions.NotToHaveTitle.timeout = %%-assertions-timeout-%%
## method: PageAssertions.NotToHaveURL
* langs: python
- alias-java: hasURL
The opposite of [`method: PageAssertions.toHaveURL`].
### param: PageAssertions.NotToHaveURL.urlOrRegExp
- `urlOrRegExp` <[string]|[RegExp]>
Expected substring or RegExp.
### option: PageAssertions.NotToHaveURL.timeout = %%-assertions-timeout-%%
## method: PageAssertions.toHaveTitle
* langs:
- alias-java: hasTitle
Ensures the page has the given title.
```java
assertThat(page).hasTitle("Playwright");
```
### param: PageAssertions.toHaveTitle.titleOrRegExp
- `titleOrRegExp` <[string]|[RegExp]>
Expected title or RegExp.
### option: PageAssertions.toHaveTitle.timeout = %%-assertions-timeout-%%
## method: PageAssertions.toHaveURL
* langs:
- alias-java: hasURL
Ensures the page is navigated to the given URL.
```java
assertThat(page).hasURL(".com");
```
### param: PageAssertions.toHaveURL.urlOrRegExp
- `urlOrRegExp` <[string]|[RegExp]>
Expected substring or RegExp.
### option: PageAssertions.toHaveURL.timeout = %%-assertions-timeout-%%

Просмотреть файл

@ -1,5 +1,5 @@
# class: PlaywrightAssertions
* langs: java
* langs: java, python
The [PlaywrightAssertions] class provides convenience methods for creating assertions that will wait until the expected condition is met.
@ -37,8 +37,9 @@ To use Playwright assertions add the following dependency into the `pom.xml` of
```
## method: PlaywrightAssertions.assertThatLocator
* langs: java
* langs: java, python
- alias-java: assertThat
- alias-python: expect
- returns: <[LocatorAssertions]>
Creates a [LocatorAssertions] object for the given [Locator].
@ -53,8 +54,9 @@ PlaywrightAssertions.assertThat(locator).isVisible();
[Locator] object to use for assertions.
## method: PlaywrightAssertions.assertThatPage
* langs: java
* langs: java, python
- alias-java: assertThat
- alias-python: expect
- returns: <[PageAssertions]>
Creates a [PageAssertions] object for the given [Page].

Просмотреть файл

@ -224,6 +224,18 @@ export function toHaveText(
}
}
export function toHaveValue(
this: ReturnType<Expect['getState']>,
locator: LocatorEx,
expected: string | RegExp,
options?: { timeout?: number },
) {
return toMatchText.call(this, 'toHaveValue', locator, 'Locator', async (isNot, timeout) => {
const expectedText = toExpectedTextValues([expected]);
return await locator._expect('to.have.value', { expectedText, isNot, timeout });
}, expected, options);
}
export function toHaveTitle(
this: ReturnType<Expect['getState']>,
page: Page,
@ -251,15 +263,3 @@ export function toHaveURL(
return await locator._expect('to.have.url', { expectedText, isNot, timeout });
}, expected, options);
}
export function toHaveValue(
this: ReturnType<Expect['getState']>,
locator: LocatorEx,
expected: string | RegExp,
options?: { timeout?: number },
) {
return toMatchText.call(this, 'toHaveValue', locator, 'Locator', async (isNot, timeout) => {
const expectedText = toExpectedTextValues([expected]);
return await locator._expect('to.have.value', { expectedText, isNot, timeout });
}, expected, options);
}