1
0
mirror of synced 2026-05-23 11:13:15 +00:00

Compare commits

..

10 Commits

Author SHA1 Message Date
Yury Semikhatsky f38f97718d chore: mark 1.39.0 (#1410) 2023-10-13 14:01:59 -07:00
Jayapraveen Arcot aa4f9754de docs: update the system requirements link in readme (#1408) 2023-10-13 11:46:20 -07:00
Yury Semikhatsky 7d9d9a2d9d chore: roll driver to 1.39.0 (#1409) 2023-10-13 11:45:23 -07:00
Yury Semikhatsky db1c899cf6 chore: unflake TestBrowserContextProxy.shouldExcludePatterns (#1404) 2023-10-11 15:23:46 -07:00
Yury Semikhatsky 91e70280a3 chore: update driver to 1.39.0-beta (Oct 11) (#1403) 2023-10-11 12:39:37 -07:00
Yury Semikhatsky 5fe5a3e925 Revert "feat(junit-playwright) (#1371)" (#1402)
This reverts commit fb2188cd2a.
2023-10-10 16:32:08 -07:00
uchagani fb2188cd2a feat(junit-playwright) (#1371) 2023-09-29 16:41:01 -07:00
Yury Semikhatsky fc4a536308 chore: bump maven version (#1392) 2023-09-20 11:39:56 -07:00
Yury Semikhatsky 4312a98ae0 test: unflake cookie roundtrip (#1388) 2023-09-18 20:44:51 -07:00
Yury Semikhatsky f629f915de chore: set dev version to 1.39.0-SNAPSHOT (#1387) 2023-09-18 17:32:19 -07:00
38 changed files with 291 additions and 122 deletions
+4 -4
View File
@@ -11,11 +11,11 @@ Playwright is a Java library to automate [Chromium](https://www.chromium.org/Hom
| | Linux | macOS | Windows |
| :--- | :---: | :---: | :---: |
| Chromium <!-- GEN:chromium-version -->117.0.5938.62<!-- GEN:stop --> | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| WebKit <!-- GEN:webkit-version -->17.0<!-- GEN:stop --> | ✅ | ✅ | ✅ |
| Firefox <!-- GEN:firefox-version -->117.0<!-- GEN:stop --> | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| Chromium <!-- GEN:chromium-version -->119.0.6045.9<!-- GEN:stop --> | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| WebKit <!-- GEN:webkit-version -->17.4<!-- GEN:stop --> | ✅ | ✅ | ✅ |
| Firefox <!-- GEN:firefox-version -->118.0.1<!-- GEN:stop --> | :white_check_mark: | :white_check_mark: | :white_check_mark: |
Headless execution is supported for all the browsers on all platforms. Check out [system requirements](https://playwright.dev/java/docs/next/intro/#system-requirements) for details.
Headless execution is supported for all the browsers on all platforms. Check out [system requirements](https://playwright.dev/java/docs/intro#system-requirements) for details.
* [Usage](#usage)
- [Add Maven dependency](#add-maven-dependency)
+1 -1
View File
@@ -6,7 +6,7 @@
<parent>
<groupId>com.microsoft.playwright</groupId>
<artifactId>parent-pom</artifactId>
<version>1.38.0</version>
<version>1.39.0</version>
</parent>
<artifactId>driver-bundle</artifactId>
+1 -1
View File
@@ -6,7 +6,7 @@
<parent>
<groupId>com.microsoft.playwright</groupId>
<artifactId>parent-pom</artifactId>
<version>1.38.0</version>
<version>1.39.0</version>
</parent>
<artifactId>driver</artifactId>
+1 -1
View File
@@ -6,7 +6,7 @@
<groupId>org.example</groupId>
<artifactId>examples</artifactId>
<version>1.38.0</version>
<version>1.39.0</version>
<name>Playwright Client Examples</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+1 -1
View File
@@ -7,7 +7,7 @@
<parent>
<groupId>com.microsoft.playwright</groupId>
<artifactId>parent-pom</artifactId>
<version>1.38.0</version>
<version>1.39.0</version>
</parent>
<artifactId>playwright</artifactId>
@@ -1878,7 +1878,7 @@ public interface ElementHandle extends JSHandle {
*
* <p> **Usage**
* <pre>{@code
* // single selection matching the value
* // Single selection matching the value or label
* handle.selectOption("blue");
* // single selection matching the label
* handle.selectOption(new SelectOption().setLabel("Blue"));
@@ -1909,7 +1909,7 @@ public interface ElementHandle extends JSHandle {
*
* <p> **Usage**
* <pre>{@code
* // single selection matching the value
* // Single selection matching the value or label
* handle.selectOption("blue");
* // single selection matching the label
* handle.selectOption(new SelectOption().setLabel("Blue"));
@@ -1938,7 +1938,7 @@ public interface ElementHandle extends JSHandle {
*
* <p> **Usage**
* <pre>{@code
* // single selection matching the value
* // Single selection matching the value or label
* handle.selectOption("blue");
* // single selection matching the label
* handle.selectOption(new SelectOption().setLabel("Blue"));
@@ -1969,7 +1969,7 @@ public interface ElementHandle extends JSHandle {
*
* <p> **Usage**
* <pre>{@code
* // single selection matching the value
* // Single selection matching the value or label
* handle.selectOption("blue");
* // single selection matching the label
* handle.selectOption(new SelectOption().setLabel("Blue"));
@@ -1998,7 +1998,7 @@ public interface ElementHandle extends JSHandle {
*
* <p> **Usage**
* <pre>{@code
* // single selection matching the value
* // Single selection matching the value or label
* handle.selectOption("blue");
* // single selection matching the label
* handle.selectOption(new SelectOption().setLabel("Blue"));
@@ -2029,7 +2029,7 @@ public interface ElementHandle extends JSHandle {
*
* <p> **Usage**
* <pre>{@code
* // single selection matching the value
* // Single selection matching the value or label
* handle.selectOption("blue");
* // single selection matching the label
* handle.selectOption(new SelectOption().setLabel("Blue"));
@@ -2058,7 +2058,7 @@ public interface ElementHandle extends JSHandle {
*
* <p> **Usage**
* <pre>{@code
* // single selection matching the value
* // Single selection matching the value or label
* handle.selectOption("blue");
* // single selection matching the label
* handle.selectOption(new SelectOption().setLabel("Blue"));
@@ -2089,7 +2089,7 @@ public interface ElementHandle extends JSHandle {
*
* <p> **Usage**
* <pre>{@code
* // single selection matching the value
* // Single selection matching the value or label
* handle.selectOption("blue");
* // single selection matching the label
* handle.selectOption(new SelectOption().setLabel("Blue"));
@@ -2118,7 +2118,7 @@ public interface ElementHandle extends JSHandle {
*
* <p> **Usage**
* <pre>{@code
* // single selection matching the value
* // Single selection matching the value or label
* handle.selectOption("blue");
* // single selection matching the label
* handle.selectOption(new SelectOption().setLabel("Blue"));
@@ -2149,7 +2149,7 @@ public interface ElementHandle extends JSHandle {
*
* <p> **Usage**
* <pre>{@code
* // single selection matching the value
* // Single selection matching the value or label
* handle.selectOption("blue");
* // single selection matching the label
* handle.selectOption(new SelectOption().setLabel("Blue"));
@@ -2178,7 +2178,7 @@ public interface ElementHandle extends JSHandle {
*
* <p> **Usage**
* <pre>{@code
* // single selection matching the value
* // Single selection matching the value or label
* handle.selectOption("blue");
* // single selection matching the label
* handle.selectOption(new SelectOption().setLabel("Blue"));
@@ -2209,7 +2209,7 @@ public interface ElementHandle extends JSHandle {
*
* <p> **Usage**
* <pre>{@code
* // single selection matching the value
* // Single selection matching the value or label
* handle.selectOption("blue");
* // single selection matching the label
* handle.selectOption(new SelectOption().setLabel("Blue"));
@@ -4058,7 +4058,7 @@ public interface Frame {
*
* <p> **Usage**
* <pre>{@code
* // single selection matching the value
* // Single selection matching the value or label
* frame.selectOption("select#colors", "blue");
* // single selection matching both the value and the label
* frame.selectOption("select#colors", new SelectOption().setLabel("Blue"));
@@ -4091,7 +4091,7 @@ public interface Frame {
*
* <p> **Usage**
* <pre>{@code
* // single selection matching the value
* // Single selection matching the value or label
* frame.selectOption("select#colors", "blue");
* // single selection matching both the value and the label
* frame.selectOption("select#colors", new SelectOption().setLabel("Blue"));
@@ -4122,7 +4122,7 @@ public interface Frame {
*
* <p> **Usage**
* <pre>{@code
* // single selection matching the value
* // Single selection matching the value or label
* frame.selectOption("select#colors", "blue");
* // single selection matching both the value and the label
* frame.selectOption("select#colors", new SelectOption().setLabel("Blue"));
@@ -4155,7 +4155,7 @@ public interface Frame {
*
* <p> **Usage**
* <pre>{@code
* // single selection matching the value
* // Single selection matching the value or label
* frame.selectOption("select#colors", "blue");
* // single selection matching both the value and the label
* frame.selectOption("select#colors", new SelectOption().setLabel("Blue"));
@@ -4186,7 +4186,7 @@ public interface Frame {
*
* <p> **Usage**
* <pre>{@code
* // single selection matching the value
* // Single selection matching the value or label
* frame.selectOption("select#colors", "blue");
* // single selection matching both the value and the label
* frame.selectOption("select#colors", new SelectOption().setLabel("Blue"));
@@ -4219,7 +4219,7 @@ public interface Frame {
*
* <p> **Usage**
* <pre>{@code
* // single selection matching the value
* // Single selection matching the value or label
* frame.selectOption("select#colors", "blue");
* // single selection matching both the value and the label
* frame.selectOption("select#colors", new SelectOption().setLabel("Blue"));
@@ -4250,7 +4250,7 @@ public interface Frame {
*
* <p> **Usage**
* <pre>{@code
* // single selection matching the value
* // Single selection matching the value or label
* frame.selectOption("select#colors", "blue");
* // single selection matching both the value and the label
* frame.selectOption("select#colors", new SelectOption().setLabel("Blue"));
@@ -4283,7 +4283,7 @@ public interface Frame {
*
* <p> **Usage**
* <pre>{@code
* // single selection matching the value
* // Single selection matching the value or label
* frame.selectOption("select#colors", "blue");
* // single selection matching both the value and the label
* frame.selectOption("select#colors", new SelectOption().setLabel("Blue"));
@@ -4314,7 +4314,7 @@ public interface Frame {
*
* <p> **Usage**
* <pre>{@code
* // single selection matching the value
* // Single selection matching the value or label
* frame.selectOption("select#colors", "blue");
* // single selection matching both the value and the label
* frame.selectOption("select#colors", new SelectOption().setLabel("Blue"));
@@ -4347,7 +4347,7 @@ public interface Frame {
*
* <p> **Usage**
* <pre>{@code
* // single selection matching the value
* // Single selection matching the value or label
* frame.selectOption("select#colors", "blue");
* // single selection matching both the value and the label
* frame.selectOption("select#colors", new SelectOption().setLabel("Blue"));
@@ -4378,7 +4378,7 @@ public interface Frame {
*
* <p> **Usage**
* <pre>{@code
* // single selection matching the value
* // Single selection matching the value or label
* frame.selectOption("select#colors", "blue");
* // single selection matching both the value and the label
* frame.selectOption("select#colors", new SelectOption().setLabel("Blue"));
@@ -4411,7 +4411,7 @@ public interface Frame {
*
* <p> **Usage**
* <pre>{@code
* // single selection matching the value
* // Single selection matching the value or label
* frame.selectOption("select#colors", "blue");
* // single selection matching both the value and the label
* frame.selectOption("select#colors", new SelectOption().setLabel("Blue"));
@@ -2096,6 +2096,10 @@ public interface Locator {
/**
* Returns an array of {@code node.innerText} values for all matching nodes.
*
* <p> <strong>NOTE:</strong> If you need to assert text on the page, prefer {@link LocatorAssertions#hasText LocatorAssertions.hasText()} with {@code
* useInnerText} option to avoid flakiness. See <a href="https://playwright.dev/java/docs/test-assertions">assertions
* guide</a> for more details.
*
* <p> **Usage**
* <pre>{@code
* String[] texts = page.getByRole(AriaRole.LINK).allInnerTexts();
@@ -2107,6 +2111,9 @@ public interface Locator {
/**
* Returns an array of {@code node.textContent} values for all matching nodes.
*
* <p> <strong>NOTE:</strong> If you need to assert text on the page, prefer {@link LocatorAssertions#hasText LocatorAssertions.hasText()} to avoid
* flakiness. See <a href="https://playwright.dev/java/docs/test-assertions">assertions guide</a> for more details.
*
* <p> **Usage**
* <pre>{@code
* String[] texts = page.getByRole(AriaRole.LINK).allTextContents();
@@ -2380,6 +2387,10 @@ public interface Locator {
/**
* Returns the number of elements matching the locator.
*
* <p> <strong>NOTE:</strong> If you need to assert the number of elements on the page, prefer {@link LocatorAssertions#hasCount
* LocatorAssertions.hasCount()} to avoid flakiness. See <a
* href="https://playwright.dev/java/docs/test-assertions">assertions guide</a> for more details.
*
* <p> **Usage**
* <pre>{@code
* int count = page.getByRole(AriaRole.LISTITEM).count();
@@ -2986,6 +2997,10 @@ public interface Locator {
/**
* Returns the matching element's attribute value.
*
* <p> <strong>NOTE:</strong> If you need to assert an element's attribute, prefer {@link LocatorAssertions#hasAttribute
* LocatorAssertions.hasAttribute()} to avoid flakiness. See <a
* href="https://playwright.dev/java/docs/test-assertions">assertions guide</a> for more details.
*
* @param name Attribute name to get the value for.
* @since v1.14
*/
@@ -2995,6 +3010,10 @@ public interface Locator {
/**
* Returns the matching element's attribute value.
*
* <p> <strong>NOTE:</strong> If you need to assert an element's attribute, prefer {@link LocatorAssertions#hasAttribute
* LocatorAssertions.hasAttribute()} to avoid flakiness. See <a
* href="https://playwright.dev/java/docs/test-assertions">assertions guide</a> for more details.
*
* @param name Attribute name to get the value for.
* @since v1.14
*/
@@ -3634,6 +3653,10 @@ public interface Locator {
* Returns the <a href="https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/innerText">{@code
* element.innerText}</a>.
*
* <p> <strong>NOTE:</strong> If you need to assert text on the page, prefer {@link LocatorAssertions#hasText LocatorAssertions.hasText()} with {@code
* useInnerText} option to avoid flakiness. See <a href="https://playwright.dev/java/docs/test-assertions">assertions
* guide</a> for more details.
*
* @since v1.14
*/
default String innerText() {
@@ -3643,12 +3666,19 @@ public interface Locator {
* Returns the <a href="https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/innerText">{@code
* element.innerText}</a>.
*
* <p> <strong>NOTE:</strong> If you need to assert text on the page, prefer {@link LocatorAssertions#hasText LocatorAssertions.hasText()} with {@code
* useInnerText} option to avoid flakiness. See <a href="https://playwright.dev/java/docs/test-assertions">assertions
* guide</a> for more details.
*
* @since v1.14
*/
String innerText(InnerTextOptions options);
/**
* Returns the value for the matching {@code <input>} or {@code <textarea>} or {@code <select>} element.
*
* <p> <strong>NOTE:</strong> If you need to assert input value, prefer {@link LocatorAssertions#hasValue LocatorAssertions.hasValue()} to avoid
* flakiness. See <a href="https://playwright.dev/java/docs/test-assertions">assertions guide</a> for more details.
*
* <p> **Usage**
* <pre>{@code
* String value = page.getByRole(AriaRole.TEXTBOX).inputValue();
@@ -3669,6 +3699,9 @@ public interface Locator {
/**
* Returns the value for the matching {@code <input>} or {@code <textarea>} or {@code <select>} element.
*
* <p> <strong>NOTE:</strong> If you need to assert input value, prefer {@link LocatorAssertions#hasValue LocatorAssertions.hasValue()} to avoid
* flakiness. See <a href="https://playwright.dev/java/docs/test-assertions">assertions guide</a> for more details.
*
* <p> **Usage**
* <pre>{@code
* String value = page.getByRole(AriaRole.TEXTBOX).inputValue();
@@ -3687,6 +3720,10 @@ public interface Locator {
/**
* Returns whether the element is checked. Throws if the element is not a checkbox or radio input.
*
* <p> <strong>NOTE:</strong> If you need to assert that checkbox is checked, prefer {@link LocatorAssertions#isChecked LocatorAssertions.isChecked()}
* to avoid flakiness. See <a href="https://playwright.dev/java/docs/test-assertions">assertions guide</a> for more
* details.
*
* <p> **Usage**
* <pre>{@code
* boolean checked = page.getByRole(AriaRole.CHECKBOX).isChecked();
@@ -3700,6 +3737,10 @@ public interface Locator {
/**
* Returns whether the element is checked. Throws if the element is not a checkbox or radio input.
*
* <p> <strong>NOTE:</strong> If you need to assert that checkbox is checked, prefer {@link LocatorAssertions#isChecked LocatorAssertions.isChecked()}
* to avoid flakiness. See <a href="https://playwright.dev/java/docs/test-assertions">assertions guide</a> for more
* details.
*
* <p> **Usage**
* <pre>{@code
* boolean checked = page.getByRole(AriaRole.CHECKBOX).isChecked();
@@ -3712,6 +3753,10 @@ public interface Locator {
* Returns whether the element is disabled, the opposite of <a
* href="https://playwright.dev/java/docs/actionability#enabled">enabled</a>.
*
* <p> <strong>NOTE:</strong> If you need to assert that an element is disabled, prefer {@link LocatorAssertions#isDisabled
* LocatorAssertions.isDisabled()} to avoid flakiness. See <a
* href="https://playwright.dev/java/docs/test-assertions">assertions guide</a> for more details.
*
* <p> **Usage**
* <pre>{@code
* boolean disabled = page.getByRole(AriaRole.BUTTON).isDisabled();
@@ -3726,6 +3771,10 @@ public interface Locator {
* Returns whether the element is disabled, the opposite of <a
* href="https://playwright.dev/java/docs/actionability#enabled">enabled</a>.
*
* <p> <strong>NOTE:</strong> If you need to assert that an element is disabled, prefer {@link LocatorAssertions#isDisabled
* LocatorAssertions.isDisabled()} to avoid flakiness. See <a
* href="https://playwright.dev/java/docs/test-assertions">assertions guide</a> for more details.
*
* <p> **Usage**
* <pre>{@code
* boolean disabled = page.getByRole(AriaRole.BUTTON).isDisabled();
@@ -3737,6 +3786,10 @@ public interface Locator {
/**
* Returns whether the element is <a href="https://playwright.dev/java/docs/actionability#editable">editable</a>.
*
* <p> <strong>NOTE:</strong> If you need to assert that an element is editable, prefer {@link LocatorAssertions#isEditable
* LocatorAssertions.isEditable()} to avoid flakiness. See <a
* href="https://playwright.dev/java/docs/test-assertions">assertions guide</a> for more details.
*
* <p> **Usage**
* <pre>{@code
* boolean editable = page.getByRole(AriaRole.TEXTBOX).isEditable();
@@ -3750,6 +3803,10 @@ public interface Locator {
/**
* Returns whether the element is <a href="https://playwright.dev/java/docs/actionability#editable">editable</a>.
*
* <p> <strong>NOTE:</strong> If you need to assert that an element is editable, prefer {@link LocatorAssertions#isEditable
* LocatorAssertions.isEditable()} to avoid flakiness. See <a
* href="https://playwright.dev/java/docs/test-assertions">assertions guide</a> for more details.
*
* <p> **Usage**
* <pre>{@code
* boolean editable = page.getByRole(AriaRole.TEXTBOX).isEditable();
@@ -3761,6 +3818,10 @@ public interface Locator {
/**
* Returns whether the element is <a href="https://playwright.dev/java/docs/actionability#enabled">enabled</a>.
*
* <p> <strong>NOTE:</strong> If you need to assert that an element is enabled, prefer {@link LocatorAssertions#isEnabled
* LocatorAssertions.isEnabled()} to avoid flakiness. See <a
* href="https://playwright.dev/java/docs/test-assertions">assertions guide</a> for more details.
*
* <p> **Usage**
* <pre>{@code
* boolean enabled = page.getByRole(AriaRole.BUTTON).isEnabled();
@@ -3774,6 +3835,10 @@ public interface Locator {
/**
* Returns whether the element is <a href="https://playwright.dev/java/docs/actionability#enabled">enabled</a>.
*
* <p> <strong>NOTE:</strong> If you need to assert that an element is enabled, prefer {@link LocatorAssertions#isEnabled
* LocatorAssertions.isEnabled()} to avoid flakiness. See <a
* href="https://playwright.dev/java/docs/test-assertions">assertions guide</a> for more details.
*
* <p> **Usage**
* <pre>{@code
* boolean enabled = page.getByRole(AriaRole.BUTTON).isEnabled();
@@ -3786,6 +3851,9 @@ public interface Locator {
* Returns whether the element is hidden, the opposite of <a
* href="https://playwright.dev/java/docs/actionability#visible">visible</a>.
*
* <p> <strong>NOTE:</strong> If you need to assert that element is hidden, prefer {@link LocatorAssertions#isHidden LocatorAssertions.isHidden()} to
* avoid flakiness. See <a href="https://playwright.dev/java/docs/test-assertions">assertions guide</a> for more details.
*
* <p> **Usage**
* <pre>{@code
* boolean hidden = page.getByRole(AriaRole.BUTTON).isHidden();
@@ -3800,6 +3868,9 @@ public interface Locator {
* Returns whether the element is hidden, the opposite of <a
* href="https://playwright.dev/java/docs/actionability#visible">visible</a>.
*
* <p> <strong>NOTE:</strong> If you need to assert that element is hidden, prefer {@link LocatorAssertions#isHidden LocatorAssertions.isHidden()} to
* avoid flakiness. See <a href="https://playwright.dev/java/docs/test-assertions">assertions guide</a> for more details.
*
* <p> **Usage**
* <pre>{@code
* boolean hidden = page.getByRole(AriaRole.BUTTON).isHidden();
@@ -3811,6 +3882,10 @@ public interface Locator {
/**
* Returns whether the element is <a href="https://playwright.dev/java/docs/actionability#visible">visible</a>.
*
* <p> <strong>NOTE:</strong> If you need to assert that element is visible, prefer {@link LocatorAssertions#isVisible LocatorAssertions.isVisible()}
* to avoid flakiness. See <a href="https://playwright.dev/java/docs/test-assertions">assertions guide</a> for more
* details.
*
* <p> **Usage**
* <pre>{@code
* boolean visible = page.getByRole(AriaRole.BUTTON).isVisible();
@@ -3824,6 +3899,10 @@ public interface Locator {
/**
* Returns whether the element is <a href="https://playwright.dev/java/docs/actionability#visible">visible</a>.
*
* <p> <strong>NOTE:</strong> If you need to assert that element is visible, prefer {@link LocatorAssertions#isVisible LocatorAssertions.isVisible()}
* to avoid flakiness. See <a href="https://playwright.dev/java/docs/test-assertions">assertions guide</a> for more
* details.
*
* <p> **Usage**
* <pre>{@code
* boolean visible = page.getByRole(AriaRole.BUTTON).isVisible();
@@ -4951,6 +5030,9 @@ public interface Locator {
/**
* Returns the <a href="https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent">{@code node.textContent}</a>.
*
* <p> <strong>NOTE:</strong> If you need to assert text on the page, prefer {@link LocatorAssertions#hasText LocatorAssertions.hasText()} to avoid
* flakiness. See <a href="https://playwright.dev/java/docs/test-assertions">assertions guide</a> for more details.
*
* @since v1.14
*/
default String textContent() {
@@ -4959,6 +5041,9 @@ public interface Locator {
/**
* Returns the <a href="https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent">{@code node.textContent}</a>.
*
* <p> <strong>NOTE:</strong> If you need to assert text on the page, prefer {@link LocatorAssertions#hasText LocatorAssertions.hasText()} to avoid
* flakiness. See <a href="https://playwright.dev/java/docs/test-assertions">assertions guide</a> for more details.
*
* @since v1.14
*/
String textContent(TextContentOptions options);
@@ -6257,7 +6257,7 @@ public interface Page extends AutoCloseable {
*
* <p> **Usage**
* <pre>{@code
* // single selection matching the value
* // Single selection matching the value or label
* page.selectOption("select#colors", "blue");
* // single selection matching both the value and the label
* page.selectOption("select#colors", new SelectOption().setLabel("Blue"));
@@ -6290,7 +6290,7 @@ public interface Page extends AutoCloseable {
*
* <p> **Usage**
* <pre>{@code
* // single selection matching the value
* // Single selection matching the value or label
* page.selectOption("select#colors", "blue");
* // single selection matching both the value and the label
* page.selectOption("select#colors", new SelectOption().setLabel("Blue"));
@@ -6321,7 +6321,7 @@ public interface Page extends AutoCloseable {
*
* <p> **Usage**
* <pre>{@code
* // single selection matching the value
* // Single selection matching the value or label
* page.selectOption("select#colors", "blue");
* // single selection matching both the value and the label
* page.selectOption("select#colors", new SelectOption().setLabel("Blue"));
@@ -6354,7 +6354,7 @@ public interface Page extends AutoCloseable {
*
* <p> **Usage**
* <pre>{@code
* // single selection matching the value
* // Single selection matching the value or label
* page.selectOption("select#colors", "blue");
* // single selection matching both the value and the label
* page.selectOption("select#colors", new SelectOption().setLabel("Blue"));
@@ -6385,7 +6385,7 @@ public interface Page extends AutoCloseable {
*
* <p> **Usage**
* <pre>{@code
* // single selection matching the value
* // Single selection matching the value or label
* page.selectOption("select#colors", "blue");
* // single selection matching both the value and the label
* page.selectOption("select#colors", new SelectOption().setLabel("Blue"));
@@ -6418,7 +6418,7 @@ public interface Page extends AutoCloseable {
*
* <p> **Usage**
* <pre>{@code
* // single selection matching the value
* // Single selection matching the value or label
* page.selectOption("select#colors", "blue");
* // single selection matching both the value and the label
* page.selectOption("select#colors", new SelectOption().setLabel("Blue"));
@@ -6449,7 +6449,7 @@ public interface Page extends AutoCloseable {
*
* <p> **Usage**
* <pre>{@code
* // single selection matching the value
* // Single selection matching the value or label
* page.selectOption("select#colors", "blue");
* // single selection matching both the value and the label
* page.selectOption("select#colors", new SelectOption().setLabel("Blue"));
@@ -6482,7 +6482,7 @@ public interface Page extends AutoCloseable {
*
* <p> **Usage**
* <pre>{@code
* // single selection matching the value
* // Single selection matching the value or label
* page.selectOption("select#colors", "blue");
* // single selection matching both the value and the label
* page.selectOption("select#colors", new SelectOption().setLabel("Blue"));
@@ -6513,7 +6513,7 @@ public interface Page extends AutoCloseable {
*
* <p> **Usage**
* <pre>{@code
* // single selection matching the value
* // Single selection matching the value or label
* page.selectOption("select#colors", "blue");
* // single selection matching both the value and the label
* page.selectOption("select#colors", new SelectOption().setLabel("Blue"));
@@ -6546,7 +6546,7 @@ public interface Page extends AutoCloseable {
*
* <p> **Usage**
* <pre>{@code
* // single selection matching the value
* // Single selection matching the value or label
* page.selectOption("select#colors", "blue");
* // single selection matching both the value and the label
* page.selectOption("select#colors", new SelectOption().setLabel("Blue"));
@@ -6577,7 +6577,7 @@ public interface Page extends AutoCloseable {
*
* <p> **Usage**
* <pre>{@code
* // single selection matching the value
* // Single selection matching the value or label
* page.selectOption("select#colors", "blue");
* // single selection matching both the value and the label
* page.selectOption("select#colors", new SelectOption().setLabel("Blue"));
@@ -6610,7 +6610,7 @@ public interface Page extends AutoCloseable {
*
* <p> **Usage**
* <pre>{@code
* // single selection matching the value
* // Single selection matching the value or label
* page.selectOption("select#colors", "blue");
* // single selection matching both the value and the label
* page.selectOption("select#colors", new SelectOption().setLabel("Blue"));
@@ -7818,8 +7818,8 @@ public interface Page extends AutoCloseable {
*/
ElementHandle waitForSelector(String selector, WaitForSelectorOptions options);
/**
* The method will block until the codition returns true. All Playwright events will be dispatched while the method is
* waiting for the codition.
* The method will block until the condition returns true. All Playwright events will be dispatched while the method is
* waiting for the condition.
*
* <p> **Usage**
*
@@ -7831,15 +7831,15 @@ public interface Page extends AutoCloseable {
* page.waitForCondition(() -> messages.size() > 3);
* }</pre>
*
* @param condition Codition to wait for.
* @param condition Condition to wait for.
* @since v1.32
*/
default void waitForCondition(BooleanSupplier condition) {
waitForCondition(condition, null);
}
/**
* The method will block until the codition returns true. All Playwright events will be dispatched while the method is
* waiting for the codition.
* The method will block until the condition returns true. All Playwright events will be dispatched while the method is
* waiting for the condition.
*
* <p> **Usage**
*
@@ -7851,7 +7851,7 @@ public interface Page extends AutoCloseable {
* page.waitForCondition(() -> messages.size() > 3);
* }</pre>
*
* @param condition Codition to wait for.
* @param condition Condition to wait for.
* @since v1.32
*/
void waitForCondition(BooleanSupplier condition, WaitForConditionOptions options);
@@ -18,7 +18,7 @@ package com.microsoft.playwright;
/**
* {@code WebError} class represents an unhandled exeception thrown in the page. It is dispatched via the {@link
* {@code WebError} class represents an unhandled exception thrown in the page. It is dispatched via the {@link
* BrowserContext#onWebError BrowserContext.onWebError()} event.
* <pre>{@code
* // Log all uncaught errors to the terminal
@@ -661,9 +661,22 @@ public interface LocatorAssertions {
* Ensures that {@code Locator} points to an <a href="https://playwright.dev/java/docs/actionability#attached">attached</a>
* and <a href="https://playwright.dev/java/docs/actionability#visible">visible</a> DOM node.
*
* <p> To check that at least one element from the list is visible, use {@link Locator#first Locator.first()}.
*
* <p> **Usage**
* <pre>{@code
* // A specific element is visible.
* 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();
* }</pre>
*
* @since v1.20
@@ -675,9 +688,22 @@ public interface LocatorAssertions {
* Ensures that {@code Locator} points to an <a href="https://playwright.dev/java/docs/actionability#attached">attached</a>
* and <a href="https://playwright.dev/java/docs/actionability#visible">visible</a> DOM node.
*
* <p> To check that at least one element from the list is visible, use {@link Locator#first Locator.first()}.
*
* <p> **Usage**
* <pre>{@code
* // A specific element is visible.
* 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();
* }</pre>
*
* @since v1.20
@@ -672,8 +672,7 @@ class BrowserContextImpl extends ChannelOwner implements BrowserContext {
bindingCall.call(binding);
}
} else if ("console".equals(event)) {
String guid = params.getAsJsonObject("message").get("guid").getAsString();
ConsoleMessageImpl message = connection.getExistingObject(guid);
ConsoleMessageImpl message = new ConsoleMessageImpl(connection, params);
listeners.notify(BrowserContextImpl.EventType.CONSOLE, message);
PageImpl page = message.page();
if (page != null) {
@@ -183,7 +183,7 @@ class BrowserImpl extends ChannelOwner implements Browser {
}
if (options.recordVideoDir != null) {
JsonObject recordVideo = new JsonObject();
recordVideo.addProperty("dir", options.recordVideoDir.toString());
recordVideo.addProperty("dir", options.recordVideoDir.toAbsolutePath().toString());
if (options.recordVideoSize != null) {
recordVideo.add("size", gson().toJsonTree(options.recordVideoSize));
}
@@ -33,8 +33,6 @@ import static com.microsoft.playwright.impl.Serialization.gson;
import static com.microsoft.playwright.impl.Utils.convertType;
class BrowserTypeImpl extends ChannelOwner implements BrowserType {
LocalUtils localUtils;
BrowserTypeImpl(ChannelOwner parent, String type, String guid, JsonObject initializer) {
super(parent, type, guid, initializer);
}
@@ -203,7 +201,7 @@ class BrowserTypeImpl extends ChannelOwner implements BrowserType {
}
if (options.recordVideoDir != null) {
JsonObject recordVideo = new JsonObject();
recordVideo.addProperty("dir", options.recordVideoDir.toString());
recordVideo.addProperty("dir", options.recordVideoDir.toAbsolutePath().toString());
if (options.recordVideoSize != null) {
recordVideo.add("size", gson().toJsonTree(options.recordVideoSize));
}
@@ -18,11 +18,11 @@ package com.microsoft.playwright.impl;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.microsoft.playwright.PlaywrightException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.function.BinaryOperator;
import java.util.function.Function;
import java.util.function.Supplier;
@@ -34,6 +34,7 @@ class ChannelOwner extends LoggingSupport {
final String type;
final String guid;
final JsonObject initializer;
private boolean wasCollected;
protected ChannelOwner(ChannelOwner parent, String type, String guid, JsonObject initializer) {
this(parent.connection, parent, type, guid, initializer);
@@ -57,15 +58,16 @@ class ChannelOwner extends LoggingSupport {
}
}
void disconnect() {
void disposeChannelOwner(boolean wasGarbageCollected) {
// Clean up from parent and connection.
if (parent != null) {
parent.objects.remove(guid);
}
connection.unregisterObject(guid);
wasCollected = wasGarbageCollected;
// Dispose all children.
for (ChannelOwner child : new ArrayList<>(objects.values())) {
child.disconnect();
child.disposeChannelOwner(wasGarbageCollected);
}
objects.clear();
}
@@ -91,6 +93,7 @@ class ChannelOwner extends LoggingSupport {
}
WaitableResult<JsonElement> sendMessageAsync(String method, JsonObject params) {
checkNotCollected();
return connection.sendMessageAsync(guid, method, params);
}
@@ -99,9 +102,15 @@ class ChannelOwner extends LoggingSupport {
}
JsonElement sendMessage(String method, JsonObject params) {
checkNotCollected();
return connection.sendMessage(guid, method, params);
}
private void checkNotCollected() {
if (wasCollected)
throw new PlaywrightException("The object has been collected to prevent unbounded heap growth.");
}
<T> T runUntil(Runnable code, Waitable<T> waitable) {
try {
code.run();
@@ -252,7 +252,8 @@ public class Connection {
return;
}
if (message.method.equals("__dispose__")) {
object.disconnect();
boolean wasCollected = message.params.has("reason") && "gc".equals(message.params.get("reason").getAsString());
object.disposeChannelOwner(wasCollected);
return;
}
object.handleEvent(message.method, message.params);
@@ -293,9 +294,6 @@ public class Connection {
case "BrowserContext":
result = new BrowserContextImpl(parent, type, guid, initializer);
break;
case "ConsoleMessage":
result = new ConsoleMessageImpl(parent, type, guid, initializer);
break;
case "Dialog":
result = new DialogImpl(parent, type, guid, initializer);
break;
@@ -27,17 +27,20 @@ import java.util.List;
import static com.microsoft.playwright.impl.Serialization.gson;
public class ConsoleMessageImpl extends ChannelOwner implements ConsoleMessage {
public class ConsoleMessageImpl implements ConsoleMessage {
private final Connection connection;
private PageImpl page;
private final JsonObject initializer;
public ConsoleMessageImpl(ChannelOwner parent, String type, String guid, JsonObject initializer) {
super(parent, type, guid, initializer);
public ConsoleMessageImpl(Connection connection, JsonObject initializer) {
this.connection = connection;
// Note: currently, we only report console messages for pages and they always have a page.
// However, in the future we might report console messages for service workers or something else,
// where page() would be null.
if (initializer.has("page")) {
page = connection.getExistingObject(initializer.getAsJsonObject("page").get("guid").getAsString());
}
this.initializer = initializer;
}
public String type() {
@@ -105,7 +105,7 @@ public class LocatorAssertionsImpl extends AssertionsBase implements LocatorAsse
if (expectedValue instanceof Pattern) {
message += " matching regex";
}
expectImpl("to.have.attribute", expectedText, expectedValue, message, commonOptions);
expectImpl("to.have.attribute.value", expectedText, expectedValue, message, commonOptions);
}
@Override
@@ -63,7 +63,6 @@ public class PlaywrightImpl extends ChannelOwner implements Playwright {
private final BrowserTypeImpl webkit;
private final SelectorsImpl selectors;
private final APIRequestImpl apiRequest;
private final LocalUtils localUtils;
private SharedSelectors sharedSelectors;
PlaywrightImpl(ChannelOwner parent, String type, String guid, JsonObject initializer) {
@@ -74,10 +73,6 @@ public class PlaywrightImpl extends ChannelOwner implements Playwright {
selectors = connection.getExistingObject(initializer.getAsJsonObject("selectors").get("guid").getAsString());
apiRequest = new APIRequestImpl(this);
localUtils = connection.getExistingObject(initializer.getAsJsonObject("utils").get("guid").getAsString());
chromium.localUtils = localUtils;
firefox.localUtils = localUtils;
webkit.localUtils = localUtils;
}
void initSharedSelectors(PlaywrightImpl parent) {
@@ -77,19 +77,8 @@ class TracingImpl extends ChannelOwner implements Tracing {
connection.localUtils.zip(path, new JsonArray(), stacksId, true, includeSources);
}
@Override
public void start(StartOptions options) {
withLogging("Tracing.start", () -> startImpl(options));
}
@Override
public void startChunk(StartChunkOptions options) {
withLogging("Tracing.startChunk", () -> {
startChunkImpl(options);
});
}
private void startChunkImpl(StartChunkOptions options) {
if (options == null) {
options = new StartChunkOptions();
}
@@ -116,7 +105,8 @@ class TracingImpl extends ChannelOwner implements Tracing {
stacksId = connection.localUtils().tracingStarted(tracesDir == null ? null : tracesDir.toString(), traceName);
}
private void startImpl(StartOptions options) {
@Override
public void start(StartOptions options) {
if (options == null) {
options = new StartOptions();
}
@@ -131,17 +121,13 @@ class TracingImpl extends ChannelOwner implements Tracing {
@Override
public void stop(StopOptions options) {
withLogging("Tracing.stop", () -> {
stopChunkImpl(options == null ? null : options.path);
sendMessage("tracingStop");
});
stopChunkImpl(options == null ? null : options.path);
sendMessage("tracingStop");
}
@Override
public void stopChunk(StopChunkOptions options) {
withLogging("Tracing.stopChunk", () -> {
stopChunkImpl(options == null ? null : options.path);
});
stopChunkImpl(options == null ? null : options.path);
}
void setTracesDir(Path tracesDir) {
@@ -38,6 +38,14 @@ public class TestBrowserContextAddCookies extends TestBase {
assertEquals("password=123456", page.evaluate("document.cookie"));
}
// Slightly different rounding on chromium win.
private static List<Cookie> normalizeExpires(List<Cookie> cookies) {
for (Cookie cookie: cookies) {
cookie.expires = (double) Math.round(cookie.expires);
}
return cookies;
}
@Test
void shouldRoundtripCookie() {
page.navigate(server.EMPTY_PAGE);
@@ -53,7 +61,7 @@ public class TestBrowserContextAddCookies extends TestBase {
context.clearCookies();
assertEquals(0, context.cookies().size());
context.addCookies(cookies);
assertJsonEquals(cookies, context.cookies());
assertJsonEquals(normalizeExpires(cookies), normalizeExpires(context.cookies()));
}
@Test
@@ -175,17 +175,33 @@ public class TestBrowserContextProxy extends TestBase {
// @see https://gist.github.com/CollinChaffin/24f6c9652efb3d6d5ef2f5502720ef00
.setBypass("1.non.existent.domain.for.the.test, 2.non.existent.domain.for.the.test, .another.test")));
Page page = context.newPage();
page.navigate("http://0.non.existent.domain.for.the.test/target.html");
assertEquals("Served by the proxy", page.title());
assertThrows(PlaywrightException.class, () -> page.navigate("http://1.non.existent.domain.for.the.test/target.html"));
assertThrows(PlaywrightException.class, () -> page.navigate("http://2.non.existent.domain.for.the.test/target.html"));
assertThrows(PlaywrightException.class, () -> page.navigate("http://foo.is.the.another.test/target.html"));
page.navigate("http://3.non.existent.domain.for.the.test/target.html");
assertEquals("Served by the proxy", page.title());
{
Page page = context.newPage();
page.navigate("http://0.non.existent.domain.for.the.test/target.html");
assertEquals("Served by the proxy", page.title());
page.close();
}
{
Page page = context.newPage();
assertThrows(PlaywrightException.class, () -> page.navigate("http://1.non.existent.domain.for.the.test/target.html"));
page.close();
}
{
Page page = context.newPage();
assertThrows(PlaywrightException.class, () -> page.navigate("http://2.non.existent.domain.for.the.test/target.html"));
page.close();
}
{
Page page = context.newPage();
assertThrows(PlaywrightException.class, () -> page.navigate("http://foo.is.the.another.test/target.html"));
page.close();
}
{
Page page = context.newPage();
page.navigate("http://3.non.existent.domain.for.the.test/target.html");
assertEquals("Served by the proxy", page.title());
page.close();
}
context.close();
}
@@ -379,11 +379,7 @@ public class TestPageKeyboard extends TestBase {
} else {
assertEquals("Meta", eventData.get("key"));
}
if (isFirefox()) {
assertEquals("OSLeft", eventData.get("code"));
} else {
assertEquals("MetaLeft", eventData.get("code"));
}
assertEquals("MetaLeft", eventData.get("code"));
if (isFirefox() && !isMac) {
assertFalse((Boolean) eventData.get("metaKey"), eventData.toString());
} else {
@@ -135,4 +135,14 @@ public class TestPageNetworkRequest extends TestBase {
assertTrue(error[0].getMessage().contains("Frame for this navigation request is not available"), error[0].getMessage());
}
@Test
void shouldThrowIfRequestWasGCed() {
List<Request> requests = new ArrayList<>();
page.onRequest(req -> requests.add(req));
for (int i = 0; i < 1001; i++) {
page.navigate(server.EMPTY_PAGE);
}
PlaywrightException e = assertThrows(PlaywrightException.class, () -> requests.get(0).response());
assertEquals("The object has been collected to prevent unbounded heap growth.", e.getMessage());
}
}
@@ -389,7 +389,7 @@ public class TestPageRoute extends TestBase {
Request r = intercepted.get(1);
for (String url : asList("/one-style.css", "/two-style.css", "/three-style.css", "/four-style.css")) {
assertEquals("stylesheet", r.resourceType());
assertTrue(r.url().contains(url));
assertTrue(r.url().contains(url), "actual: " + r.url() + "; expected: " + url);
r = r.redirectedTo();
}
assertNull(r);
@@ -21,6 +21,7 @@ import com.microsoft.playwright.options.FilePayload;
import org.junit.jupiter.api.Assumptions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
import org.junit.platform.commons.support.AnnotationSupport;
import java.io.*;
import java.nio.file.Files;
@@ -36,6 +37,7 @@ import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.function.Consumer;
import static com.microsoft.playwright.Utils.relativePathOrSkipTest;
import static java.util.Arrays.asList;
import static org.junit.jupiter.api.Assertions.*;
@@ -145,8 +147,7 @@ public class TestPageSetInputFiles extends TestBase {
" return events;\n" +
" }");
Path cwd = Paths.get("").toAbsolutePath();
Path relativeUploadPath = cwd.relativize(uploadFile);
Path relativeUploadPath = relativePathOrSkipTest(uploadFile);
assertFalse(relativeUploadPath.isAbsolute());
input.setInputFiles(relativeUploadPath);
assertEquals("200MB.zip", input.evaluate("e => e.files[0].name"));
@@ -0,0 +1,24 @@
package com.microsoft.playwright;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
import java.nio.file.Files;
import java.nio.file.Path;
import static com.microsoft.playwright.Utils.relativePathOrSkipTest;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class TestVideo extends TestBase {
@Test
void shouldWorkWithRelativePathForRecordVideoDir(@TempDir Path tmpDir) {
Path relativeDir = relativePathOrSkipTest(tmpDir);
BrowserContext context = browser.newContext(new Browser.NewContextOptions()
.setRecordVideoSize(320, 240).setRecordVideoDir(relativeDir));
Page page = context.newPage();
Path videoPath = page.video().path();
context.close();
assertTrue(videoPath.isAbsolute(), "videosPath = " + videoPath);
assertTrue(Files.exists(videoPath), "videosPath = " + videoPath);
}
}
@@ -19,11 +19,13 @@ package com.microsoft.playwright;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import org.junit.jupiter.api.Assumptions;
import java.io.*;
import java.net.ServerSocket;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
@@ -214,4 +216,17 @@ class Utils {
static String generateDifferentOriginPort(final Server server){
return server.PREFIX.replace(String.valueOf(server.PORT), String.valueOf(server.PORT+1));
}
static Path relativePathOrSkipTest(Path path) {
Path cwd = Paths.get("").toAbsolutePath();
try {
return cwd.relativize(path.toAbsolutePath());
} catch (IllegalArgumentException e) {
// May happen on Windows when the path and temp are on different disks.
if (e.getMessage().contains("has different root")) {
Assumptions.assumeTrue(false, "cwd is on another disk, skipping the test.");
}
throw e;
}
}
}
+1 -1
View File
@@ -6,7 +6,7 @@
<groupId>com.microsoft.playwright</groupId>
<artifactId>parent-pom</artifactId>
<version>1.38.0</version>
<version>1.39.0</version>
<packaging>pom</packaging>
<name>Playwright Parent Project</name>
<description>Java library to automate Chromium, Firefox and WebKit with a single API.
+1 -1
View File
@@ -1 +1 @@
1.38.0
1.39.0
+1 -1
View File
@@ -6,7 +6,7 @@
<groupId>com.microsoft.playwright</groupId>
<artifactId>api-generator</artifactId>
<version>1.38.0</version>
<version>1.39.0</version>
<name>Playwright - API Generator</name>
<description>
This is an internal module used to generate Java API from the upstream Playwright
+1 -1
View File
@@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.microsoft.playwright</groupId>
<artifactId>test-cli-fatjar</artifactId>
<version>1.38.0</version>
<version>1.39.0</version>
<name>Test Playwright Command Line FatJar</name>
<properties>
<compiler.version>1.8</compiler.version>
+1 -1
View File
@@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.microsoft.playwright</groupId>
<artifactId>test-cli-version</artifactId>
<version>1.38.0</version>
<version>1.39.0</version>
<name>Test Playwright Command Line Version</name>
<properties>
<compiler.version>1.8</compiler.version>
+1 -1
View File
@@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.microsoft.playwright</groupId>
<artifactId>test-local-installation</artifactId>
<version>1.38.0</version>
<version>1.39.0</version>
<name>Test local installation</name>
<description>Runs Playwright test suite (copied from playwright module) against locally cached Playwright</description>
<properties>
+1 -1
View File
@@ -9,7 +9,7 @@
</parent>
<groupId>com.microsoft.playwright</groupId>
<artifactId>test-spring-boot-starter</artifactId>
<version>1.38.0</version>
<version>1.39.0</version>
<name>Test Playwright With Spring Boot</name>
<properties>
<spring.version>2.4.3</spring.version>
+1 -1
View File
@@ -6,7 +6,7 @@
<groupId>com.microsoft.playwright</groupId>
<artifactId>update-version</artifactId>
<version>1.38.0</version>
<version>1.39.0</version>
<name>Playwright - Update Version in Documentation</name>
<description>
This is an internal module used to update versions in the documentation based on
+1 -1
View File
@@ -24,7 +24,7 @@ RUN apt-get update && \
# Create the pwuser
adduser pwuser
RUN VERSION=3.8.8 && \
RUN VERSION=3.9.4 && \
curl -o - https://archive.apache.org/dist/maven/maven-3/$VERSION/binaries/apache-maven-$VERSION-bin.tar.gz | tar zxfv - -C /opt/ && \
ln -s /opt/apache-maven-$VERSION/bin/mvn /usr/local/bin/
+1 -1
View File
@@ -24,7 +24,7 @@ RUN apt-get update && \
# Create the pwuser
adduser pwuser
RUN VERSION=3.8.8 && \
RUN VERSION=3.9.4 && \
curl -o - https://archive.apache.org/dist/maven/maven-3/$VERSION/binaries/apache-maven-$VERSION-bin.tar.gz | tar zxfv - -C /opt/ && \
ln -s /opt/apache-maven-$VERSION/bin/mvn /usr/local/bin/