diff --git a/playwright/src/main/java/com/microsoft/playwright/BrowserContext.java b/playwright/src/main/java/com/microsoft/playwright/BrowserContext.java index b4c516de..e23d5bad 100644 --- a/playwright/src/main/java/com/microsoft/playwright/BrowserContext.java +++ b/playwright/src/main/java/com/microsoft/playwright/BrowserContext.java @@ -91,14 +91,14 @@ public interface BrowserContext { } } - class WaitForEventOptions { + class FutureEventOptions { public Integer timeout; public Predicate> predicate; - public WaitForEventOptions withTimeout(int millis) { + public FutureEventOptions withTimeout(int millis) { timeout = millis; return this; } - public WaitForEventOptions withPredicate(Predicate> predicate) { + public FutureEventOptions withPredicate(Predicate> predicate) { this.predicate = predicate; return this; } @@ -433,13 +433,13 @@ public interface BrowserContext { * @param handler Optional handler function used to register a routing with {@code browserContext.route(url, handler)}. */ void unroute(Predicate url, Consumer handler); - default Deferred> waitForEvent(EventType event) { - return waitForEvent(event, (WaitForEventOptions) null); + default Deferred> futureEvent(EventType event) { + return futureEvent(event, (FutureEventOptions) null); } - default Deferred> waitForEvent(EventType event, Predicate> predicate) { - WaitForEventOptions options = new WaitForEventOptions(); + default Deferred> futureEvent(EventType event, Predicate> predicate) { + FutureEventOptions options = new FutureEventOptions(); options.predicate = predicate; - return waitForEvent(event, options); + return futureEvent(event, options); } /** * Waits for event to fire and passes its value into the predicate function. Returns when the predicate returns truthy value. Will throw an error if the context closes before the event is fired. Returns the event data value. @@ -447,6 +447,6 @@ public interface BrowserContext { * * @param event Event name, same one would pass into {@code browserContext.on(event)}. */ - Deferred> waitForEvent(EventType event, WaitForEventOptions options); + Deferred> futureEvent(EventType event, FutureEventOptions options); } diff --git a/playwright/src/main/java/com/microsoft/playwright/ElementHandle.java b/playwright/src/main/java/com/microsoft/playwright/ElementHandle.java index 7e413929..089949e8 100644 --- a/playwright/src/main/java/com/microsoft/playwright/ElementHandle.java +++ b/playwright/src/main/java/com/microsoft/playwright/ElementHandle.java @@ -921,8 +921,8 @@ public interface ElementHandle extends JSHandle { * When all steps combined have not finished during the specified {@code timeout}, this method rejects with a TimeoutError. Passing zero timeout disables this. */ void uncheck(UncheckOptions options); - default Deferred waitForElementState(ElementState state) { - return waitForElementState(state, null); + default void waitForElementState(ElementState state) { + waitForElementState(state, null); } /** * Returns the element satisfies the {@code state}. @@ -942,8 +942,8 @@ public interface ElementHandle extends JSHandle { * If the element does not satisfy the condition for the {@code timeout} milliseconds, this method will throw. * @param state A state to wait for, see below for more details. */ - Deferred waitForElementState(ElementState state, WaitForElementStateOptions options); - default Deferred waitForSelector(String selector) { + void waitForElementState(ElementState state, WaitForElementStateOptions options); + default ElementHandle waitForSelector(String selector) { return waitForSelector(selector, null); } /** @@ -956,6 +956,6 @@ public interface ElementHandle extends JSHandle { * NOTE This method does not work across navigations, use {@code page.waitForSelector(selector[, options])} instead. * @param selector A selector to query for. See working with selectors for more details. */ - Deferred waitForSelector(String selector, WaitForSelectorOptions options); + ElementHandle waitForSelector(String selector, WaitForSelectorOptions options); } diff --git a/playwright/src/main/java/com/microsoft/playwright/Frame.java b/playwright/src/main/java/com/microsoft/playwright/Frame.java index f20bb483..717ef499 100644 --- a/playwright/src/main/java/com/microsoft/playwright/Frame.java +++ b/playwright/src/main/java/com/microsoft/playwright/Frame.java @@ -646,7 +646,7 @@ public interface Frame { return this; } } - class WaitForNavigationOptions { + class FutureNavigationOptions { /** * Maximum operation time in milliseconds, defaults to 30 seconds, pass {@code 0} to disable timeout. The default value can be changed by using the {@code browserContext.setDefaultNavigationTimeout(timeout)}, {@code browserContext.setDefaultTimeout(timeout)}, {@code page.setDefaultNavigationTimeout(timeout)} or {@code page.setDefaultTimeout(timeout)} methods. */ @@ -665,23 +665,23 @@ public interface Frame { */ public LoadState waitUntil; - public WaitForNavigationOptions withTimeout(Integer timeout) { + public FutureNavigationOptions withTimeout(Integer timeout) { this.timeout = timeout; return this; } - public WaitForNavigationOptions withUrl(String glob) { + public FutureNavigationOptions withUrl(String glob) { this.glob = glob; return this; } - public WaitForNavigationOptions withUrl(Pattern pattern) { + public FutureNavigationOptions withUrl(Pattern pattern) { this.pattern = pattern; return this; } - public WaitForNavigationOptions withUrl(Predicate predicate) { + public FutureNavigationOptions withUrl(Predicate predicate) { this.predicate = predicate; return this; } - public WaitForNavigationOptions withWaitUntil(LoadState waitUntil) { + public FutureNavigationOptions withWaitUntil(LoadState waitUntil) { this.waitUntil = waitUntil; return this; } @@ -1199,10 +1199,10 @@ public interface Frame { * Returns frame's url. */ String url(); - default Deferred waitForFunction(String pageFunction, Object arg) { + default JSHandle waitForFunction(String pageFunction, Object arg) { return waitForFunction(pageFunction, arg, null); } - default Deferred waitForFunction(String pageFunction) { + default JSHandle waitForFunction(String pageFunction) { return waitForFunction(pageFunction, null); } /** @@ -1216,12 +1216,12 @@ public interface Frame { * @param pageFunction Function to be evaluated in browser context * @param arg Optional argument to pass to {@code pageFunction} */ - Deferred waitForFunction(String pageFunction, Object arg, WaitForFunctionOptions options); - default Deferred waitForLoadState(LoadState state) { - return waitForLoadState(state, null); + JSHandle waitForFunction(String pageFunction, Object arg, WaitForFunctionOptions options); + default void waitForLoadState(LoadState state) { + waitForLoadState(state, null); } - default Deferred waitForLoadState() { - return waitForLoadState(null); + default void waitForLoadState() { + waitForLoadState(null); } /** * Waits for the required load state to be reached. @@ -1234,9 +1234,9 @@ public interface Frame { * - {@code 'domcontentloaded'} - wait for the {@code DOMContentLoaded} event to be fired. * - {@code 'networkidle'} - wait until there are no network connections for at least {@code 500} ms. */ - Deferred waitForLoadState(LoadState state, WaitForLoadStateOptions options); - default Deferred waitForNavigation() { - return waitForNavigation(null); + void waitForLoadState(LoadState state, WaitForLoadStateOptions options); + default Deferred futureNavigation() { + return futureNavigation(null); } /** * Returns the main resource response. In case of multiple redirects, the navigation will resolve with the response of the last redirect. In case of navigation to a different anchor or navigation due to History API usage, the navigation will resolve with {@code null}. @@ -1245,8 +1245,8 @@ public interface Frame { *

* NOTE Usage of the History API to change the URL is considered a navigation. */ - Deferred waitForNavigation(WaitForNavigationOptions options); - default Deferred waitForSelector(String selector) { + Deferred futureNavigation(FutureNavigationOptions options); + default ElementHandle waitForSelector(String selector) { return waitForSelector(selector, null); } /** @@ -1259,13 +1259,13 @@ public interface Frame { * * @param selector A selector to query for. See working with selectors for more details. */ - Deferred waitForSelector(String selector, WaitForSelectorOptions options); + ElementHandle waitForSelector(String selector, WaitForSelectorOptions options); /** * Waits for the given {@code timeout} in milliseconds. *

* Note that {@code frame.waitForTimeout()} should only be used for debugging. Tests using the timer in production are going to be flaky. Use signals such as network events, selectors becoming visible and others instead. * @param timeout A timeout to wait for */ - Deferred waitForTimeout(int timeout); + void waitForTimeout(int timeout); } diff --git a/playwright/src/main/java/com/microsoft/playwright/Page.java b/playwright/src/main/java/com/microsoft/playwright/Page.java index 6ce2a982..6800defd 100644 --- a/playwright/src/main/java/com/microsoft/playwright/Page.java +++ b/playwright/src/main/java/com/microsoft/playwright/Page.java @@ -69,14 +69,14 @@ public interface Page { String stack(); } - class WaitForEventOptions { + class FutureEventOptions { public Integer timeout; public Predicate> predicate; - public WaitForEventOptions withTimeout(int millis) { + public FutureEventOptions withTimeout(int millis) { timeout = millis; return this; } - public WaitForEventOptions withPredicate(Predicate> predicate) { + public FutureEventOptions withPredicate(Predicate> predicate) { this.predicate = predicate; return this; } @@ -1080,7 +1080,7 @@ public interface Page { return this; } } - class WaitForNavigationOptions { + class FutureNavigationOptions { /** * Maximum operation time in milliseconds, defaults to 30 seconds, pass {@code 0} to disable timeout. The default value can be changed by using the {@code browserContext.setDefaultNavigationTimeout(timeout)}, {@code browserContext.setDefaultTimeout(timeout)}, {@code page.setDefaultNavigationTimeout(timeout)} or {@code page.setDefaultTimeout(timeout)} methods. */ @@ -1099,45 +1099,45 @@ public interface Page { */ public Frame.LoadState waitUntil; - public WaitForNavigationOptions withTimeout(Integer timeout) { + public FutureNavigationOptions withTimeout(Integer timeout) { this.timeout = timeout; return this; } - public WaitForNavigationOptions withUrl(String glob) { + public FutureNavigationOptions withUrl(String glob) { this.glob = glob; return this; } - public WaitForNavigationOptions withUrl(Pattern pattern) { + public FutureNavigationOptions withUrl(Pattern pattern) { this.pattern = pattern; return this; } - public WaitForNavigationOptions withUrl(Predicate predicate) { + public FutureNavigationOptions withUrl(Predicate predicate) { this.predicate = predicate; return this; } - public WaitForNavigationOptions withWaitUntil(Frame.LoadState waitUntil) { + public FutureNavigationOptions withWaitUntil(Frame.LoadState waitUntil) { this.waitUntil = waitUntil; return this; } } - class WaitForRequestOptions { + class FutureRequestOptions { /** * Maximum wait time in milliseconds, defaults to 30 seconds, pass {@code 0} to disable the timeout. The default value can be changed by using the {@code page.setDefaultTimeout(timeout)} method. */ public Integer timeout; - public WaitForRequestOptions withTimeout(Integer timeout) { + public FutureRequestOptions withTimeout(Integer timeout) { this.timeout = timeout; return this; } } - class WaitForResponseOptions { + class FutureResponseOptions { /** * Maximum wait time in milliseconds, defaults to 30 seconds, pass {@code 0} to disable the timeout. The default value can be changed by using the {@code browserContext.setDefaultTimeout(timeout)} or {@code page.setDefaultTimeout(timeout)} methods. */ public Integer timeout; - public WaitForResponseOptions withTimeout(Integer timeout) { + public FutureResponseOptions withTimeout(Integer timeout) { this.timeout = timeout; return this; } @@ -1922,13 +1922,13 @@ public interface Page { */ Video video(); Viewport viewportSize(); - default Deferred> waitForEvent(EventType event) { - return waitForEvent(event, (WaitForEventOptions) null); + default Deferred> futureEvent(EventType event) { + return futureEvent(event, (FutureEventOptions) null); } - default Deferred> waitForEvent(EventType event, Predicate> predicate) { - WaitForEventOptions options = new WaitForEventOptions(); + default Deferred> futureEvent(EventType event, Predicate> predicate) { + FutureEventOptions options = new FutureEventOptions(); options.predicate = predicate; - return waitForEvent(event, options); + return futureEvent(event, options); } /** * Returns the event data value. @@ -1936,11 +1936,11 @@ public interface Page { * Waits for event to fire and passes its value into the predicate function. Returns when the predicate returns truthy value. Will throw an error if the page is closed before the event is fired. * @param event Event name, same one would pass into {@code page.on(event)}. */ - Deferred> waitForEvent(EventType event, WaitForEventOptions options); - default Deferred waitForFunction(String pageFunction, Object arg) { + Deferred> futureEvent(EventType event, FutureEventOptions options); + default JSHandle waitForFunction(String pageFunction, Object arg) { return waitForFunction(pageFunction, arg, null); } - default Deferred waitForFunction(String pageFunction) { + default JSHandle waitForFunction(String pageFunction) { return waitForFunction(pageFunction, null); } /** @@ -1954,12 +1954,12 @@ public interface Page { * @param pageFunction Function to be evaluated in browser context * @param arg Optional argument to pass to {@code pageFunction} */ - Deferred waitForFunction(String pageFunction, Object arg, WaitForFunctionOptions options); - default Deferred waitForLoadState(LoadState state) { - return waitForLoadState(state, null); + JSHandle waitForFunction(String pageFunction, Object arg, WaitForFunctionOptions options); + default void waitForLoadState(LoadState state) { + waitForLoadState(state, null); } - default Deferred waitForLoadState() { - return waitForLoadState(null); + default void waitForLoadState() { + waitForLoadState(null); } /** * Returns when the required load state has been reached. @@ -1974,9 +1974,9 @@ public interface Page { * - {@code 'domcontentloaded'} - wait for the {@code DOMContentLoaded} event to be fired. * - {@code 'networkidle'} - wait until there are no network connections for at least {@code 500} ms. */ - Deferred waitForLoadState(LoadState state, WaitForLoadStateOptions options); - default Deferred waitForNavigation() { - return waitForNavigation(null); + void waitForLoadState(LoadState state, WaitForLoadStateOptions options); + default Deferred futureNavigation() { + return futureNavigation(null); } /** * Returns the main resource response. In case of multiple redirects, the navigation will resolve with the response of the last redirect. In case of navigation to a different anchor or navigation due to History API usage, the navigation will resolve with {@code null}. @@ -1987,20 +1987,20 @@ public interface Page { *

* Shortcut for main frame's {@code frame.waitForNavigation([options])}. */ - Deferred waitForNavigation(WaitForNavigationOptions options); - default Deferred waitForRequest(String urlGlob) { return waitForRequest(urlGlob, null); } - default Deferred waitForRequest(Pattern urlPattern) { return waitForRequest(urlPattern, null); } - default Deferred waitForRequest(Predicate urlPredicate) { return waitForRequest(urlPredicate, null); } - Deferred waitForRequest(String urlGlob, WaitForRequestOptions options); - Deferred waitForRequest(Pattern urlPattern, WaitForRequestOptions options); - Deferred waitForRequest(Predicate urlPredicate, WaitForRequestOptions options); - default Deferred waitForResponse(String urlGlob) { return waitForResponse(urlGlob, null); } - default Deferred waitForResponse(Pattern urlPattern) { return waitForResponse(urlPattern, null); } - default Deferred waitForResponse(Predicate urlPredicate) { return waitForResponse(urlPredicate, null); } - Deferred waitForResponse(String urlGlob, WaitForResponseOptions options); - Deferred waitForResponse(Pattern urlPattern, WaitForResponseOptions options); - Deferred waitForResponse(Predicate urlPredicate, WaitForResponseOptions options); - default Deferred waitForSelector(String selector) { + Deferred futureNavigation(FutureNavigationOptions options); + default Deferred futureRequest(String urlGlob) { return futureRequest(urlGlob, null); } + default Deferred futureRequest(Pattern urlPattern) { return futureRequest(urlPattern, null); } + default Deferred futureRequest(Predicate urlPredicate) { return futureRequest(urlPredicate, null); } + Deferred futureRequest(String urlGlob, FutureRequestOptions options); + Deferred futureRequest(Pattern urlPattern, FutureRequestOptions options); + Deferred futureRequest(Predicate urlPredicate, FutureRequestOptions options); + default Deferred futureResponse(String urlGlob) { return futureResponse(urlGlob, null); } + default Deferred futureResponse(Pattern urlPattern) { return futureResponse(urlPattern, null); } + default Deferred futureResponse(Predicate urlPredicate) { return futureResponse(urlPredicate, null); } + Deferred futureResponse(String urlGlob, FutureResponseOptions options); + Deferred futureResponse(Pattern urlPattern, FutureResponseOptions options); + Deferred futureResponse(Predicate urlPredicate, FutureResponseOptions options); + default ElementHandle waitForSelector(String selector) { return waitForSelector(selector, null); } /** @@ -2013,7 +2013,7 @@ public interface Page { * * @param selector A selector to query for. See working with selectors for more details. */ - Deferred waitForSelector(String selector, WaitForSelectorOptions options); + ElementHandle waitForSelector(String selector, WaitForSelectorOptions options); /** * Waits for the given {@code timeout} in milliseconds. *

@@ -2022,7 +2022,7 @@ public interface Page { * Shortcut for main frame's {@code frame.waitForTimeout(timeout)}. * @param timeout A timeout to wait for */ - Deferred waitForTimeout(int timeout); + void waitForTimeout(int timeout); /** * This method returns all of the dedicated WebWorkers associated with the page. *

diff --git a/playwright/src/main/java/com/microsoft/playwright/WebSocket.java b/playwright/src/main/java/com/microsoft/playwright/WebSocket.java index d7538f35..f6571adb 100644 --- a/playwright/src/main/java/com/microsoft/playwright/WebSocket.java +++ b/playwright/src/main/java/com/microsoft/playwright/WebSocket.java @@ -28,14 +28,14 @@ public interface WebSocket { String text(); } - class WaitForEventOptions { + class FutureEventOptions { public Integer timeout; public Predicate> predicate; - public WaitForEventOptions withTimeout(int millis) { + public FutureEventOptions withTimeout(int millis) { timeout = millis; return this; } - public WaitForEventOptions withPredicate(Predicate> predicate) { + public FutureEventOptions withPredicate(Predicate> predicate) { this.predicate = predicate; return this; } @@ -58,13 +58,13 @@ public interface WebSocket { * Contains the URL of the WebSocket. */ String url(); - default Deferred> waitForEvent(EventType event) { - return waitForEvent(event, (WaitForEventOptions) null); + default Deferred> futureEvent(EventType event) { + return futureEvent(event, (FutureEventOptions) null); } - default Deferred> waitForEvent(EventType event, Predicate> predicate) { - WaitForEventOptions options = new WaitForEventOptions(); + default Deferred> futureEvent(EventType event, Predicate> predicate) { + FutureEventOptions options = new FutureEventOptions(); options.predicate = predicate; - return waitForEvent(event, options); + return futureEvent(event, options); } /** * Returns the event data value. @@ -72,6 +72,6 @@ public interface WebSocket { * Waits for event to fire and passes its value into the predicate function. Returns when the predicate returns truthy value. Will throw an error if the webSocket is closed before the event is fired. * @param event Event name, same one would pass into {@code webSocket.on(event)}. */ - Deferred> waitForEvent(EventType event, WaitForEventOptions options); + Deferred> futureEvent(EventType event, FutureEventOptions options); } diff --git a/playwright/src/main/java/com/microsoft/playwright/Worker.java b/playwright/src/main/java/com/microsoft/playwright/Worker.java index b5b11c27..0e6e15c4 100644 --- a/playwright/src/main/java/com/microsoft/playwright/Worker.java +++ b/playwright/src/main/java/com/microsoft/playwright/Worker.java @@ -56,6 +56,6 @@ public interface Worker { */ JSHandle evaluateHandle(String pageFunction, Object arg); String url(); - Deferred> waitForEvent(EventType event); + Deferred> futureEvent(EventType event); } diff --git a/playwright/src/main/java/com/microsoft/playwright/impl/BrowserContextImpl.java b/playwright/src/main/java/com/microsoft/playwright/impl/BrowserContextImpl.java index d7f14118..b7792b19 100644 --- a/playwright/src/main/java/com/microsoft/playwright/impl/BrowserContextImpl.java +++ b/playwright/src/main/java/com/microsoft/playwright/impl/BrowserContextImpl.java @@ -311,9 +311,9 @@ class BrowserContextImpl extends ChannelOwner implements BrowserContext { } @Override - public Deferred> waitForEvent(EventType event, WaitForEventOptions options) { + public Deferred> futureEvent(EventType event, FutureEventOptions options) { if (options == null) { - options = new WaitForEventOptions(); + options = new FutureEventOptions(); } List>> waitables = new ArrayList<>(); waitables.add(new WaitableEvent<>(listeners, event, options.predicate)); diff --git a/playwright/src/main/java/com/microsoft/playwright/impl/ChannelOwner.java b/playwright/src/main/java/com/microsoft/playwright/impl/ChannelOwner.java index 6b1e0633..eb82c4ce 100644 --- a/playwright/src/main/java/com/microsoft/playwright/impl/ChannelOwner.java +++ b/playwright/src/main/java/com/microsoft/playwright/impl/ChannelOwner.java @@ -89,7 +89,7 @@ class ChannelOwner { } @SuppressWarnings("unchecked") - Deferred toDeferred(Waitable waitable) { + Deferred toDeferred(Waitable waitable) { return new Deferred() { Exception constructionStackTrace = new Exception(); @Override diff --git a/playwright/src/main/java/com/microsoft/playwright/impl/ElementHandleImpl.java b/playwright/src/main/java/com/microsoft/playwright/impl/ElementHandleImpl.java index 8c2cfa93..ba73ee36 100644 --- a/playwright/src/main/java/com/microsoft/playwright/impl/ElementHandleImpl.java +++ b/playwright/src/main/java/com/microsoft/playwright/impl/ElementHandleImpl.java @@ -361,13 +361,13 @@ public class ElementHandleImpl extends JSHandleImpl implements ElementHandle { } @Override - public Deferred waitForElementState(ElementState state, WaitForElementStateOptions options) { + public void waitForElementState(ElementState state, WaitForElementStateOptions options) { if (options == null) { options = new WaitForElementStateOptions(); } JsonObject params = gson().toJsonTree(options).getAsJsonObject(); params.addProperty("state", toProtocol(state)); - return toDeferred(sendMessageAsync("waitForElementState", params).apply(json -> null)); + sendMessage("waitForElementState", params); } private static String toProtocol(ElementState state) { @@ -378,7 +378,7 @@ public class ElementHandleImpl extends JSHandleImpl implements ElementHandle { } @Override - public Deferred waitForSelector(String selector, WaitForSelectorOptions options) { + public ElementHandle waitForSelector(String selector, WaitForSelectorOptions options) { if (options == null) { options = new WaitForSelectorOptions(); } @@ -386,7 +386,12 @@ public class ElementHandleImpl extends JSHandleImpl implements ElementHandle { params.remove("state"); params.addProperty("state", toProtocol(options.state)); params.addProperty("selector", selector); - return toDeferred(sendMessageAsync("waitForElementState", params).apply(json -> null)); + JsonElement json = sendMessage("waitForSelector", params); + JsonObject element = json.getAsJsonObject().getAsJsonObject("element"); + if (element == null) { + return null; + } + return connection.getExistingObject(element.get("guid").getAsString()); } public String createSelectorForTest(String name) { diff --git a/playwright/src/main/java/com/microsoft/playwright/impl/FrameImpl.java b/playwright/src/main/java/com/microsoft/playwright/impl/FrameImpl.java index 88199a30..9ce15c8c 100644 --- a/playwright/src/main/java/com/microsoft/playwright/impl/FrameImpl.java +++ b/playwright/src/main/java/com/microsoft/playwright/impl/FrameImpl.java @@ -512,7 +512,7 @@ public class FrameImpl extends ChannelOwner implements Frame { } @Override - public Deferred waitForFunction(String pageFunction, Object arg, WaitForFunctionOptions options) { + public JSHandle waitForFunction(String pageFunction, Object arg, WaitForFunctionOptions options) { if (options == null) { options = new WaitForFunctionOptions(); } @@ -520,15 +520,13 @@ public class FrameImpl extends ChannelOwner implements Frame { params.addProperty("expression", pageFunction); params.addProperty("isFunction", isFunctionBody(pageFunction)); params.add("arg", gson().toJsonTree(serializeArgument(arg))); - Waitable handle = sendMessageAsync("waitForFunction", params).apply(json -> { - JsonObject element = json.getAsJsonObject().getAsJsonObject("handle"); - return connection.getExistingObject(element.get("guid").getAsString()); - }); - return toDeferred(handle); + JsonElement json = sendMessage("waitForFunction", params); + JsonObject element = json.getAsJsonObject().getAsJsonObject("handle"); + return connection.getExistingObject(element.get("guid").getAsString()); } @Override - public Deferred waitForLoadState(LoadState state, WaitForLoadStateOptions options) { + public void waitForLoadState(LoadState state, WaitForLoadStateOptions options) { if (options == null) { options = new WaitForLoadStateOptions(); } @@ -540,7 +538,7 @@ public class FrameImpl extends ChannelOwner implements Frame { waitables.add(new WaitForLoadStateHelper(state)); waitables.add(page.createWaitForCloseHelper()); waitables.add(page.createWaitableTimeout(options.timeout)); - return toDeferred(new WaitableRace<>(waitables)); + toDeferred(new WaitableRace<>(waitables)).get(); } private class WaitForLoadStateHelper implements Waitable, Listener { @@ -578,7 +576,7 @@ public class FrameImpl extends ChannelOwner implements Frame { } } - private class WaitForNavigationHelper implements Waitable, Listener { + private class FutureNavigationHelper implements Waitable, Listener { private final UrlMatcher matcher; private final LoadState expectedLoadState; private WaitForLoadStateHelper loadStateHelper; @@ -586,7 +584,7 @@ public class FrameImpl extends ChannelOwner implements Frame { private RequestImpl request; private RuntimeException exception; - WaitForNavigationHelper(UrlMatcher matcher, LoadState expectedLoadState) { + FutureNavigationHelper(UrlMatcher matcher, LoadState expectedLoadState) { this.matcher = matcher; this.expectedLoadState = expectedLoadState; internalListeners.add(InternalEventType.NAVIGATED, this); @@ -646,9 +644,9 @@ public class FrameImpl extends ChannelOwner implements Frame { } @Override - public Deferred waitForNavigation(WaitForNavigationOptions options) { + public Deferred futureNavigation(FutureNavigationOptions options) { if (options == null) { - options = new WaitForNavigationOptions(); + options = new FutureNavigationOptions(); } if (options.waitUntil == null) { options.waitUntil = LOAD; @@ -656,7 +654,7 @@ public class FrameImpl extends ChannelOwner implements Frame { List> waitables = new ArrayList<>(); UrlMatcher matcher = UrlMatcher.forOneOf(options.glob, options.pattern, options.predicate); - waitables.add(new WaitForNavigationHelper(matcher, options.waitUntil)); + waitables.add(new FutureNavigationHelper(matcher, options.waitUntil)); waitables.add(page.createWaitForCloseHelper()); waitables.add(page.createWaitableFrameDetach(this)); waitables.add(page.createWaitableNavigationTimeout(options.timeout)); @@ -668,7 +666,7 @@ public class FrameImpl extends ChannelOwner implements Frame { } @Override - public Deferred waitForSelector(String selector, WaitForSelectorOptions options) { + public ElementHandle waitForSelector(String selector, WaitForSelectorOptions options) { if (options == null) { options = new WaitForSelectorOptions(); } @@ -678,25 +676,23 @@ public class FrameImpl extends ChannelOwner implements Frame { params.remove("state"); params.addProperty("state", toProtocol(options.state)); } - Waitable handle = sendMessageAsync("waitForSelector", params).apply(json -> { - JsonObject element = json.getAsJsonObject().getAsJsonObject("element"); - if (element == null) { - return null; - } - return connection.getExistingObject(element.get("guid").getAsString()); - }); - return toDeferred(handle); + JsonElement json = sendMessage("waitForSelector", params); + JsonObject element = json.getAsJsonObject().getAsJsonObject("element"); + if (element == null) { + return null; + } + return connection.getExistingObject(element.get("guid").getAsString()); } @Override - public Deferred waitForTimeout(int timeout) { - return toDeferred(new WaitableTimeout(timeout) { + public void waitForTimeout(int timeout) { + toDeferred(new WaitableTimeout(timeout) { @Override public Void get() { // Override to not throw. return null; } - }); + }).get(); } protected void handleEvent(String event, JsonObject params) { diff --git a/playwright/src/main/java/com/microsoft/playwright/impl/PageImpl.java b/playwright/src/main/java/com/microsoft/playwright/impl/PageImpl.java index 569c6493..c6b62e89 100644 --- a/playwright/src/main/java/com/microsoft/playwright/impl/PageImpl.java +++ b/playwright/src/main/java/com/microsoft/playwright/impl/PageImpl.java @@ -723,9 +723,9 @@ public class PageImpl extends ChannelOwner implements Page { } @Override - public Deferred> waitForEvent(EventType event, WaitForEventOptions options) { + public Deferred> futureEvent(EventType event, FutureEventOptions options) { if (options == null) { - options = new WaitForEventOptions(); + options = new FutureEventOptions(); } List>> waitables = new ArrayList<>(); if (event == EventType.FILECHOOSER) { @@ -745,18 +745,18 @@ public class PageImpl extends ChannelOwner implements Page { } @Override - public Deferred waitForFunction(String pageFunction, Object arg, WaitForFunctionOptions options) { + public JSHandle waitForFunction(String pageFunction, Object arg, WaitForFunctionOptions options) { return mainFrame.waitForFunction(pageFunction, arg, convertViaJson(options, Frame.WaitForFunctionOptions.class)); } @Override - public Deferred waitForLoadState(LoadState state, WaitForLoadStateOptions options) { - return mainFrame.waitForLoadState(convertViaJson(state, Frame.LoadState.class), convertViaJson(options, Frame.WaitForLoadStateOptions.class)); + public void waitForLoadState(LoadState state, WaitForLoadStateOptions options) { + mainFrame.waitForLoadState(convertViaJson(state, Frame.LoadState.class), convertViaJson(options, Frame.WaitForLoadStateOptions.class)); } @Override - public Deferred waitForNavigation(WaitForNavigationOptions options) { - Frame.WaitForNavigationOptions frameOptions = new Frame.WaitForNavigationOptions(); + public Deferred futureNavigation(FutureNavigationOptions options) { + Frame.FutureNavigationOptions frameOptions = new Frame.FutureNavigationOptions(); if (options != null) { frameOptions.timeout = options.timeout; frameOptions.waitUntil = options.waitUntil; @@ -764,7 +764,7 @@ public class PageImpl extends ChannelOwner implements Page { frameOptions.pattern = options.pattern; frameOptions.predicate = options.predicate; } - return mainFrame.waitForNavigation(frameOptions); + return mainFrame.futureNavigation(frameOptions); } void frameNavigated(FrameImpl frame) { @@ -857,23 +857,23 @@ public class PageImpl extends ChannelOwner implements Page { } @Override - public Deferred waitForRequest(String urlGlob, WaitForRequestOptions options) { - return waitForRequest(new UrlMatcher(urlGlob), options); + public Deferred futureRequest(String urlGlob, FutureRequestOptions options) { + return futureRequest(new UrlMatcher(urlGlob), options); } @Override - public Deferred waitForRequest(Pattern urlPattern, WaitForRequestOptions options) { - return waitForRequest(new UrlMatcher(urlPattern), options); + public Deferred futureRequest(Pattern urlPattern, FutureRequestOptions options) { + return futureRequest(new UrlMatcher(urlPattern), options); } @Override - public Deferred waitForRequest(Predicate urlPredicate, WaitForRequestOptions options) { - return waitForRequest(new UrlMatcher(urlPredicate), options); + public Deferred futureRequest(Predicate urlPredicate, FutureRequestOptions options) { + return futureRequest(new UrlMatcher(urlPredicate), options); } - private Deferred waitForRequest(UrlMatcher matcher, WaitForRequestOptions options) { + private Deferred futureRequest(UrlMatcher matcher, FutureRequestOptions options) { if (options == null) { - options = new WaitForRequestOptions(); + options = new FutureRequestOptions(); } List> waitables = new ArrayList<>(); waitables.add(new WaitableEvent<>(listeners, EventType.REQUEST, e -> matcher.test(((Request) e.data()).url())) @@ -884,23 +884,23 @@ public class PageImpl extends ChannelOwner implements Page { } @Override - public Deferred waitForResponse(String urlGlob, WaitForResponseOptions options) { - return waitForResponse(new UrlMatcher(urlGlob), options); + public Deferred futureResponse(String urlGlob, FutureResponseOptions options) { + return futureResponse(new UrlMatcher(urlGlob), options); } @Override - public Deferred waitForResponse(Pattern urlPattern, WaitForResponseOptions options) { - return waitForResponse(new UrlMatcher(urlPattern), options); + public Deferred futureResponse(Pattern urlPattern, FutureResponseOptions options) { + return futureResponse(new UrlMatcher(urlPattern), options); } @Override - public Deferred waitForResponse(Predicate urlPredicate, WaitForResponseOptions options) { - return waitForResponse(new UrlMatcher(urlPredicate), options); + public Deferred futureResponse(Predicate urlPredicate, FutureResponseOptions options) { + return futureResponse(new UrlMatcher(urlPredicate), options); } - private Deferred waitForResponse(UrlMatcher matcher, WaitForResponseOptions options) { + private Deferred futureResponse(UrlMatcher matcher, FutureResponseOptions options) { if (options == null) { - options = new WaitForResponseOptions(); + options = new FutureResponseOptions(); } List> waitables = new ArrayList<>(); waitables.add(new WaitableEvent<>(listeners, EventType.RESPONSE, e -> matcher.test(((Response) e.data()).url())) @@ -911,13 +911,13 @@ public class PageImpl extends ChannelOwner implements Page { } @Override - public Deferred waitForSelector(String selector, WaitForSelectorOptions options) { + public ElementHandle waitForSelector(String selector, WaitForSelectorOptions options) { return mainFrame.waitForSelector(selector, convertViaJson(options, Frame.WaitForSelectorOptions.class)); } @Override - public Deferred waitForTimeout(int timeout) { - return mainFrame.waitForTimeout(timeout); + public void waitForTimeout(int timeout) { + mainFrame.waitForTimeout(timeout); } @Override diff --git a/playwright/src/main/java/com/microsoft/playwright/impl/WebSocketImpl.java b/playwright/src/main/java/com/microsoft/playwright/impl/WebSocketImpl.java index 1c7bdb76..b403d420 100644 --- a/playwright/src/main/java/com/microsoft/playwright/impl/WebSocketImpl.java +++ b/playwright/src/main/java/com/microsoft/playwright/impl/WebSocketImpl.java @@ -97,9 +97,9 @@ class WebSocketImpl extends ChannelOwner implements WebSocket { } @Override - public Deferred> waitForEvent(EventType event, WaitForEventOptions options) { + public Deferred> futureEvent(EventType event, FutureEventOptions options) { if (options == null) { - options = new WaitForEventOptions(); + options = new FutureEventOptions(); } List>> waitables = new ArrayList<>(); waitables.add(new WaitableEvent<>(listeners, event, options.predicate)); diff --git a/playwright/src/main/java/com/microsoft/playwright/impl/WorkerImpl.java b/playwright/src/main/java/com/microsoft/playwright/impl/WorkerImpl.java index 98fdc699..c296c995 100644 --- a/playwright/src/main/java/com/microsoft/playwright/impl/WorkerImpl.java +++ b/playwright/src/main/java/com/microsoft/playwright/impl/WorkerImpl.java @@ -69,7 +69,7 @@ class WorkerImpl extends ChannelOwner implements Worker { } @Override - public Deferred> waitForEvent(EventType event) { + public Deferred> futureEvent(EventType event) { return toDeferred(new WaitableEvent<>(listeners, event)); } diff --git a/playwright/src/test/java/com/microsoft/playwright/Server.java b/playwright/src/test/java/com/microsoft/playwright/Server.java index ae46ca7d..bb4876a5 100644 --- a/playwright/src/test/java/com/microsoft/playwright/Server.java +++ b/playwright/src/test/java/com/microsoft/playwright/Server.java @@ -114,7 +114,7 @@ public class Server implements HttpHandler { } } - Future waitForRequest(String path) { + Future futureRequest(String path) { CompletableFuture future = requestSubscribers.get(path); if (future == null) { future = new CompletableFuture<>(); diff --git a/playwright/src/test/java/com/microsoft/playwright/TestBrowserContextAddCookies.java b/playwright/src/test/java/com/microsoft/playwright/TestBrowserContextAddCookies.java index e43f96e5..5a707a96 100644 --- a/playwright/src/test/java/com/microsoft/playwright/TestBrowserContextAddCookies.java +++ b/playwright/src/test/java/com/microsoft/playwright/TestBrowserContextAddCookies.java @@ -64,7 +64,7 @@ public class TestBrowserContextAddCookies extends TestBase { @Test void shouldSendCookieHeader() throws ExecutionException, InterruptedException { - Future request = server.waitForRequest("/empty.html"); + Future request = server.futureRequest("/empty.html"); context.addCookies(asList( new BrowserContext.AddCookie().withUrl(server.EMPTY_PAGE).withName("cookie").withValue("value"))); Page page = context.newPage(); @@ -150,7 +150,7 @@ public class TestBrowserContextAddCookies extends TestBase { new BrowserContext.AddCookie().withUrl(server.EMPTY_PAGE).withName("sendcookie").withValue("value"))); { Page page = context.newPage(); - Future request = server.waitForRequest("/empty.html"); + Future request = server.futureRequest("/empty.html"); page.navigate(server.EMPTY_PAGE); List cookies = request.get().headers.get("cookie"); assertEquals(asList("sendcookie=value"), cookies); @@ -158,7 +158,7 @@ public class TestBrowserContextAddCookies extends TestBase { { BrowserContext context = browser.newContext(); Page page = context.newPage(); - Future request = server.waitForRequest("/empty.html"); + Future request = server.futureRequest("/empty.html"); page.navigate(server.EMPTY_PAGE); List cookies = request.get().headers.get("cookie"); assertNull(cookies); @@ -349,7 +349,7 @@ public class TestBrowserContextAddCookies extends TestBase { " return promise;\n" + "}", server.CROSS_PROCESS_PREFIX + "/grid.html"); page.frames().get(1).evaluate("document.cookie = 'username=John Doe'"); - page.waitForTimeout(2000).get(); + page.waitForTimeout(2000); boolean allowsThirdParty = isChromium() || isFirefox(); List cookies = context.cookies(server.CROSS_PROCESS_PREFIX + "/grid.html"); if (allowsThirdParty) { diff --git a/playwright/src/test/java/com/microsoft/playwright/TestBrowserContextBasic.java b/playwright/src/test/java/com/microsoft/playwright/TestBrowserContextBasic.java index a278cf8e..843cf3bd 100644 --- a/playwright/src/test/java/com/microsoft/playwright/TestBrowserContextBasic.java +++ b/playwright/src/test/java/com/microsoft/playwright/TestBrowserContextBasic.java @@ -44,7 +44,7 @@ public class TestBrowserContextBasic extends TestBase { BrowserContext context = browser.newContext(); Page page = context.newPage(); page.navigate(server.EMPTY_PAGE); - Deferred> popupEvent = page.waitForEvent(POPUP); + Deferred> popupEvent = page.futureEvent(POPUP); page.evaluate("url => window.open(url)", server.EMPTY_PAGE); Page popup = (Page) popupEvent.get().data(); assertEquals(context, popup.context()); @@ -153,9 +153,9 @@ public class TestBrowserContextBasic extends TestBase { } @Test - void closeShouldAbortWaitForEvent() { + void closeShouldAbortFutureEvent() { BrowserContext context = browser.newContext(); - Deferred> pageEvent = context.waitForEvent(PAGE); + Deferred> pageEvent = context.futureEvent(PAGE); context.close(); try { pageEvent.get(); diff --git a/playwright/src/test/java/com/microsoft/playwright/TestClick.java b/playwright/src/test/java/com/microsoft/playwright/TestClick.java index 58db50b7..fdbebff3 100644 --- a/playwright/src/test/java/com/microsoft/playwright/TestClick.java +++ b/playwright/src/test/java/com/microsoft/playwright/TestClick.java @@ -104,7 +104,7 @@ public class TestClick extends TestBase { Page page = context.newPage(); page.navigate(server.PREFIX + "/wrappedlink.html"); - Deferred navigationPromise = page.waitForNavigation(); + Deferred navigationPromise = page.futureNavigation(); page.click("a"); navigationPromise.get(); diff --git a/playwright/src/test/java/com/microsoft/playwright/TestDefaultBrowserContext2.java b/playwright/src/test/java/com/microsoft/playwright/TestDefaultBrowserContext2.java index ec3bc408..626f0817 100644 --- a/playwright/src/test/java/com/microsoft/playwright/TestDefaultBrowserContext2.java +++ b/playwright/src/test/java/com/microsoft/playwright/TestDefaultBrowserContext2.java @@ -109,7 +109,7 @@ public class TestDefaultBrowserContext2 extends TestBase { void shouldSupportExtraHTTPHeadersOption() throws ExecutionException, InterruptedException { // TODO: test.flaky(browserName === "firefox" && headful && platform === "linux", "Intermittent timeout on bots"); Page page = launchPersistent(new BrowserType.LaunchPersistentContextOptions().withExtraHTTPHeaders(mapOf("foo", "bar"))); - Future request = server.waitForRequest("/empty.html"); + Future request = server.futureRequest("/empty.html"); page.navigate(server.EMPTY_PAGE); assertEquals(asList("bar"), request.get().headers.get("foo")); } diff --git a/playwright/src/test/java/com/microsoft/playwright/TestDeferred.java b/playwright/src/test/java/com/microsoft/playwright/TestDeferred.java index 46c54616..80ccc147 100644 --- a/playwright/src/test/java/com/microsoft/playwright/TestDeferred.java +++ b/playwright/src/test/java/com/microsoft/playwright/TestDeferred.java @@ -26,8 +26,8 @@ import static org.junit.jupiter.api.Assertions.fail; public class TestDeferred extends TestBase { @Test void throwIfGetNotCalled() { - page.waitForNavigation(); - context.waitForEvent(BrowserContext.EventType.PAGE); + page.futureNavigation(); + context.futureEvent(BrowserContext.EventType.PAGE); closeContext(); closeBrowser(); @@ -48,8 +48,8 @@ public class TestDeferred extends TestBase { p.close(); fail("did not throw"); } catch (Exception e) { - assertTrue(e.getMessage().contains("com.microsoft.playwright.impl.PageImpl.waitForNavigation")); - assertTrue(e.getMessage().contains("com.microsoft.playwright.impl.BrowserContextImpl.waitForEvent")); + assertTrue(e.getMessage().contains("com.microsoft.playwright.impl.PageImpl.futureNavigation")); + assertTrue(e.getMessage().contains("com.microsoft.playwright.impl.BrowserContextImpl.futureEvent")); } } } diff --git a/playwright/src/test/java/com/microsoft/playwright/TestDialog.java b/playwright/src/test/java/com/microsoft/playwright/TestDialog.java index 19d2758d..8f4a02d1 100644 --- a/playwright/src/test/java/com/microsoft/playwright/TestDialog.java +++ b/playwright/src/test/java/com/microsoft/playwright/TestDialog.java @@ -92,7 +92,7 @@ public class TestDialog extends TestBase { void shouldBeAbleToCloseContextWithOpenAlert() { BrowserContext context = browser.newContext(); Page page = context.newPage(); -// const alertPromise = page.waitForEvent("dialog"); +// const alertPromise = page.futureEvent("dialog"); page.evaluate("() => {\n" + " setTimeout(() => alert('hello'), 0);\n" + "}"); diff --git a/playwright/src/test/java/com/microsoft/playwright/TestDownload.java b/playwright/src/test/java/com/microsoft/playwright/TestDownload.java index add65d56..dddf67ca 100644 --- a/playwright/src/test/java/com/microsoft/playwright/TestDownload.java +++ b/playwright/src/test/java/com/microsoft/playwright/TestDownload.java @@ -61,7 +61,7 @@ public class TestDownload extends TestBase { @Test void shouldReportDownloadsWithAcceptDownloadsFalse() { page.setContent("download"); - Deferred> downloadEvent = page.waitForEvent(DOWNLOAD); + Deferred> downloadEvent = page.futureEvent(DOWNLOAD); page.click("a"); Download download = (Download) downloadEvent.get().data(); assertEquals(server.PREFIX + "/downloadWithFilename", download.url()); @@ -78,7 +78,7 @@ public class TestDownload extends TestBase { void shouldReportDownloadsWithAcceptDownloadsTrue() throws IOException { Page page = browser.newPage(new Browser.NewPageOptions().withAcceptDownloads(true)); page.setContent("download"); - Deferred> downloadEvent = page.waitForEvent(DOWNLOAD); + Deferred> downloadEvent = page.futureEvent(DOWNLOAD); page.click("a"); Download download = (Download) downloadEvent.get().data(); Path path = download.path(); @@ -92,7 +92,7 @@ public class TestDownload extends TestBase { void shouldSaveToUserSpecifiedPath() throws IOException { Page page = browser.newPage(new Browser.NewPageOptions().withAcceptDownloads(true)); page.setContent("download"); - Deferred> downloadEvent = page.waitForEvent(DOWNLOAD); + Deferred> downloadEvent = page.futureEvent(DOWNLOAD); page.click("a"); Download download = (Download) downloadEvent.get().data(); @@ -108,7 +108,7 @@ public class TestDownload extends TestBase { void shouldSaveToUserSpecifiedPathWithoutUpdatingOriginalPath() throws IOException { Page page = browser.newPage(new Browser.NewPageOptions().withAcceptDownloads(true)); page.setContent("download"); - Deferred> downloadEvent = page.waitForEvent(DOWNLOAD); + Deferred> downloadEvent = page.futureEvent(DOWNLOAD); page.click("a"); Download download = (Download) downloadEvent.get().data(); @@ -133,7 +133,7 @@ public class TestDownload extends TestBase { void shouldSaveToTwoDifferentPathsWithMultipleSaveAsCalls() throws IOException { Page page = browser.newPage(new Browser.NewPageOptions().withAcceptDownloads(true)); page.setContent("download"); - Deferred> downloadEvent = page.waitForEvent(DOWNLOAD); + Deferred> downloadEvent = page.futureEvent(DOWNLOAD); page.click("a"); Download download = (Download) downloadEvent.get().data(); { @@ -157,7 +157,7 @@ public class TestDownload extends TestBase { void shouldSaveToOverwrittenFilepath() throws IOException { Page page = browser.newPage(new Browser.NewPageOptions().withAcceptDownloads(true)); page.setContent("download"); - Deferred> downloadEvent = page.waitForEvent(DOWNLOAD); + Deferred> downloadEvent = page.futureEvent(DOWNLOAD); page.click("a"); Download download = (Download) downloadEvent.get().data(); Path userFile = Files.createTempFile("download-", ".txt"); @@ -180,7 +180,7 @@ public class TestDownload extends TestBase { void shouldCreateSubdirectoriesWhenSavingToNonExistentUserSpecifiedPath() throws IOException { Page page = browser.newPage(new Browser.NewPageOptions().withAcceptDownloads(true)); page.setContent("download"); - Deferred> downloadEvent = page.waitForEvent(DOWNLOAD); + Deferred> downloadEvent = page.futureEvent(DOWNLOAD); page.click("a"); Download download = (Download) downloadEvent.get().data(); @@ -201,7 +201,7 @@ public class TestDownload extends TestBase { void shouldErrorWhenSavingWithDownloadsDisabled() throws IOException { Page page = browser.newPage(new Browser.NewPageOptions().withAcceptDownloads(false)); page.setContent("download"); - Deferred> downloadEvent = page.waitForEvent(DOWNLOAD); + Deferred> downloadEvent = page.futureEvent(DOWNLOAD); page.click("a"); Download download = (Download) downloadEvent.get().data(); @@ -219,7 +219,7 @@ public class TestDownload extends TestBase { void shouldErrorWhenSavingAfterDeletion() throws IOException { Page page = browser.newPage(new Browser.NewPageOptions().withAcceptDownloads(true)); page.setContent("download"); - Deferred> downloadEvent = page.waitForEvent(DOWNLOAD); + Deferred> downloadEvent = page.futureEvent(DOWNLOAD); page.click("a"); Download download = (Download) downloadEvent.get().data(); @@ -252,7 +252,7 @@ public class TestDownload extends TestBase { Page page = browser.newPage(new Browser.NewPageOptions().withAcceptDownloads(true)); page.navigate(server.EMPTY_PAGE); page.setContent("download"); - Deferred> downloadEvent = page.waitForEvent(DOWNLOAD); + Deferred> downloadEvent = page.futureEvent(DOWNLOAD); page.click("a"); Download download = (Download) downloadEvent.get().data(); @@ -274,7 +274,7 @@ public class TestDownload extends TestBase { page.click("a"); Instant start = Instant.now(); while (event[0] == null) { - page.waitForTimeout(100).get(); + page.waitForTimeout(100); assertTrue(Duration.between(start, Instant.now()).getSeconds() < 30, "Timed out"); } Download download = (Download) event[0].data(); @@ -295,7 +295,7 @@ public class TestDownload extends TestBase { page.click("a"); Instant start = Instant.now(); while (event[0] == null) { - page.waitForTimeout(100).get(); + page.waitForTimeout(100); assertTrue(Duration.between(start, Instant.now()).getSeconds() < 1, "Timed out"); } Download download = (Download) event[0].data(); @@ -320,7 +320,7 @@ public class TestDownload extends TestBase { }); Page page = browser.newPage(new Browser.NewPageOptions().withAcceptDownloads(true)); page.setContent("download"); - Deferred> downloadEvent = page.waitForEvent(DOWNLOAD); + Deferred> downloadEvent = page.futureEvent(DOWNLOAD); page.click("a", new Page.ClickOptions().withModifiers(ALT)); Download download = (Download) downloadEvent.get().data(); Path path = download.path(); @@ -343,7 +343,7 @@ public class TestDownload extends TestBase { // - WebKit doesn't close the popup page Page page = browser.newPage(new Browser.NewPageOptions().withAcceptDownloads(true)); page.setContent("download"); - Deferred> downloadEvent = page.waitForEvent(DOWNLOAD); + Deferred> downloadEvent = page.futureEvent(DOWNLOAD); page.click("a"); Download download = (Download) downloadEvent.get().data(); Path path = download.path(); @@ -357,7 +357,7 @@ public class TestDownload extends TestBase { void shouldDeleteFile() { Page page = browser.newPage(new Browser.NewPageOptions().withAcceptDownloads(true)); page.setContent("download"); - Deferred> downloadEvent = page.waitForEvent(DOWNLOAD); + Deferred> downloadEvent = page.futureEvent(DOWNLOAD); page.click("a"); Download download = (Download) downloadEvent.get().data(); Path path = download.path(); @@ -371,7 +371,7 @@ public class TestDownload extends TestBase { void shouldExposeStream() throws IOException { Page page = browser.newPage(new Browser.NewPageOptions().withAcceptDownloads(true)); page.setContent("download"); - Deferred> downloadEvent = page.waitForEvent(DOWNLOAD); + Deferred> downloadEvent = page.futureEvent(DOWNLOAD); page.click("a"); Download download = (Download) downloadEvent.get().data(); @@ -386,11 +386,11 @@ public class TestDownload extends TestBase { void shouldDeleteDownloadsOnContextDestruction() { Page page = browser.newPage(new Browser.NewPageOptions().withAcceptDownloads(true)); page.setContent("download"); - Deferred> downloadEvent1 = page.waitForEvent(DOWNLOAD); + Deferred> downloadEvent1 = page.futureEvent(DOWNLOAD); page.click("a"); Download download1 = (Download) downloadEvent1.get().data(); - Deferred> downloadEvent2 = page.waitForEvent(DOWNLOAD); + Deferred> downloadEvent2 = page.futureEvent(DOWNLOAD); page.click("a"); Download download2 = (Download) downloadEvent2.get().data(); @@ -408,11 +408,11 @@ public class TestDownload extends TestBase { Browser browser = browserType.launch(); Page page = browser.newPage(new Browser.NewPageOptions().withAcceptDownloads(true)); page.setContent("download"); - Deferred> downloadEvent1 = page.waitForEvent(DOWNLOAD); + Deferred> downloadEvent1 = page.futureEvent(DOWNLOAD); page.click("a"); Download download1 = (Download) downloadEvent1.get().data(); - Deferred> downloadEvent2 = page.waitForEvent(DOWNLOAD); + Deferred> downloadEvent2 = page.futureEvent(DOWNLOAD); page.click("a"); Download download2 = (Download) downloadEvent2.get().data(); diff --git a/playwright/src/test/java/com/microsoft/playwright/TestElementHandleOwnerFrame.java b/playwright/src/test/java/com/microsoft/playwright/TestElementHandleOwnerFrame.java index e4f99980..ec0a5cac 100644 --- a/playwright/src/test/java/com/microsoft/playwright/TestElementHandleOwnerFrame.java +++ b/playwright/src/test/java/com/microsoft/playwright/TestElementHandleOwnerFrame.java @@ -96,7 +96,7 @@ public class TestElementHandleOwnerFrame extends TestBase { @Test void shouldWorkForAdoptedElements() { page.navigate(server.EMPTY_PAGE); - Deferred> popupEvent = page.waitForEvent(Page.EventType.POPUP); + Deferred> popupEvent = page.futureEvent(Page.EventType.POPUP); page.evaluate("url => window['__popup'] = window.open(url)", server.EMPTY_PAGE); JSHandle divHandle = page.evaluateHandle("() => {\n" + " const div = document.createElement('div');\n" + @@ -105,7 +105,7 @@ public class TestElementHandleOwnerFrame extends TestBase { "}"); assertEquals(page.mainFrame(), divHandle.asElement().ownerFrame()); Page popup = (Page) popupEvent.get().data(); - popup.waitForLoadState(Page.LoadState.DOMCONTENTLOADED).get(); + popup.waitForLoadState(Page.LoadState.DOMCONTENTLOADED); page.evaluate("() => {\n" + " const div = document.querySelector('div');\n" + " window['__popup'].document.body.appendChild(div);\n" + diff --git a/playwright/src/test/java/com/microsoft/playwright/TestElementHandleWaitForElementState.java b/playwright/src/test/java/com/microsoft/playwright/TestElementHandleWaitForElementState.java index ab2e9f0a..292967c7 100644 --- a/playwright/src/test/java/com/microsoft/playwright/TestElementHandleWaitForElementState.java +++ b/playwright/src/test/java/com/microsoft/playwright/TestElementHandleWaitForElementState.java @@ -35,26 +35,24 @@ public class TestElementHandleWaitForElementState extends TestBase { void shouldWaitForVisible() { page.setContent("

content
"); ElementHandle div = page.querySelector("div"); - Deferred promise = div.waitForElementState(VISIBLE); giveItAChanceToResolve(page); div.evaluate("div => div.style.display = 'block'"); - promise.get(); + div.waitForElementState(VISIBLE); } @Test void shouldWaitForAlreadyVisible() { page.setContent("
content
"); ElementHandle div = page.querySelector("div"); - div.waitForElementState(VISIBLE).get(); + div.waitForElementState(VISIBLE); } @Test void shouldTimeoutWaitingForVisible() { page.setContent("
content
"); ElementHandle div = page.querySelector("div"); - Deferred result = div.waitForElementState(VISIBLE, new ElementHandle.WaitForElementStateOptions().withTimeout(1000)); try { - result.get(); + div.waitForElementState(VISIBLE, new ElementHandle.WaitForElementStateOptions().withTimeout(1000)); fail("did not throw"); } catch (PlaywrightException e) { assertTrue(e.getMessage().contains("Timeout 1000ms exceeded")); @@ -65,10 +63,9 @@ public class TestElementHandleWaitForElementState extends TestBase { void shouldThrowWaitingForVisibleWhenDetached() { page.setContent("
content
"); ElementHandle div = page.querySelector("div"); - Deferred promise = div.waitForElementState(VISIBLE); div.evaluate("div => div.remove()"); try { - promise.get(); + div.waitForElementState(VISIBLE); fail("did not throw"); } catch (PlaywrightException e) { assertTrue(e.getMessage().contains("Element is not attached to the DOM")); @@ -79,48 +76,43 @@ public class TestElementHandleWaitForElementState extends TestBase { void shouldWaitForHidden() { page.setContent("
content
"); ElementHandle div = page.querySelector("div"); - Deferred promise = div.waitForElementState(HIDDEN); giveItAChanceToResolve(page); div.evaluate("div => div.style.display = 'none'"); - promise.get(); + div.waitForElementState(HIDDEN); } @Test void shouldWaitForAlreadyHidden() { page.setContent("
"); ElementHandle div = page.querySelector("div"); - Deferred result = div.waitForElementState(HIDDEN); - result.get(); + div.waitForElementState(HIDDEN); } @Test void shouldWaitForHiddenWhenDetached() { page.setContent("
content
"); ElementHandle div = page.querySelector("div"); - Deferred promise = div.waitForElementState(HIDDEN); giveItAChanceToResolve(page); div.evaluate("div => div.remove()"); - promise.get(); + div.waitForElementState(HIDDEN); } @Test void shouldWaitForEnabledButton() { page.setContent(""); ElementHandle span = page.querySelector("text=Target"); - Deferred promise = span.waitForElementState(ENABLED); giveItAChanceToResolve(page); span.evaluate("span => span.parentElement.disabled = false"); - promise.get(); + span.waitForElementState(ENABLED); } @Test void shouldThrowWaitingForEnabledWhenDetached() { page.setContent(""); ElementHandle button = page.querySelector("button"); - Deferred promise = button.waitForElementState(ENABLED); button.evaluate("button => button.remove()"); try { - promise.get(); + button.waitForElementState(ENABLED); fail("did not throw"); } catch (PlaywrightException e) { assertTrue(e.getMessage().contains("Element is not attached to the DOM")); @@ -131,10 +123,9 @@ public class TestElementHandleWaitForElementState extends TestBase { void shouldWaitForDisabledButton() { page.setContent(""); ElementHandle span = page.querySelector("text=Target"); - Deferred promise = span.waitForElementState(DISABLED); giveItAChanceToResolve(page); span.evaluate("span => span.parentElement.disabled = true"); - promise.get(); + span.waitForElementState(DISABLED); } static boolean isFirefoxLinux() { @@ -149,9 +140,8 @@ public class TestElementHandleWaitForElementState extends TestBase { " button.style.transition = 'margin 10000ms linear 0s';\n" + " button.style.marginLeft = '20000px';\n" + "}"); - Deferred promise = button.waitForElementState(STABLE); giveItAChanceToResolve(page); button.evaluate("button => button.style.transition = ''"); - promise.get(); + button.waitForElementState(STABLE); } } diff --git a/playwright/src/test/java/com/microsoft/playwright/TestEvalOnSelector.java b/playwright/src/test/java/com/microsoft/playwright/TestEvalOnSelector.java index 96ea1470..fddce6cc 100644 --- a/playwright/src/test/java/com/microsoft/playwright/TestEvalOnSelector.java +++ b/playwright/src/test/java/com/microsoft/playwright/TestEvalOnSelector.java @@ -186,10 +186,10 @@ public class TestEvalOnSelector extends TestBase { @Test void shouldWorkWithSpacesInCssAttributes() { page.setContent("
"); - assertNotNull(page.waitForSelector("[placeholder=\"Select date\"]").get()); - assertNotNull(page.waitForSelector("[placeholder='Select date']").get()); - assertNotNull(page.waitForSelector("input[placeholder=\"Select date\"]").get()); - assertNotNull(page.waitForSelector("input[placeholder='Select date']").get()); + assertNotNull(page.waitForSelector("[placeholder=\"Select date\"]")); + assertNotNull(page.waitForSelector("[placeholder='Select date']")); + assertNotNull(page.waitForSelector("input[placeholder=\"Select date\"]")); + assertNotNull(page.waitForSelector("input[placeholder='Select date']")); assertNotNull(page.querySelector("[placeholder=\"Select date\"]")); assertNotNull(page.querySelector("[placeholder='Select date']")); assertNotNull(page.querySelector("input[placeholder=\"Select date\"]")); @@ -224,18 +224,16 @@ public class TestEvalOnSelector extends TestBase { @Test void shouldWorkWithSpacesInCssAttributesWhenMissing() { - Deferred inputPromise = page.waitForSelector("[placeholder='Select date']"); assertNull(page.querySelector("[placeholder='Select date']")); page.setContent("
"); - inputPromise.get(); + page.waitForSelector("[placeholder='Select date']"); } @Test void shouldWorkWithQuotesInCssAttributesWhenMissing() { - Deferred inputPromise = page.waitForSelector("[placeholder='Select\\\"date']"); assertNull(page.querySelector("[placeholder='Select\\\"date']")); page.setContent("
"); - inputPromise.get(); + page.waitForSelector("[placeholder='Select\\\"date']"); } @Test diff --git a/playwright/src/test/java/com/microsoft/playwright/TestGeolocation.java b/playwright/src/test/java/com/microsoft/playwright/TestGeolocation.java index 48e2d29e..83cdc313 100644 --- a/playwright/src/test/java/com/microsoft/playwright/TestGeolocation.java +++ b/playwright/src/test/java/com/microsoft/playwright/TestGeolocation.java @@ -120,17 +120,17 @@ public class TestGeolocation extends TestBase { " }, err => {});\n" + "}"); { - Deferred> deferred = page.waitForEvent(CONSOLE, event -> ((ConsoleMessage) event.data()).text().contains("lat=0 lng=10")); + Deferred> deferred = page.futureEvent(CONSOLE, event -> ((ConsoleMessage) event.data()).text().contains("lat=0 lng=10")); context.setGeolocation(new Geolocation(0, 10)); deferred.get(); } { - Deferred> deferred = page.waitForEvent(CONSOLE, event -> ((ConsoleMessage) event.data()).text().contains("lat=20 lng=30")); + Deferred> deferred = page.futureEvent(CONSOLE, event -> ((ConsoleMessage) event.data()).text().contains("lat=20 lng=30")); context.setGeolocation(new Geolocation(20, 30)); deferred.get(); } { - Deferred> deferred = page.waitForEvent(CONSOLE, event -> ((ConsoleMessage) event.data()).text().contains("lat=40 lng=50")); + Deferred> deferred = page.futureEvent(CONSOLE, event -> ((ConsoleMessage) event.data()).text().contains("lat=40 lng=50")); context.setGeolocation(new Geolocation(40, 50)); deferred.get(); } @@ -143,10 +143,10 @@ public class TestGeolocation extends TestBase { void shouldUseContextOptionsForPopup() { context.grantPermissions(asList("geolocation")); context.setGeolocation(new Geolocation(10, 10)); - Deferred> popupEvent = page.waitForEvent(POPUP); + Deferred> popupEvent = page.futureEvent(POPUP); page.evaluate("url => window['_popup'] = window.open(url)", server.PREFIX + "/geolocation.html"); Page popup = (Page) popupEvent.get().data(); - popup.waitForLoadState().get(); + popup.waitForLoadState(); Object geolocation = popup.evaluate("window['geolocationPromise']"); assertEquals(mapOf("longitude", 10, "latitude", 10), geolocation); } diff --git a/playwright/src/test/java/com/microsoft/playwright/TestHar.java b/playwright/src/test/java/com/microsoft/playwright/TestHar.java index bf570522..b9562dc4 100644 --- a/playwright/src/test/java/com/microsoft/playwright/TestHar.java +++ b/playwright/src/test/java/com/microsoft/playwright/TestHar.java @@ -101,8 +101,7 @@ public class TestHar extends TestBase { void shouldHavePages() throws IOException { pageWithHar.page.navigate("data:text/html,Hello"); // For data: load comes before domcontentloaded... - Deferred loadEvent = pageWithHar.page.waitForLoadState(Page.LoadState.DOMCONTENTLOADED); - loadEvent.get(); + pageWithHar.page.waitForLoadState(Page.LoadState.DOMCONTENTLOADED); JsonObject log = pageWithHar.log(); assertEquals(1, log.getAsJsonArray("pages").size()); @@ -125,8 +124,7 @@ public class TestHar extends TestBase { page.navigate("data:text/html,Hello"); // For data: load comes before domcontentloaded... - Deferred loadEvent = page.waitForLoadState(Page.LoadState.DOMCONTENTLOADED); - loadEvent.get(); + page.waitForLoadState(Page.LoadState.DOMCONTENTLOADED); context.close(); JsonObject log; try (Reader reader = new FileReader(harPath.toFile())) { diff --git a/playwright/src/test/java/com/microsoft/playwright/TestNetworkRequest.java b/playwright/src/test/java/com/microsoft/playwright/TestNetworkRequest.java index f764848f..d6b8cf3b 100644 --- a/playwright/src/test/java/com/microsoft/playwright/TestNetworkRequest.java +++ b/playwright/src/test/java/com/microsoft/playwright/TestNetworkRequest.java @@ -107,7 +107,7 @@ public class TestNetworkRequest extends TestBase { @Test @DisabledIf(value="com.microsoft.playwright.TestBase#isWebKit", disabledReason="fail") void shouldGetTheSameHeadersAsTheServer() throws ExecutionException, InterruptedException { - Future serverRequest = server.waitForRequest("/empty.html"); + Future serverRequest = server.futureRequest("/empty.html"); server.setRoute("/empty.html", exchange -> { exchange.sendResponseHeaders(200, 0); try (OutputStreamWriter writer = new OutputStreamWriter(exchange.getResponseBody())) { @@ -124,7 +124,7 @@ public class TestNetworkRequest extends TestBase { @DisabledIf(value="com.microsoft.playwright.TestBase#isWebKit", disabledReason="fail") void shouldGetTheSameHeadersAsTheServerCORP() throws ExecutionException, InterruptedException { page.navigate(server.PREFIX + "/empty.html"); - Future serverRequest = server.waitForRequest("/something"); + Future serverRequest = server.futureRequest("/something"); server.setRoute("/something", exchange -> { exchange.getResponseHeaders().add("Access-Control-Allow-Origin", "*"); exchange.sendResponseHeaders(200, 0); @@ -132,7 +132,7 @@ public class TestNetworkRequest extends TestBase { writer.write("done"); } }); - Deferred> responsePromise = page.waitForEvent(RESPONSE); + Deferred> responsePromise = page.futureEvent(RESPONSE); Object text = page.evaluate("async url => {\n" + " const data = await fetch(url);\n" + " return data.text();\n" + diff --git a/playwright/src/test/java/com/microsoft/playwright/TestNetworkResponse.java b/playwright/src/test/java/com/microsoft/playwright/TestNetworkResponse.java index 6a1853e1..b918fdfc 100644 --- a/playwright/src/test/java/com/microsoft/playwright/TestNetworkResponse.java +++ b/playwright/src/test/java/com/microsoft/playwright/TestNetworkResponse.java @@ -105,7 +105,7 @@ public class TestNetworkResponse extends TestBase { requestFinished[0] |= ((Request) event.data()).url().contains("/get"); }); // send request and wait for server response - Deferred> responseEvent = page.waitForEvent(RESPONSE); + Deferred> responseEvent = page.futureEvent(RESPONSE); page.evaluate("() => fetch('./get', { method: 'GET'})"); assertNotNull(responseEvent.get()); responseWritten.acquire(); diff --git a/playwright/src/test/java/com/microsoft/playwright/TestPageBasic.java b/playwright/src/test/java/com/microsoft/playwright/TestPageBasic.java index 050bfc14..4c64c808 100644 --- a/playwright/src/test/java/com/microsoft/playwright/TestPageBasic.java +++ b/playwright/src/test/java/com/microsoft/playwright/TestPageBasic.java @@ -103,8 +103,8 @@ public class TestPageBasic extends TestBase { @Test void shouldTerminateNetworkWaiters() { Page newPage = context.newPage(); - Deferred request = newPage.waitForRequest(server.EMPTY_PAGE); - Deferred response = newPage.waitForResponse(server.EMPTY_PAGE); + Deferred request = newPage.futureRequest(server.EMPTY_PAGE); + Deferred response = newPage.futureResponse(server.EMPTY_PAGE); newPage.close(); try { request.get(); @@ -133,7 +133,7 @@ public class TestPageBasic extends TestBase { @Test void shouldFireLoadWhenExpected() { page.navigate("about:blank"); - page.waitForLoadState(LOAD).get(); + page.waitForLoadState(LOAD); } // TODO: not supported in sync api @@ -142,7 +142,7 @@ public class TestPageBasic extends TestBase { @Test void shouldProvideAccessToTheOpenerPage() { - Deferred> popupEvent = page.waitForEvent(POPUP); + Deferred> popupEvent = page.futureEvent(POPUP); page.evaluate("() => window.open('about:blank')"); Page popup = (Page) popupEvent.get().data(); Page opener = popup.opener(); @@ -151,7 +151,7 @@ public class TestPageBasic extends TestBase { @Test void shouldReturnNullIfParentPageHasBeenClosed() { - Deferred> popupEvent = page.waitForEvent(POPUP); + Deferred> popupEvent = page.futureEvent(POPUP); page.evaluate("() => window.open('about:blank')"); Page popup = (Page) popupEvent.get().data(); page.close(); @@ -162,7 +162,7 @@ public class TestPageBasic extends TestBase { @Test void shouldFireDomcontentloadedWhenExpected() { page.navigate("about:blank"); - page.waitForLoadState(DOMCONTENTLOADED).get(); + page.waitForLoadState(DOMCONTENTLOADED); } // TODO: downloads @@ -194,10 +194,10 @@ public class TestPageBasic extends TestBase { @Test void pageCloseShouldWorkWithWindowClose() { - Deferred> newPagePromise = page.waitForEvent(POPUP); + Deferred> newPagePromise = page.futureEvent(POPUP); page.evaluate("() => window['newPage'] = window.open('about:blank')"); Page newPage = (Page) newPagePromise.get().data(); - Deferred> closedPromise = newPage.waitForEvent(CLOSE); + Deferred> closedPromise = newPage.futureEvent(CLOSE); page.evaluate("() => window['newPage'].close()"); closedPromise.get(); } @@ -205,7 +205,7 @@ public class TestPageBasic extends TestBase { @Test void pageCloseShouldWorkWithPageClose() { Page newPage = context.newPage(); - Deferred> closedPromise = newPage.waitForEvent(CLOSE); + Deferred> closedPromise = newPage.futureEvent(CLOSE); newPage.close(); closedPromise.get(); } diff --git a/playwright/src/test/java/com/microsoft/playwright/TestPageEmulateMedia.java b/playwright/src/test/java/com/microsoft/playwright/TestPageEmulateMedia.java index 5bfaac31..85f1c5a2 100644 --- a/playwright/src/test/java/com/microsoft/playwright/TestPageEmulateMedia.java +++ b/playwright/src/test/java/com/microsoft/playwright/TestPageEmulateMedia.java @@ -86,7 +86,7 @@ public class TestPageEmulateMedia extends TestBase { BrowserContext context = browser.newContext(new Browser.NewContextOptions().withColorScheme(DARK)); Page page = context.newPage(); page.navigate(server.EMPTY_PAGE); - Deferred> popupEvent = page.waitForEvent(POPUP); + Deferred> popupEvent = page.futureEvent(POPUP); page.evaluate("url => { window.open(url); }", server.EMPTY_PAGE); Page popup = (Page) popupEvent.get().data(); assertEquals(false, popup.evaluate("() => matchMedia('(prefers-color-scheme: light)').matches")); @@ -96,7 +96,7 @@ public class TestPageEmulateMedia extends TestBase { { Page page = browser.newPage(new Browser.NewPageOptions().withColorScheme(LIGHT)); page.navigate(server.EMPTY_PAGE); - Deferred> popupEvent = page.waitForEvent(POPUP); + Deferred> popupEvent = page.futureEvent(POPUP); page.evaluate("url => { window.open(url); }", server.EMPTY_PAGE); Page popup = (Page) popupEvent.get().data(); assertEquals(true, popup.evaluate("() => matchMedia('(prefers-color-scheme: light)').matches")); diff --git a/playwright/src/test/java/com/microsoft/playwright/TestPageEvaluate.java b/playwright/src/test/java/com/microsoft/playwright/TestPageEvaluate.java index 8574f72e..2fe797f6 100644 --- a/playwright/src/test/java/com/microsoft/playwright/TestPageEvaluate.java +++ b/playwright/src/test/java/com/microsoft/playwright/TestPageEvaluate.java @@ -435,7 +435,7 @@ public class TestPageEvaluate extends TestBase { @Test void shouldThrowANiceErrorAfterANavigation() { - Deferred navigation = page.waitForNavigation(); + Deferred navigation = page.futureNavigation(); try { page.evaluate("() => {\n" + " const promise = new Promise(f => window['__resolve'] = f);\n" + diff --git a/playwright/src/test/java/com/microsoft/playwright/TestPageEventNetwork.java b/playwright/src/test/java/com/microsoft/playwright/TestPageEventNetwork.java index 449763d5..2561f33f 100644 --- a/playwright/src/test/java/com/microsoft/playwright/TestPageEventNetwork.java +++ b/playwright/src/test/java/com/microsoft/playwright/TestPageEventNetwork.java @@ -79,7 +79,7 @@ public class TestPageEventNetwork extends TestBase { @Test void PageEventsRequestFinished() { - Deferred> event = page.waitForEvent(REQUESTFINISHED); + Deferred> event = page.futureEvent(REQUESTFINISHED); Response response = page.navigate(server.EMPTY_PAGE); event.get(); Request request = response.request(); diff --git a/playwright/src/test/java/com/microsoft/playwright/TestPageExposeFunction.java b/playwright/src/test/java/com/microsoft/playwright/TestPageExposeFunction.java index 0e4ab44a..4d3f1eb7 100644 --- a/playwright/src/test/java/com/microsoft/playwright/TestPageExposeFunction.java +++ b/playwright/src/test/java/com/microsoft/playwright/TestPageExposeFunction.java @@ -184,7 +184,7 @@ public class TestPageExposeFunction extends TestBase { }, new Page.ExposeBindingOptions().withHandle(true)); page.navigate(server.EMPTY_PAGE); - Deferred navigation = page.waitForNavigation(new Page.WaitForNavigationOptions().withWaitUntil(LOAD)); + Deferred navigation = page.futureNavigation(new Page.FutureNavigationOptions().withWaitUntil(LOAD)); page.evaluate("async url => {\n" + " window['logme']({ foo: 42 });\n" + " window.location.href = url;\n" + diff --git a/playwright/src/test/java/com/microsoft/playwright/TestPageRoute.java b/playwright/src/test/java/com/microsoft/playwright/TestPageRoute.java index 84974714..42447c9e 100644 --- a/playwright/src/test/java/com/microsoft/playwright/TestPageRoute.java +++ b/playwright/src/test/java/com/microsoft/playwright/TestPageRoute.java @@ -101,8 +101,9 @@ public class TestPageRoute extends TestBase { page.setContent("
\n" + " \n" + "
"); + Deferred navigationResponse = page.futureNavigation(); page.evalOnSelector("form", "form => form.submit()"); - page.waitForNavigation().get(); + navigationResponse.get(); } // @see https://github.com/GoogleChrome/puppeteer/issues/3973 @@ -127,7 +128,7 @@ public class TestPageRoute extends TestBase { route.continue_(new Route.ContinueOverrides().withHeaders(headers)); }); - Future serverRequest = server.waitForRequest("/title.html"); + Future serverRequest = server.futureRequest("/title.html"); page.evaluate("url => fetch(url, { headers: {foo: 'bar'} })", server.PREFIX + "/title.html"); assertFalse(serverRequest.get().headers.containsKey("foo")); } @@ -232,7 +233,7 @@ public class TestPageRoute extends TestBase { void shouldSendReferer() throws ExecutionException, InterruptedException { page.setExtraHTTPHeaders(mapOf("referer", "http://google.com/")); page.route("**/*", route -> route.continue_()); - Future request = server.waitForRequest("/grid.html"); + Future request = server.futureRequest("/grid.html"); page.navigate(server.PREFIX + "/grid.html"); assertEquals(asList("http://google.com/"), request.get().headers.get("referer")); } @@ -434,7 +435,7 @@ public class TestPageRoute extends TestBase { Route[] route = {null}; page.route("**/*", r -> route[0] = r); // Wait for request interception. - Deferred> event = page.waitForEvent(REQUEST); + Deferred> event = page.futureEvent(REQUEST); page.evalOnSelector("iframe", "(frame, url) => frame.src = url", server.EMPTY_PAGE); event.get(); // Delete frame to cause request to be canceled. diff --git a/playwright/src/test/java/com/microsoft/playwright/TestPageSelectOption.java b/playwright/src/test/java/com/microsoft/playwright/TestPageSelectOption.java index a3450cf2..68a26006 100644 --- a/playwright/src/test/java/com/microsoft/playwright/TestPageSelectOption.java +++ b/playwright/src/test/java/com/microsoft/playwright/TestPageSelectOption.java @@ -94,7 +94,7 @@ public class TestPageSelectOption extends TestBase { void shouldNotThrowWhenSelectCausesNavigation() { page.navigate(server.PREFIX + "/input/select.html"); page.evalOnSelector("select", "select => select.addEventListener('input', () => window.location.href = '/empty.html')"); - Deferred response = page.waitForNavigation(); + Deferred response = page.futureNavigation(); page.selectOption("select", "blue"); response.get(); assertTrue(page.url().contains("empty.html")); diff --git a/playwright/src/test/java/com/microsoft/playwright/TestPageSetExtraHttpHeaders.java b/playwright/src/test/java/com/microsoft/playwright/TestPageSetExtraHttpHeaders.java index 1a3a7fee..57a92ad8 100644 --- a/playwright/src/test/java/com/microsoft/playwright/TestPageSetExtraHttpHeaders.java +++ b/playwright/src/test/java/com/microsoft/playwright/TestPageSetExtraHttpHeaders.java @@ -29,7 +29,7 @@ public class TestPageSetExtraHttpHeaders extends TestBase { @Test void shouldWork() throws ExecutionException, InterruptedException { page.setExtraHTTPHeaders(mapOf("foo", "bar")); - Future request = server.waitForRequest("/empty.html"); + Future request = server.futureRequest("/empty.html"); page.navigate(server.EMPTY_PAGE); assertEquals(asList("bar"), request.get().headers.get("foo")); assertNull(request.get().headers.get("baz")); @@ -39,7 +39,7 @@ public class TestPageSetExtraHttpHeaders extends TestBase { void shouldWorkWithRedirects() throws ExecutionException, InterruptedException { server.setRedirect("/foo.html", "/empty.html"); page.setExtraHTTPHeaders(mapOf("foo", "bar")); - Future request = server.waitForRequest("/empty.html"); + Future request = server.futureRequest("/empty.html"); page.navigate(server.PREFIX + "/foo.html"); assertEquals(asList("bar"), request.get().headers.get("foo")); } @@ -49,7 +49,7 @@ public class TestPageSetExtraHttpHeaders extends TestBase { BrowserContext context = browser.newContext(); context.setExtraHTTPHeaders(mapOf("foo", "bar")); Page page = context.newPage(); - Future request = server.waitForRequest("/empty.html"); + Future request = server.futureRequest("/empty.html"); page.navigate(server.EMPTY_PAGE); context.close(); assertEquals(asList("bar"), request.get().headers.get("foo")); @@ -61,7 +61,7 @@ public class TestPageSetExtraHttpHeaders extends TestBase { .withExtraHTTPHeaders(mapOf("fOo", "bAr", "baR", "foO"))); Page page = context.newPage(); page.setExtraHTTPHeaders(mapOf("Foo", "Bar")); - Future request = server.waitForRequest("/empty.html"); + Future request = server.futureRequest("/empty.html"); page.navigate(server.EMPTY_PAGE); context.close(); assertEquals(asList("Bar"), request.get().headers.get("foo")); diff --git a/playwright/src/test/java/com/microsoft/playwright/TestPageSetInputFiles.java b/playwright/src/test/java/com/microsoft/playwright/TestPageSetInputFiles.java index 1cfbc11c..a57291aa 100644 --- a/playwright/src/test/java/com/microsoft/playwright/TestPageSetInputFiles.java +++ b/playwright/src/test/java/com/microsoft/playwright/TestPageSetInputFiles.java @@ -67,7 +67,7 @@ public class TestPageSetInputFiles extends TestBase { @Test void shouldEmitEventOnce() { page.setContent(""); - Deferred> event = page.waitForEvent(Page.EventType.FILECHOOSER); + Deferred> event = page.futureEvent(Page.EventType.FILECHOOSER); page.click("input"); FileChooser chooser = (FileChooser) event.get().data(); assertNotNull(chooser); @@ -91,7 +91,7 @@ public class TestPageSetInputFiles extends TestBase { page.click("input"); Instant start = Instant.now(); while (chooser[0] == null && Duration.between(start, Instant.now()).toMillis() < 10_000) { - page.waitForTimeout(100).get(); + page.waitForTimeout(100); } assertNotNull(chooser[0]); } @@ -99,14 +99,14 @@ public class TestPageSetInputFiles extends TestBase { @Test void shouldWorkWhenFileInputIsAttachedToDOM() { page.setContent(""); - Deferred> chooser = page.waitForEvent(Page.EventType.FILECHOOSER); + Deferred> chooser = page.futureEvent(Page.EventType.FILECHOOSER); page.click("input"); assertNotNull(chooser.get()); } @Test void shouldWorkWhenFileInputIsNotAttachedToDOM() { - Deferred> chooser = page.waitForEvent(Page.EventType.FILECHOOSER); + Deferred> chooser = page.futureEvent(Page.EventType.FILECHOOSER); page.evaluate("() => {\n" + " const el = document.createElement('input');\n" + " el.type = 'file';\n" + @@ -128,7 +128,7 @@ public class TestPageSetInputFiles extends TestBase { @Test void shouldRespectTimeout() { try { - Deferred> event = page.waitForEvent(Page.EventType.FILECHOOSER, new Page.WaitForEventOptions().withTimeout(1)); + Deferred> event = page.futureEvent(Page.EventType.FILECHOOSER, new Page.FutureEventOptions().withTimeout(1)); event.get(); fail("did not throw"); } catch (PlaywrightException e) { @@ -140,7 +140,7 @@ public class TestPageSetInputFiles extends TestBase { void shouldRespectDefaultTimeoutWhenThereIsNoCustomTimeout() { page.setDefaultTimeout(1); try { - Deferred> event = page.waitForEvent(Page.EventType.FILECHOOSER); + Deferred> event = page.futureEvent(Page.EventType.FILECHOOSER); event.get(); fail("did not throw"); } catch (PlaywrightException e) { @@ -151,8 +151,8 @@ public class TestPageSetInputFiles extends TestBase { @Test void shouldPrioritizeExactTimeoutOverDefaultTimeout() { page.setDefaultTimeout(0); - Deferred> event = page.waitForEvent(Page.EventType.FILECHOOSER, - new Page.WaitForEventOptions().withTimeout(1)); + Deferred> event = page.futureEvent(Page.EventType.FILECHOOSER, + new Page.FutureEventOptions().withTimeout(1)); try { event.get(); fail("did not throw"); @@ -163,8 +163,8 @@ public class TestPageSetInputFiles extends TestBase { @Test void shouldWorkWithNoTimeout() { - Deferred> event = page.waitForEvent(Page.EventType.FILECHOOSER, - new Page.WaitForEventOptions().withTimeout(0)); + Deferred> event = page.futureEvent(Page.EventType.FILECHOOSER, + new Page.FutureEventOptions().withTimeout(0)); page.evaluate("() => setTimeout(() => {\n" + " const el = document.createElement('input');\n" + " el.type = 'file';\n" + @@ -176,8 +176,8 @@ public class TestPageSetInputFiles extends TestBase { @Test void shouldReturnTheSameFileChooserWhenThereAreManyWatchdogsSimultaneously() { page.setContent(""); - Deferred> fileChooser1 = page.waitForEvent(Page.EventType.FILECHOOSER); - Deferred> fileChooser2 = page.waitForEvent(Page.EventType.FILECHOOSER); + Deferred> fileChooser1 = page.futureEvent(Page.EventType.FILECHOOSER); + Deferred> fileChooser2 = page.futureEvent(Page.EventType.FILECHOOSER); page.evalOnSelector("input", "input => input.click()"); assertEquals(fileChooser1.get().data(), fileChooser2.get().data()); } @@ -185,7 +185,7 @@ public class TestPageSetInputFiles extends TestBase { @Test void shouldAcceptSingleFile() { page.setContent(""); - Deferred> event = page.waitForEvent(Page.EventType.FILECHOOSER); + Deferred> event = page.futureEvent(Page.EventType.FILECHOOSER); page.click("input"); FileChooser fileChooser = (FileChooser) event.get().data(); assertEquals(page, fileChooser.page()); @@ -255,7 +255,7 @@ public class TestPageSetInputFiles extends TestBase { @Test void shouldNotAcceptMultipleFilesForSingleFileInput() { page.setContent(""); - Deferred> event = page.waitForEvent(Page.EventType.FILECHOOSER); + Deferred> event = page.futureEvent(Page.EventType.FILECHOOSER); page.click("input"); FileChooser fileChooser = (FileChooser) event.get().data(); try { @@ -281,7 +281,7 @@ public class TestPageSetInputFiles extends TestBase { @Test void shouldWorkForSingleFilePick() { page.setContent(""); - Deferred> event = page.waitForEvent(Page.EventType.FILECHOOSER); + Deferred> event = page.futureEvent(Page.EventType.FILECHOOSER); page.click("input"); FileChooser fileChooser = (FileChooser) event.get().data(); assertFalse(fileChooser.isMultiple()); @@ -290,7 +290,7 @@ public class TestPageSetInputFiles extends TestBase { @Test void shouldWorkForMultiple() { page.setContent(""); - Deferred> event = page.waitForEvent(Page.EventType.FILECHOOSER); + Deferred> event = page.futureEvent(Page.EventType.FILECHOOSER); page.click("input"); FileChooser fileChooser = (FileChooser) event.get().data(); assertTrue(fileChooser.isMultiple()); @@ -299,7 +299,7 @@ public class TestPageSetInputFiles extends TestBase { @Test void shouldWorkForWebkitdirectory() { page.setContent(""); - Deferred> event = page.waitForEvent(Page.EventType.FILECHOOSER); + Deferred> event = page.futureEvent(Page.EventType.FILECHOOSER); page.click("input"); FileChooser fileChooser = (FileChooser) event.get().data(); assertTrue(fileChooser.isMultiple()); diff --git a/playwright/src/test/java/com/microsoft/playwright/TestPageWaitForNavigation.java b/playwright/src/test/java/com/microsoft/playwright/TestPageWaitForNavigation.java index 029c74b2..712d0a53 100644 --- a/playwright/src/test/java/com/microsoft/playwright/TestPageWaitForNavigation.java +++ b/playwright/src/test/java/com/microsoft/playwright/TestPageWaitForNavigation.java @@ -32,7 +32,7 @@ public class TestPageWaitForNavigation extends TestBase { @Test void shouldWork() { page.navigate(server.EMPTY_PAGE); - Deferred response = page.waitForNavigation(); + Deferred response = page.futureNavigation(); page.evaluate("url => window.location.href = url", server.PREFIX + "/grid.html"); assertTrue(response.get().ok()); assertTrue(response.get().url().contains("grid.html")); @@ -40,13 +40,13 @@ public class TestPageWaitForNavigation extends TestBase { @Test void shouldRespectTimeout() { - Deferred promise = page.waitForNavigation(new Page.WaitForNavigationOptions().withUrl("**/frame.html").withTimeout(5000)); + Deferred promise = page.futureNavigation(new Page.FutureNavigationOptions().withUrl("**/frame.html").withTimeout(5000)); page.navigate(server.EMPTY_PAGE); try { promise.get(); fail("did not throw"); } catch (PlaywrightException e) { -// assertTrue(e.getMessage().contains("page.waitForNavigation: Timeout 5000ms exceeded.")); +// assertTrue(e.getMessage().contains("page.futureNavigation: Timeout 5000ms exceeded.")); assertTrue(e.getMessage().contains("Timeout 5000ms exceeded")); // assertTrue(e.getMessage().contains("waiting for navigation to '**/frame.html' until 'load'")); // assertTrue(e.getMessage().contains("navigated to '${server.EMPTY_PAGE}'")); @@ -61,7 +61,7 @@ public class TestPageWaitForNavigation extends TestBase { void shouldWorkWithClickingOnAnchorLinks() { page.navigate(server.EMPTY_PAGE); page.setContent("foobar"); - Deferred response = page.waitForNavigation(); + Deferred response = page.futureNavigation(); page.click("a"); assertNull(response.get()); assertEquals(server.EMPTY_PAGE + "#foobar", page.url()); @@ -70,7 +70,7 @@ public class TestPageWaitForNavigation extends TestBase { @Test void shouldWorkWithClickingOnLinksWhichDoNotCommitNavigation() throws InterruptedException { page.navigate(server.EMPTY_PAGE); - Deferred event = page.waitForNavigation(); + Deferred event = page.futureNavigation(); page.setContent("foobar"); try { page.click("a"); @@ -91,7 +91,7 @@ public class TestPageWaitForNavigation extends TestBase { ""); - Deferred response = page.waitForNavigation(); + Deferred response = page.futureNavigation(); page.click("a"); assertNull(response.get()); assertEquals(server.PREFIX + "/wow.html", page.url()); @@ -104,7 +104,7 @@ public class TestPageWaitForNavigation extends TestBase { ""); - Deferred response = page.waitForNavigation(); + Deferred response = page.futureNavigation(); page.click("a"); assertNull(response.get()); assertEquals(server.PREFIX + "/replaced.html", page.url()); @@ -123,12 +123,12 @@ public class TestPageWaitForNavigation extends TestBase { ""); assertEquals(server.PREFIX + "/second.html", page.url()); - Deferred backResponse = page.waitForNavigation(); + Deferred backResponse = page.futureNavigation(); page.click("a#back"); assertNull(backResponse.get()); assertEquals(server.PREFIX + "/first.html", page.url()); - Deferred forwardResponse = page.waitForNavigation(); + Deferred forwardResponse = page.futureNavigation(); page.click("a#forward"); assertNull(forwardResponse.get()); assertEquals(server.PREFIX + "/second.html", page.url()); @@ -155,17 +155,17 @@ public class TestPageWaitForNavigation extends TestBase { void shouldWorkWithUrlMatch() { page.navigate(server.EMPTY_PAGE); - Deferred response1 = page.waitForNavigation(new Page.WaitForNavigationOptions().withUrl("**/one-style.html")); + Deferred response1 = page.futureNavigation(new Page.FutureNavigationOptions().withUrl("**/one-style.html")); page.navigate(server.PREFIX + "/one-style.html"); assertNotNull(response1.get()); assertEquals(server.PREFIX + "/one-style.html", response1.get().url()); - Deferred response2 = page.waitForNavigation(new Page.WaitForNavigationOptions().withUrl(Pattern.compile("frame.html$"))); + Deferred response2 = page.futureNavigation(new Page.FutureNavigationOptions().withUrl(Pattern.compile("frame.html$"))); page.navigate(server.PREFIX + "/frame.html"); assertNotNull(response2.get()); assertEquals(server.PREFIX + "/frame.html", response2.get().url()); - Deferred response3 = page.waitForNavigation(new Page.WaitForNavigationOptions().withUrl(url -> { + Deferred response3 = page.futureNavigation(new Page.FutureNavigationOptions().withUrl(url -> { try { return new URL(url).getQuery().contains("foo=bar"); } catch (MalformedURLException e) { @@ -180,7 +180,7 @@ public class TestPageWaitForNavigation extends TestBase { @Test void shouldWorkWithUrlMatchForSameDocumentNavigations() { page.navigate(server.EMPTY_PAGE); - Deferred waitPromise = page.waitForNavigation(new Page.WaitForNavigationOptions().withUrl("**/third.html")); + Deferred waitPromise = page.futureNavigation(new Page.FutureNavigationOptions().withUrl("**/third.html")); page.evaluate("() => {\n" + " history.pushState({}, '', '/first.html');\n" + "}"); @@ -196,7 +196,7 @@ public class TestPageWaitForNavigation extends TestBase { @Test void shouldWorkForCrossProcessNavigations() { page.navigate(server.EMPTY_PAGE); - Deferred waitPromise = page.waitForNavigation(new Page.WaitForNavigationOptions().withWaitUntil(Frame.LoadState.DOMCONTENTLOADED)); + Deferred waitPromise = page.futureNavigation(new Page.FutureNavigationOptions().withWaitUntil(Frame.LoadState.DOMCONTENTLOADED)); String url = server.CROSS_PROCESS_PREFIX + "/empty.html"; page.navigate(url); Response response = waitPromise.get(); @@ -209,7 +209,7 @@ public class TestPageWaitForNavigation extends TestBase { void shouldWorkOnFrame() { page.navigate(server.PREFIX + "/frames/one-frame.html"); Frame frame = page.frames().get(1); - Deferred response = frame.waitForNavigation(); + Deferred response = frame.futureNavigation(); frame.evaluate("url => window.location.href = url", server.PREFIX + "/grid.html"); assertTrue(response.get().ok()); assertTrue(response.get().url().contains("grid.html")); @@ -223,7 +223,7 @@ public class TestPageWaitForNavigation extends TestBase { Frame frame = page.frames().get(1); server.setRoute("/empty.html", exchange -> {}); try { - Deferred response = frame.waitForNavigation(); + Deferred response = frame.futureNavigation(); page.evaluate("() => {\n" + " frames[0].location.href = '/empty.html';\n" + " setTimeout(() => document.querySelector('iframe').remove());\n" + diff --git a/playwright/src/test/java/com/microsoft/playwright/TestPageWaitForRequest.java b/playwright/src/test/java/com/microsoft/playwright/TestPageWaitForRequest.java index c105b52f..b5df5c9a 100644 --- a/playwright/src/test/java/com/microsoft/playwright/TestPageWaitForRequest.java +++ b/playwright/src/test/java/com/microsoft/playwright/TestPageWaitForRequest.java @@ -28,7 +28,7 @@ public class TestPageWaitForRequest extends TestBase { @Test void shouldWork() { page.navigate(server.EMPTY_PAGE); - Deferred request = page.waitForRequest(server.PREFIX + "/digits/2.png"); + Deferred request = page.futureRequest(server.PREFIX + "/digits/2.png"); page.evaluate("() => {\n" + " fetch('/digits/1.png');\n" + " fetch('/digits/2.png');\n" + @@ -40,7 +40,7 @@ public class TestPageWaitForRequest extends TestBase { @Test void shouldWorkWithPredicate() { page.navigate(server.EMPTY_PAGE); - Deferred request = page.waitForRequest(url -> url.equals(server.PREFIX + "/digits/2.png")); + Deferred request = page.futureRequest(url -> url.equals(server.PREFIX + "/digits/2.png")); page.evaluate("() => {\n" + " fetch('/digits/1.png');\n" + " fetch('/digits/2.png');\n" + @@ -52,7 +52,7 @@ public class TestPageWaitForRequest extends TestBase { @Test void shouldRespectTimeout() { try { - page.waitForEvent(REQUEST, new Page.WaitForEventOptions() + page.futureEvent(REQUEST, new Page.FutureEventOptions() .withPredicate(url -> false).withTimeout(1)).get(); fail("did not throw"); } catch (PlaywrightException e) { @@ -64,7 +64,7 @@ public class TestPageWaitForRequest extends TestBase { void shouldRespectDefaultTimeout() { page.setDefaultTimeout(1); try { - page.waitForEvent(REQUEST, url -> false).get(); + page.futureEvent(REQUEST, url -> false).get(); fail("did not throw"); } catch (PlaywrightException e) { assertTrue(e.getMessage().contains("Timeout"), e.getMessage()); @@ -74,8 +74,8 @@ public class TestPageWaitForRequest extends TestBase { @Test void shouldWorkWithNoTimeout() { page.navigate(server.EMPTY_PAGE); - Deferred request = page.waitForRequest(server.PREFIX + "/digits/2.png", - new Page.WaitForRequestOptions().withTimeout(0)); + Deferred request = page.futureRequest(server.PREFIX + "/digits/2.png", + new Page.FutureRequestOptions().withTimeout(0)); page.evaluate("() => setTimeout(() => {\n" + " fetch('/digits/1.png');\n" + " fetch('/digits/2.png');\n" + @@ -87,7 +87,7 @@ public class TestPageWaitForRequest extends TestBase { @Test void shouldWorkWithUrlMatch() { page.navigate(server.EMPTY_PAGE); - Deferred request = page.waitForRequest(Pattern.compile(".*digits/\\d\\.png")); + Deferred request = page.futureRequest(Pattern.compile(".*digits/\\d\\.png")); page.evaluate("() => {\n" + " fetch('/digits/1.png');\n" + "}"); diff --git a/playwright/src/test/java/com/microsoft/playwright/TestPageWaitForResponse.java b/playwright/src/test/java/com/microsoft/playwright/TestPageWaitForResponse.java index 93bdcf44..d0b5af2b 100644 --- a/playwright/src/test/java/com/microsoft/playwright/TestPageWaitForResponse.java +++ b/playwright/src/test/java/com/microsoft/playwright/TestPageWaitForResponse.java @@ -26,7 +26,7 @@ public class TestPageWaitForResponse extends TestBase { @Test void shouldWork() { page.navigate(server.EMPTY_PAGE); - Deferred response = page.waitForResponse(server.PREFIX + "/digits/2.png"); + Deferred response = page.futureResponse(server.PREFIX + "/digits/2.png"); page.evaluate("() => {\n" + " fetch('/digits/1.png');\n" + " fetch('/digits/2.png');\n" + @@ -38,7 +38,7 @@ public class TestPageWaitForResponse extends TestBase { @Test void shouldRespectTimeout() { page.navigate(server.EMPTY_PAGE); - Deferred response = page.waitForResponse(url -> url.equals(server.PREFIX + "/digits/2.png")); + Deferred response = page.futureResponse(url -> url.equals(server.PREFIX + "/digits/2.png")); page.evaluate("() => {\n" + " fetch('/digits/1.png');\n" + " fetch('/digits/2.png');\n" + @@ -50,7 +50,7 @@ public class TestPageWaitForResponse extends TestBase { @Test void shouldWorkWithPredicate() { page.navigate(server.EMPTY_PAGE); - Deferred response = page.waitForResponse(url -> url.equals(server.PREFIX + "/digits/2.png")); + Deferred response = page.futureResponse(url -> url.equals(server.PREFIX + "/digits/2.png")); page.evaluate("() => {\n" + " fetch('/digits/1.png');\n" + " fetch('/digits/2.png');\n" + @@ -63,7 +63,7 @@ public class TestPageWaitForResponse extends TestBase { void shouldRespectDefaultTimeout() { page.setDefaultTimeout(1); try { - page.waitForEvent(RESPONSE, url -> false).get(); + page.futureEvent(RESPONSE, url -> false).get(); fail("did not throw"); } catch (PlaywrightException e) { assertTrue(e.getMessage().contains("Timeout"), e.getMessage()); @@ -73,8 +73,8 @@ public class TestPageWaitForResponse extends TestBase { @Test void shouldWorkWithNoTimeout() { page.navigate(server.EMPTY_PAGE); - Deferred response = page.waitForResponse(server.PREFIX + "/digits/2.png", - new Page.WaitForResponseOptions().withTimeout(0)); + Deferred response = page.futureResponse(server.PREFIX + "/digits/2.png", + new Page.FutureResponseOptions().withTimeout(0)); page.evaluate("() => setTimeout(() => {\n" + " fetch('/digits/1.png');\n" + " fetch('/digits/2.png');\n" + diff --git a/playwright/src/test/java/com/microsoft/playwright/TestPopup.java b/playwright/src/test/java/com/microsoft/playwright/TestPopup.java index 28efdc1c..4df57a95 100644 --- a/playwright/src/test/java/com/microsoft/playwright/TestPopup.java +++ b/playwright/src/test/java/com/microsoft/playwright/TestPopup.java @@ -37,11 +37,11 @@ public class TestPopup extends TestBase { Page page = context.newPage(); page.navigate(server.EMPTY_PAGE); page.setContent("link"); - Future requestPromise = server.waitForRequest("/popup/popup.html"); - Deferred> popupEvent = context.waitForEvent(BrowserContext.EventType.PAGE); + Future requestPromise = server.futureRequest("/popup/popup.html"); + Deferred> popupEvent = context.futureEvent(BrowserContext.EventType.PAGE); page.click("a"); Page popup = (Page) popupEvent.get().data(); - popup.waitForLoadState(DOMCONTENTLOADED).get(); + popup.waitForLoadState(DOMCONTENTLOADED); String userAgent = (String) popup.evaluate("() => window['initialUserAgent']"); Server.Request request = requestPromise.get(); context.close(); @@ -60,7 +60,7 @@ public class TestPopup extends TestBase { route.continue_(); intercepted[0] = true; }); - Deferred> popup = context.waitForEvent(BrowserContext.EventType.PAGE); + Deferred> popup = context.futureEvent(BrowserContext.EventType.PAGE); page.click("a"); popup.get(); @@ -75,7 +75,7 @@ public class TestPopup extends TestBase { .withExtraHTTPHeaders(mapOf("foo", "bar"))); Page page = context.newPage(); page.navigate(server.EMPTY_PAGE); - Future requestPromise = server.waitForRequest("/dummy.html"); + Future requestPromise = server.futureRequest("/dummy.html"); page.evaluate("url => window['_popup'] = window.open(url)", server.PREFIX + "/dummy.html"); Server.Request request = requestPromise.get(); context.close(); @@ -103,10 +103,10 @@ public class TestPopup extends TestBase { .withHttpCredentials("user", "pass")); Page page = context.newPage(); page.navigate(server.EMPTY_PAGE); - Deferred> popupEvent = page.waitForEvent(POPUP); + Deferred> popupEvent = page.futureEvent(POPUP); page.evaluate("url => window['_popup'] = window.open(url)", server.PREFIX + "/title.html"); Page popup = (Page) popupEvent.get().data(); - popup.waitForLoadState(DOMCONTENTLOADED).get(); + popup.waitForLoadState(DOMCONTENTLOADED); assertEquals("Woof-Woof", popup.title()); context.close(); } @@ -146,14 +146,14 @@ public class TestPopup extends TestBase { .withViewport(700, 700)); Page page = context.newPage(); page.navigate(server.EMPTY_PAGE); - Deferred> popupEvent = page.waitForEvent(POPUP); + Deferred> popupEvent = page.futureEvent(POPUP); Object size = page.evaluate("() => {\n" + " const win = window.open(window.location.href, 'Title', 'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=600,height=300,top=0,left=0');\n" + " return { width: win.innerWidth, height: win.innerHeight };\n" + "}"); Page popup = (Page) popupEvent.get().data(); popup.setViewportSize(500, 400); - popup.waitForLoadState().get(); + popup.waitForLoadState(); Object resized = popup.evaluate("() => ({ width: window.innerWidth, height: window.innerHeight })"); context.close(); assertEquals(mapOf("width", 600, "height", 300), size); @@ -170,7 +170,7 @@ public class TestPopup extends TestBase { route.continue_(); intercepted[0] = true; }); - Deferred> popupEvent = page.waitForEvent(POPUP); + Deferred> popupEvent = page.futureEvent(POPUP); page.evaluate("url => window['__popup'] = window.open(url)", server.EMPTY_PAGE); popupEvent.get(); assertTrue(intercepted[0]); @@ -197,7 +197,7 @@ public class TestPopup extends TestBase { context.addInitScript("() => window['injected'] = 123"); Page page = context.newPage(); page.navigate(server.EMPTY_PAGE); - Deferred> popupEvent = page.waitForEvent(POPUP); + Deferred> popupEvent = page.futureEvent(POPUP); page.evaluate("url => window.open(url)", server.CROSS_PROCESS_PREFIX + "/title.html"); Page popup = (Page) popupEvent.get().data(); assertEquals(123, popup.evaluate("injected")); diff --git a/playwright/src/test/java/com/microsoft/playwright/TestRequestContinue.java b/playwright/src/test/java/com/microsoft/playwright/TestRequestContinue.java index 209219eb..c5c6eef4 100644 --- a/playwright/src/test/java/com/microsoft/playwright/TestRequestContinue.java +++ b/playwright/src/test/java/com/microsoft/playwright/TestRequestContinue.java @@ -44,17 +44,17 @@ public class TestRequestContinue extends TestBase { route.continue_(new Route.ContinueOverrides().withHeaders(headers)); }); page.navigate(server.EMPTY_PAGE); - Future request = server.waitForRequest("/sleep.zzz"); + Future request = server.futureRequest("/sleep.zzz"); page.evaluate("() => fetch('/sleep.zzz')"); assertEquals(Arrays.asList("bar"), request.get().headers.get("foo")); } @Test void shouldAmendMethod() throws ExecutionException, InterruptedException { - Future sRequest = server.waitForRequest("/sleep.zzz"); + Future sRequest = server.futureRequest("/sleep.zzz"); page.navigate(server.EMPTY_PAGE); page.route("**/*", route -> route.continue_(new Route.ContinueOverrides().withMethod("POST"))); - Future request = server.waitForRequest("/sleep.zzz"); + Future request = server.futureRequest("/sleep.zzz"); page.evaluate("() => fetch('/sleep.zzz')"); assertEquals("POST", request.get().method); assertEquals("POST", sRequest.get().method); @@ -62,11 +62,11 @@ public class TestRequestContinue extends TestBase { @Test void shouldOverrideRequestUrl() throws ExecutionException, InterruptedException { - Future serverRequest = server.waitForRequest("/global-var.html"); + Future serverRequest = server.futureRequest("/global-var.html"); page.route("**/foo", route -> { route.continue_(new Route.ContinueOverrides().withUrl(server.PREFIX + "/global-var.html")); }); - Deferred> responseEvent = page.waitForEvent(RESPONSE); + Deferred> responseEvent = page.futureEvent(RESPONSE); page.navigate(server.PREFIX + "/foo"); Response response = (Response) responseEvent.get().data(); assertEquals(server.PREFIX + "/foo", response.url()); @@ -92,7 +92,7 @@ public class TestRequestContinue extends TestBase { @Test void shouldOverrideMethodAlongWithUrl() throws ExecutionException, InterruptedException { - Future serverRequest = server.waitForRequest("/empty.html"); + Future serverRequest = server.futureRequest("/empty.html"); page.route("**/foo", route -> { route.continue_(new Route.ContinueOverrides().withUrl(server.EMPTY_PAGE).withMethod("POST")); }); @@ -102,7 +102,7 @@ public class TestRequestContinue extends TestBase { @Test void shouldAmendMethodOnMainRequest() throws ExecutionException, InterruptedException { - Future request = server.waitForRequest("/empty.html"); + Future request = server.futureRequest("/empty.html"); page.route("**/*", route -> route.continue_(new Route.ContinueOverrides().withMethod("POST"))); page.navigate(server.EMPTY_PAGE); assertEquals("POST", request.get().method); @@ -114,7 +114,7 @@ public class TestRequestContinue extends TestBase { page.route("**/*", route -> { route.continue_(new Route.ContinueOverrides().withPostData("doggo")); }); - Future serverRequest = server.waitForRequest("/sleep.zzz"); + Future serverRequest = server.futureRequest("/sleep.zzz"); page.evaluate("() => fetch('/sleep.zzz', { method: 'POST', body: 'birdy' })"); assertEquals("doggo", new String(serverRequest.get().postBody, UTF_8)); } @@ -125,7 +125,7 @@ public class TestRequestContinue extends TestBase { page.route("**/*", route -> { route.continue_(new Route.ContinueOverrides().withPostData("пушкин")); }); - Future serverRequest = server.waitForRequest("/sleep.zzz"); + Future serverRequest = server.futureRequest("/sleep.zzz"); page.evaluate("() => fetch('/sleep.zzz', { method: 'POST', body: 'birdy' })"); assertEquals("POST", serverRequest.get().method); assertEquals("пушкин", new String(serverRequest.get().postBody, UTF_8)); @@ -137,7 +137,7 @@ public class TestRequestContinue extends TestBase { page.route("**/*", route -> { route.continue_(new Route.ContinueOverrides().withPostData("doggo-is-longer-than-birdy")); }); - Future serverRequest = server.waitForRequest("/sleep.zzz"); + Future serverRequest = server.futureRequest("/sleep.zzz"); page.evaluate("() => fetch('/sleep.zzz', { method: 'POST', body: 'birdy' })"); assertEquals("POST", serverRequest.get().method); assertEquals("doggo-is-longer-than-birdy", new String(serverRequest.get().postBody, UTF_8)); @@ -153,7 +153,7 @@ public class TestRequestContinue extends TestBase { page.route("**/*", route -> { route.continue_(new Route.ContinueOverrides().withPostData(arr)); }); - Future serverRequest = server.waitForRequest("/sleep.zzz"); + Future serverRequest = server.futureRequest("/sleep.zzz"); page.evaluate("() => fetch('/sleep.zzz', { method: 'POST', body: 'birdy' })"); assertEquals("POST", serverRequest.get().method); byte[] buffer = serverRequest.get().postBody; diff --git a/playwright/src/test/java/com/microsoft/playwright/TestWaitForFunction.java b/playwright/src/test/java/com/microsoft/playwright/TestWaitForFunction.java index a29d9435..53542832 100644 --- a/playwright/src/test/java/com/microsoft/playwright/TestWaitForFunction.java +++ b/playwright/src/test/java/com/microsoft/playwright/TestWaitForFunction.java @@ -35,15 +35,14 @@ public class TestWaitForFunction extends TestBase { void shouldTimeout() { Instant startTime = Instant.now(); int timeout = 42; - page.waitForTimeout(timeout).get(); + page.waitForTimeout(timeout); assertTrue(Duration.between(startTime, Instant.now()).toMillis() > timeout / 2); } @Test void shouldAcceptAString() { - Deferred watchdog = page.waitForFunction("window.__FOO === 1"); page.evaluate("() => window['__FOO'] = 1"); - watchdog.get(); + page.waitForFunction("window.__FOO === 1"); } @Test @@ -53,21 +52,21 @@ public class TestWaitForFunction extends TestBase { " if (!window['__RELOADED'])\n" + " window.location.reload();\n" + " return true;\n" + - "}").get(); + "}"); } @Test void shouldPollOnInterval() { int polling = 100; - Deferred timeDelta = page.waitForFunction("() => {\n" + + JSHandle timeDelta = page.waitForFunction("() => {\n" + " if (!window[\"__startTime\"]) {\n" + " window[\"__startTime\"] = Date.now();\n" + " return false;\n" + " }\n" + " return Date.now() - window[\"__startTime\"];\n" + "}", null, new Page.WaitForFunctionOptions().withPollingInterval(polling)); - int delta = (int) timeDelta.get().evaluate("h => h"); + int delta = (int) timeDelta.evaluate("h => h"); assertTrue(delta >= polling); } @@ -76,19 +75,18 @@ public class TestWaitForFunction extends TestBase { int[] counter = { 0 }; page.addListener(CONSOLE, event -> ++counter[0]); - Deferred result = page.waitForFunction("() => {\n" + - " window['counter'] = (window['counter'] || 0) + 1;\n" + - " console.log(window['counter']);\n" + - "}", null, new Page.WaitForFunctionOptions().withPollingInterval(1).withTimeout(1000)); try { - result.get(); + JSHandle result = page.waitForFunction("() => {\n" + + " window['counter'] = (window['counter'] || 0) + 1;\n" + + " console.log(window['counter']);\n" + + "}", null, new Page.WaitForFunctionOptions().withPollingInterval(1).withTimeout(1000)); fail("did not throw"); } catch (PlaywrightException e) { assertTrue(e.getMessage().contains("Timeout 1000ms exceeded")); } int savedCounter = counter[0]; - page.waitForTimeout(2000).get(); // Give it some time to produce more logs. + page.waitForTimeout(2000); // Give it some time to produce more logs. assertEquals(savedCounter, counter[0]); } @@ -98,15 +96,14 @@ public class TestWaitForFunction extends TestBase { @Test void shouldPollOnRaf() { - Deferred watchdog = page.waitForFunction("() => window['__FOO'] === 'hit'", null, new Page.WaitForFunctionOptions().withRequestAnimationFrame()); page.evaluate("() => window['__FOO'] = 'hit'"); - watchdog.get(); + page.waitForFunction("() => window['__FOO'] === 'hit'", null, new Page.WaitForFunctionOptions().withRequestAnimationFrame()); } @Test void shouldFailWithPredicateThrowingOnFirstCall() { try { - page.waitForFunction("() => { throw new Error('oh my'); }").get(); + page.waitForFunction("() => { throw new Error('oh my'); }"); fail("did not throw"); } catch (PlaywrightException e) { assertTrue(e.getMessage().contains("oh my")); @@ -121,7 +118,7 @@ public class TestWaitForFunction extends TestBase { " if (window['counter'] === 3)\n" + " throw new Error('Bad counter!');\n" + " return window['counter'] === 5 ? 'result' : false;\n" + - "}").get(); + "}"); fail("did not throw"); } catch (PlaywrightException e) { assertTrue(e.getMessage().contains("Bad counter!")); @@ -131,7 +128,7 @@ public class TestWaitForFunction extends TestBase { @Test void shouldFailWithReferenceErrorOnWrongPage() { try { - page.waitForFunction("() => globalVar === 123").get(); + page.waitForFunction("() => globalVar === 123"); fail("did not throw"); } catch (PlaywrightException e) { assertTrue(e.getMessage().contains("globalVar")); @@ -143,9 +140,8 @@ public class TestWaitForFunction extends TestBase { server.setCSP("/empty.html", "script-src " + server.PREFIX); page.navigate(server.EMPTY_PAGE); - Deferred result = page.waitForFunction("() => window['__FOO'] === 'hit'"); page.evaluate("() => window['__FOO'] = 'hit'"); - result.get(); + page.waitForFunction("() => window['__FOO'] === 'hit'"); } void shouldThrowOnBadPollingValue() { @@ -155,7 +151,7 @@ public class TestWaitForFunction extends TestBase { @Test void shouldThrowNegativePollingInterval() { try { - page.waitForFunction("() => !!document.body", null, new Page.WaitForFunctionOptions().withPollingInterval(-10)).get(); + page.waitForFunction("() => !!document.body", null, new Page.WaitForFunctionOptions().withPollingInterval(-10)); fail("did not throw"); } catch (PlaywrightException e) { assertTrue(e.getMessage().contains("Cannot poll with non-positive interval")); @@ -164,27 +160,26 @@ public class TestWaitForFunction extends TestBase { @Test void shouldReturnTheSuccessValueAsAJSHandle() { - assertEquals(5, (page.waitForFunction("5")).get().jsonValue()); + assertEquals(5, (page.waitForFunction("5")).jsonValue()); } @Test void shouldReturnTheWindowAsASuccessValue() { - assertNotNull(page.waitForFunction("() => window").get()); + assertNotNull(page.waitForFunction("() => window")); } @Test void shouldAcceptElementHandleArguments() { page.setContent("
"); ElementHandle div = page.querySelector("div"); - Deferred waitForFunction = page.waitForFunction("element => !element.parentElement", div); page.evaluate("element => element.remove()", div); - waitForFunction.get(); + page.waitForFunction("element => !element.parentElement", div); } @Test void shouldRespectTimeout() { try { - page.waitForFunction("false", null, new Page.WaitForFunctionOptions().withTimeout(10)).get(); + page.waitForFunction("false", null, new Page.WaitForFunctionOptions().withTimeout(10)); fail("did not throw"); } catch (PlaywrightException e) { assertTrue(e.getMessage().contains("Timeout 10ms exceeded")); @@ -195,7 +190,7 @@ public class TestWaitForFunction extends TestBase { void shouldRespectDefaultTimeout() { page.setDefaultTimeout(1); try { - page.waitForFunction("false").get(); + page.waitForFunction("false"); fail("did not throw"); } catch (PlaywrightException e) { assertTrue(e.getMessage().contains("Timeout 1ms exceeded")); @@ -204,44 +199,40 @@ public class TestWaitForFunction extends TestBase { @Test void shouldDisableTimeoutWhenItsSetTo0() { - Deferred watchdog = page.waitForFunction("() => {\n" + + page.waitForFunction("() => {\n" + " window['__counter'] = (window['__counter'] || 0) + 1;\n" + - " return window['__injected'];\n" + + " return window['__counter'] > 10;\n" + "}", null, new Page.WaitForFunctionOptions().withTimeout(0).withPollingInterval(10)); - page.waitForFunction("() => window['__counter'] > 10").get(); - page.evaluate("() => window['__injected'] = true"); - watchdog.get(); } @Test void shouldSurviveCrossProcessNavigation() { - Deferred waitForFunction = page.waitForFunction("window.__FOO === 1"); page.navigate(server.EMPTY_PAGE); page.reload(); page.navigate(server.CROSS_PROCESS_PREFIX + "/grid.html"); page.evaluate("() => window['__FOO'] = 1"); - assertNotNull(waitForFunction.get()); + JSHandle result = page.waitForFunction("window.__FOO === 1"); + assertNotNull(result); } @Test void shouldSurviveNavigations() { - Deferred watchdog = page.waitForFunction("() => window['__done']"); page.navigate(server.EMPTY_PAGE); page.navigate(server.PREFIX + "/consolelog.html"); page.evaluate("() => window['__done'] = true"); - watchdog.get(); + page.waitForFunction("() => window['__done']"); } @Test void shouldWorkWithMultilineBody() { - Deferred result = page.waitForFunction("\n () => true\n"); - assertEquals(true, result.get().jsonValue()); + JSHandle result = page.waitForFunction("\n () => true\n"); + assertEquals(true, result.jsonValue()); } @Test void shouldWaitForPredicateWithArguments() { - page.waitForFunction("({arg1, arg2}) => arg1 + arg2 === 3", mapOf("arg1", 1, "arg2", 2)).get(); + page.waitForFunction("({arg1, arg2}) => arg1 + arg2 === 3", mapOf("arg1", 1, "arg2", 2)); } @Test @@ -254,29 +245,20 @@ public class TestWaitForFunction extends TestBase { messages.add(msg.text()); } }); - { - Deferred result = page.waitForFunction("() => {\n" + - " console.log('waitForFunction1');\n" + - " return true;\n" + - "}"); - result.get(); - } + page.waitForFunction("() => {\n" + + " console.log('waitForFunction1');\n" + + " return true;\n" + + "}"); page.reload(); - { - Deferred result = page.waitForFunction("() => {\n" + - " console.log('waitForFunction2');\n" + - " return true;\n" + - "}"); - result.get(); - } + page.waitForFunction("() => {\n" + + " console.log('waitForFunction2');\n" + + " return true;\n" + + "}"); page.reload(); - { - Deferred result = page.waitForFunction("() => {\n" + - " console.log('waitForFunction3');\n" + - " return true;\n" + - "}"); - result.get(); - } + page.waitForFunction("() => {\n" + + " console.log('waitForFunction3');\n" + + " return true;\n" + + "}"); assertEquals(asList("waitForFunction1", "waitForFunction2", "waitForFunction3"), messages); } @@ -290,11 +272,10 @@ public class TestWaitForFunction extends TestBase { messages.add(msg.text()); }); try { - Deferred result = page.waitForFunction("() => {\n" + + page.waitForFunction("() => {\n" + " console.log('waitForFunction1');\n" + " throw new Error('waitForFunction1');\n" + "}"); - result.get(); fail("did not throw"); } catch (PlaywrightException e) { assertTrue(e.getMessage().contains("waitForFunction1")); @@ -304,7 +285,7 @@ public class TestWaitForFunction extends TestBase { page.waitForFunction("() => {\n" + " console.log('waitForFunction2');\n" + " throw new Error('waitForFunction2');\n" + - "}").get(); + "}"); } catch (PlaywrightException e) { assertTrue(e.getMessage().contains("waitForFunction2")); } @@ -313,7 +294,7 @@ public class TestWaitForFunction extends TestBase { page.waitForFunction("() => {\n" + " console.log('waitForFunction3');\n" + " throw new Error('waitForFunction3');\n" + - "}").get(); + "}"); } catch (PlaywrightException e) { assertTrue(e.getMessage().contains("waitForFunction3")); } diff --git a/playwright/src/test/java/com/microsoft/playwright/TestWebSocket.java b/playwright/src/test/java/com/microsoft/playwright/TestWebSocket.java index 6683c697..d3d81851 100644 --- a/playwright/src/test/java/com/microsoft/playwright/TestWebSocket.java +++ b/playwright/src/test/java/com/microsoft/playwright/TestWebSocket.java @@ -83,7 +83,7 @@ public class TestWebSocket extends TestBase { assertEquals(1, condition.length); Instant start = Instant.now(); while (!condition[0]) { - page.waitForTimeout(100).get(); + page.waitForTimeout(100); assertTrue(Duration.between(start, Instant.now()).getSeconds() < 30, "Timed out"); } } @@ -201,7 +201,7 @@ public class TestWebSocket extends TestBase { @Test void shouldNotHaveStrayErrorEvents() { - Deferred> wsEvent = page.waitForEvent(WEBSOCKET); + Deferred> wsEvent = page.futureEvent(WEBSOCKET); page.evaluate("port => {\n" + " window.ws = new WebSocket('ws://localhost:' + port + '/ws');\n" + "}", webSocketServer.getPort()); @@ -209,22 +209,22 @@ public class TestWebSocket extends TestBase { com.microsoft.playwright.WebSocket ws = (com.microsoft.playwright.WebSocket) wsEvent.get().data(); boolean[] error = {false}; ws.addListener(SOCKETERROR, e -> error[0] = true); - Deferred> frameReceivedEvent = ws.waitForEvent(FRAMERECEIVED); + Deferred> frameReceivedEvent = ws.futureEvent(FRAMERECEIVED); frameReceivedEvent.get(); page.evaluate("window.ws.close()"); assertFalse(error[0]); } @Test - void shouldRejectWaitForEventOnSocketClose() { - Deferred> wsEvent = page.waitForEvent(WEBSOCKET); + void shouldRejectFutureEventOnSocketClose() { + Deferred> wsEvent = page.futureEvent(WEBSOCKET); page.evaluate("port => {\n" + " window.ws = new WebSocket('ws://localhost:' + port + '/ws');\n" + "}", webSocketServer.getPort()); com.microsoft.playwright.WebSocket ws = (com.microsoft.playwright.WebSocket) wsEvent.get().data(); - ws.waitForEvent(FRAMERECEIVED).get(); - Deferred> frameSentEvent = ws.waitForEvent(FRAMESENT); + ws.futureEvent(FRAMERECEIVED).get(); + Deferred> frameSentEvent = ws.futureEvent(FRAMESENT); page.evaluate("window.ws.close()"); try { frameSentEvent.get(); @@ -235,15 +235,15 @@ public class TestWebSocket extends TestBase { } @Test - void shouldRejectWaitForEventOnPageClose() { - Deferred> wsEvent = page.waitForEvent(WEBSOCKET); + void shouldRejectFutureEventOnPageClose() { + Deferred> wsEvent = page.futureEvent(WEBSOCKET); page.evaluate("port => {\n" + " window.ws = new WebSocket('ws://localhost:' + port + '/ws');\n" + "}", webSocketServer.getPort()); com.microsoft.playwright.WebSocket ws = (com.microsoft.playwright.WebSocket) wsEvent.get().data(); - ws.waitForEvent(FRAMERECEIVED).get(); - Deferred> frameSentEvent = ws.waitForEvent(FRAMESENT); + ws.futureEvent(FRAMERECEIVED).get(); + Deferred> frameSentEvent = ws.futureEvent(FRAMESENT); page.close(); try { frameSentEvent.get(); diff --git a/playwright/src/test/java/com/microsoft/playwright/TestWorkers.java b/playwright/src/test/java/com/microsoft/playwright/TestWorkers.java index 058fd982..886be14c 100644 --- a/playwright/src/test/java/com/microsoft/playwright/TestWorkers.java +++ b/playwright/src/test/java/com/microsoft/playwright/TestWorkers.java @@ -29,7 +29,7 @@ public class TestWorkers extends TestBase { @Test void pageWorkers() { - Deferred> workerEvent = page.waitForEvent(WORKER); + Deferred> workerEvent = page.futureEvent(WORKER); page.navigate(server.PREFIX + "/worker/worker.html"); workerEvent.get(); Worker worker = page.workers().get(0); @@ -41,11 +41,11 @@ public class TestWorkers extends TestBase { @Test void shouldEmitCreatedAndDestroyedEvents() { - Deferred> workerCreatedPromise = page.waitForEvent(WORKER); + Deferred> workerCreatedPromise = page.futureEvent(WORKER); JSHandle workerObj = page.evaluateHandle("() => new Worker(URL.createObjectURL(new Blob(['1'], {type: 'application/javascript'})))"); Worker worker = (Worker) workerCreatedPromise.get().data(); JSHandle workerThisObj = worker.evaluateHandle("() => this"); - Deferred> workerDestroyedPromise = worker.waitForEvent(Worker.EventType.CLOSE); + Deferred> workerDestroyedPromise = worker.futureEvent(Worker.EventType.CLOSE); page.evaluate("workerObj => workerObj.terminate()", workerObj); assertEquals(worker, workerDestroyedPromise.get().data()); try { @@ -57,14 +57,14 @@ public class TestWorkers extends TestBase { @Test void shouldReportConsoleLogs() { - Deferred> consoleEvent = page.waitForEvent(CONSOLE); + Deferred> consoleEvent = page.futureEvent(CONSOLE); page.evaluate("() => new Worker(URL.createObjectURL(new Blob(['console.log(1)'], {type: 'application/javascript'})))"); assertEquals("1", ((ConsoleMessage) consoleEvent.get().data()).text()); } @Test void shouldHaveJSHandlesForConsoleLogs() { - Deferred> consoleEvent = page.waitForEvent(CONSOLE); + Deferred> consoleEvent = page.futureEvent(CONSOLE); page.evaluate("() => new Worker(URL.createObjectURL(new Blob(['console.log(1,2,3,this)'], {type: 'application/javascript'})))"); ConsoleMessage log = (ConsoleMessage) consoleEvent.get().data(); assertEquals("1 2 3 JSHandle@object", log.text()); @@ -74,7 +74,7 @@ public class TestWorkers extends TestBase { @Test void shouldEvaluate() { - Deferred> workerCreatedPromise = page.waitForEvent(WORKER); + Deferred> workerCreatedPromise = page.futureEvent(WORKER); page.evaluate("() => new Worker(URL.createObjectURL(new Blob(['console.log(1)'], {type: 'application/javascript'})))"); Worker worker = (Worker) workerCreatedPromise.get().data(); assertEquals(2, worker.evaluate("1+1")); @@ -82,7 +82,7 @@ public class TestWorkers extends TestBase { @Test void shouldReportErrors() { - Deferred> errorPromise = page.waitForEvent(PAGEERROR); + Deferred> errorPromise = page.futureEvent(PAGEERROR); page.evaluate("() => new Worker(URL.createObjectURL(new Blob([`\n" + " setTimeout(() => {\n" + " // Do a console.log just to check that we do not confuse it with an error.\n" + @@ -98,7 +98,7 @@ public class TestWorkers extends TestBase { @DisabledIf(value="com.microsoft.playwright.TestBase#isFirefox", disabledReason="flaky upstream") void shouldClearUponNavigation() { page.navigate(server.EMPTY_PAGE); - Deferred> workerCreatedPromise = page.waitForEvent(WORKER); + Deferred> workerCreatedPromise = page.futureEvent(WORKER); page.evaluate("() => new Worker(URL.createObjectURL(new Blob(['console.log(1)'], {type: 'application/javascript'})))"); Worker worker = (Worker) workerCreatedPromise.get().data(); assertEquals(1, page.workers().size()); @@ -112,7 +112,7 @@ public class TestWorkers extends TestBase { @Test void shouldClearUponCrossProcessNavigation() { page.navigate(server.EMPTY_PAGE); - Deferred> workerCreatedPromise = page.waitForEvent(WORKER); + Deferred> workerCreatedPromise = page.futureEvent(WORKER); page.evaluate("() => new Worker(URL.createObjectURL(new Blob(['console.log(1)'], {type: 'application/javascript'})))"); Worker worker = (Worker) workerCreatedPromise.get().data(); assertEquals(1, page.workers().size()); @@ -127,10 +127,10 @@ public class TestWorkers extends TestBase { @EnabledIf(value="com.microsoft.playwright.TestBase#isWebKit", disabledReason="fixme") void shouldAttributeNetworkActivityForWorkerInsideIframeToTheIframe() { page.navigate(server.PREFIX + "/empty.html"); - Deferred> workerEvent = page.waitForEvent(WORKER); + Deferred> workerEvent = page.futureEvent(WORKER); Frame frame = attachFrame(page, "frame1", server.PREFIX + "/worker/worker.html"); String url = server.PREFIX + "/one-style.css"; - Deferred request = page.waitForRequest(url); + Deferred request = page.futureRequest(url); Worker worker = (Worker) workerEvent.get().data(); worker.evaluate("url => fetch(url).then(response => response.text()).then(console.log)", url); @@ -141,12 +141,12 @@ public class TestWorkers extends TestBase { @Test void shouldReportNetworkActivity() { - Deferred> workerEvent = page.waitForEvent(WORKER); + Deferred> workerEvent = page.futureEvent(WORKER); page.navigate(server.PREFIX + "/worker/worker.html"); Worker worker = (Worker) workerEvent.get().data(); String url = server.PREFIX + "/one-style.css"; - Deferred requestPromise = page.waitForRequest(url); - Deferred responsePromise = page.waitForResponse(url); + Deferred requestPromise = page.futureRequest(url); + Deferred responsePromise = page.futureResponse(url); worker.evaluate("url => fetch(url).then(response => response.text()).then(console.log)", url); Request request = requestPromise.get(); Response response = responsePromise.get(); @@ -160,8 +160,8 @@ public class TestWorkers extends TestBase { // Chromium needs waitForDebugger enabled for this one. page.navigate(server.EMPTY_PAGE); String url = server.PREFIX + "/one-style.css"; - Deferred requestPromise = page.waitForRequest(url); - Deferred responsePromise = page.waitForResponse(url); + Deferred requestPromise = page.futureRequest(url); + Deferred responsePromise = page.futureResponse(url); page.evaluate("url => new Worker(URL.createObjectURL(new Blob([`\n" + " fetch('${url}').then(response => response.text()).then(console.log);\n" + "`], {type: 'application/javascript'})))", url); @@ -177,7 +177,7 @@ public class TestWorkers extends TestBase { BrowserContext context = browser.newContext(new Browser.NewContextOptions().withLocale("ru-RU")); Page page = context.newPage(); page.navigate(server.EMPTY_PAGE); - Deferred> workerEvent = page.waitForEvent(WORKER); + Deferred> workerEvent = page.futureEvent(WORKER); page.evaluate("() => new Worker(URL.createObjectURL(new Blob(['console.log(1)'], {type: 'application/javascript'})))"); Worker worker = (Worker) workerEvent.get().data(); assertEquals("10\u00A0000,2", worker.evaluate("() => (10000.20).toLocaleString()")); diff --git a/tools/api-generator/src/main/java/com/microsoft/playwright/tools/ApiGenerator.java b/tools/api-generator/src/main/java/com/microsoft/playwright/tools/ApiGenerator.java index 3a785434..4a8c9d39 100644 --- a/tools/api-generator/src/main/java/com/microsoft/playwright/tools/ApiGenerator.java +++ b/tools/api-generator/src/main/java/com/microsoft/playwright/tools/ApiGenerator.java @@ -266,6 +266,7 @@ class Method extends Element { tsToJavaMethodName.put("$", "querySelector"); tsToJavaMethodName.put("$$", "querySelectorAll"); tsToJavaMethodName.put("goto", "navigate"); + tsToJavaMethodName.put("waitForNavigation", "futureNavigation"); } private static Map customSignature = new HashMap<>(); @@ -355,35 +356,35 @@ class Method extends Element { customSignature.put("Frame.setInputFiles", setInputFilesWithSelector); String[] waitForEvent = { - "default Deferred> waitForEvent(EventType event) {", - " return waitForEvent(event, (WaitForEventOptions) null);", + "default Deferred> futureEvent(EventType event) {", + " return futureEvent(event, (FutureEventOptions) null);", "}", - "default Deferred> waitForEvent(EventType event, Predicate> predicate) {", - " WaitForEventOptions options = new WaitForEventOptions();", + "default Deferred> futureEvent(EventType event, Predicate> predicate) {", + " FutureEventOptions options = new FutureEventOptions();", " options.predicate = predicate;", - " return waitForEvent(event, options);", + " return futureEvent(event, options);", "}", - "Deferred> waitForEvent(EventType event, WaitForEventOptions options);", + "Deferred> futureEvent(EventType event, FutureEventOptions options);", }; customSignature.put("Page.waitForEvent", waitForEvent); customSignature.put("BrowserContext.waitForEvent", waitForEvent); customSignature.put("WebSocket.waitForEvent", waitForEvent); customSignature.put("Page.waitForRequest", new String[] { - "default Deferred waitForRequest(String urlGlob) { return waitForRequest(urlGlob, null); }", - "default Deferred waitForRequest(Pattern urlPattern) { return waitForRequest(urlPattern, null); }", - "default Deferred waitForRequest(Predicate urlPredicate) { return waitForRequest(urlPredicate, null); }", - "Deferred waitForRequest(String urlGlob, WaitForRequestOptions options);", - "Deferred waitForRequest(Pattern urlPattern, WaitForRequestOptions options);", - "Deferred waitForRequest(Predicate urlPredicate, WaitForRequestOptions options);" + "default Deferred futureRequest(String urlGlob) { return futureRequest(urlGlob, null); }", + "default Deferred futureRequest(Pattern urlPattern) { return futureRequest(urlPattern, null); }", + "default Deferred futureRequest(Predicate urlPredicate) { return futureRequest(urlPredicate, null); }", + "Deferred futureRequest(String urlGlob, FutureRequestOptions options);", + "Deferred futureRequest(Pattern urlPattern, FutureRequestOptions options);", + "Deferred futureRequest(Predicate urlPredicate, FutureRequestOptions options);" }); customSignature.put("Page.waitForResponse", new String[] { - "default Deferred waitForResponse(String urlGlob) { return waitForResponse(urlGlob, null); }", - "default Deferred waitForResponse(Pattern urlPattern) { return waitForResponse(urlPattern, null); }", - "default Deferred waitForResponse(Predicate urlPredicate) { return waitForResponse(urlPredicate, null); }", - "Deferred waitForResponse(String urlGlob, WaitForResponseOptions options);", - "Deferred waitForResponse(Pattern urlPattern, WaitForResponseOptions options);", - "Deferred waitForResponse(Predicate urlPredicate, WaitForResponseOptions options);" + "default Deferred futureResponse(String urlGlob) { return futureResponse(urlGlob, null); }", + "default Deferred futureResponse(Pattern urlPattern) { return futureResponse(urlPattern, null); }", + "default Deferred futureResponse(Predicate urlPredicate) { return futureResponse(urlPredicate, null); }", + "Deferred futureResponse(String urlGlob, FutureResponseOptions options);", + "Deferred futureResponse(Pattern urlPattern, FutureResponseOptions options);", + "Deferred futureResponse(Predicate urlPredicate, FutureResponseOptions options);" }); String[] selectOption = { @@ -636,15 +637,15 @@ class Field extends Element { void writeBuilderMethod(List output, String offset, String parentClass) { if (asList("Frame.waitForNavigation.options.url", "Page.waitForNavigation.options.url").contains(jsonPath)) { - output.add(offset + "public WaitForNavigationOptions withUrl(String glob) {"); + output.add(offset + "public FutureNavigationOptions withUrl(String glob) {"); output.add(offset + " this.glob = glob;"); output.add(offset + " return this;"); output.add(offset + "}"); - output.add(offset + "public WaitForNavigationOptions withUrl(Pattern pattern) {"); + output.add(offset + "public FutureNavigationOptions withUrl(Pattern pattern) {"); output.add(offset + " this.pattern = pattern;"); output.add(offset + " return this;"); output.add(offset + "}"); - output.add(offset + "public WaitForNavigationOptions withUrl(Predicate predicate) {"); + output.add(offset + "public FutureNavigationOptions withUrl(Predicate predicate) {"); output.add(offset + " this.predicate = predicate;"); output.add(offset + " return this;"); output.add(offset + "}"); @@ -833,7 +834,7 @@ class Interface extends TypeDefinition { m.writeTo(output, offset); } if ("Worker".equals(jsonName)) { - output.add(offset + "Deferred> waitForEvent(EventType event);"); + output.add(offset + "Deferred> futureEvent(EventType event);"); } output.add("}"); output.add("\n"); @@ -1052,15 +1053,15 @@ class Interface extends TypeDefinition { } } if (asList("Page", "BrowserContext", "WebSocket").contains(jsonName)){ - output.add(offset + "class WaitForEventOptions {"); + output.add(offset + "class FutureEventOptions {"); output.add(offset + " public Integer timeout;"); output.add(offset + " public Predicate> predicate;"); - output.add(offset + " public WaitForEventOptions withTimeout(int millis) {"); + output.add(offset + " public FutureEventOptions withTimeout(int millis) {"); output.add(offset + " timeout = millis;"); output.add(offset + " return this;"); output.add(offset + " }"); - output.add(offset + " public WaitForEventOptions withPredicate(Predicate> predicate) {"); + output.add(offset + " public FutureEventOptions withPredicate(Predicate> predicate) {"); output.add(offset + " this.predicate = predicate;"); output.add(offset + " return this;"); output.add(offset + " }"); diff --git a/tools/api-generator/src/main/java/com/microsoft/playwright/tools/Types.java b/tools/api-generator/src/main/java/com/microsoft/playwright/tools/Types.java index f9b6aa8a..fb73548a 100644 --- a/tools/api-generator/src/main/java/com/microsoft/playwright/tools/Types.java +++ b/tools/api-generator/src/main/java/com/microsoft/playwright/tools/Types.java @@ -212,17 +212,17 @@ class Types { add("Page.waitForResponse", "Promise", "Deferred"); add("Page.waitForNavigation", "Promise", "Deferred"); add("Frame.waitForNavigation", "Promise", "Deferred"); - add("Page.waitForSelector", "Promise", "Deferred", new Empty()); - add("Frame.waitForSelector", "Promise", "Deferred", new Empty()); - add("ElementHandle.waitForSelector", "Promise", "Deferred", new Empty()); + add("Page.waitForSelector", "Promise", "ElementHandle", new Empty()); + add("Frame.waitForSelector", "Promise", "ElementHandle", new Empty()); + add("ElementHandle.waitForSelector", "Promise", "ElementHandle", new Empty()); - add("Frame.waitForLoadState", "Promise", "Deferred", new Empty()); - add("Page.waitForLoadState", "Promise", "Deferred", new Empty()); - add("Frame.waitForTimeout", "Promise", "Deferred", new Empty()); - add("Page.waitForTimeout", "Promise", "Deferred", new Empty()); - add("Frame.waitForFunction", "Promise", "Deferred", new Empty()); - add("Page.waitForFunction", "Promise", "Deferred", new Empty()); - add("ElementHandle.waitForElementState", "Promise", "Deferred", new Empty()); + add("Frame.waitForLoadState", "Promise", "void", new Empty()); + add("Page.waitForLoadState", "Promise", "void", new Empty()); + add("Frame.waitForTimeout", "Promise", "void", new Empty()); + add("Page.waitForTimeout", "Promise", "void", new Empty()); + add("Frame.waitForFunction", "Promise", "JSHandle", new Empty()); + add("Page.waitForFunction", "Promise", "JSHandle", new Empty()); + add("ElementHandle.waitForElementState", "Promise", "void", new Empty()); // Custom options add("Page.pdf.options.margin.top", "string|number", "String"); @@ -259,7 +259,10 @@ class Types { add("BrowserContext.waitForEvent.event", "string", "EventType", new Empty()); add("BrowserContext.waitForEvent.optionsOrPredicate", "Function|Object", "String"); add("BrowserContext.waitForEvent", "Promise", "Deferred>", new Empty()); - add("Page.waitForNavigation.options.url", "string|RegExp|Function", "String"); + add("Page.waitForNavigation.options.url", "string|RegExp|Function", "Custom"); + add("Page.waitForNavigation.options", "Object", "FutureNavigationOptions"); + add("Page.waitForRequest.options", "Object", "FutureRequestOptions"); + add("Page.waitForResponse.options", "Object", "FutureResponseOptions"); add("Page.frame.options", "string|Object", "FrameOptions", new Empty()); add("Page.route.url", "string|RegExp|function(URL):boolean", "String"); add("Page.selectOption.values", "null|string|ElementHandle|Array|Object|Array|Array", "String"); @@ -270,7 +273,8 @@ class Types { add("Page.waitForEvent", "Promise", "Deferred>", new Empty()); add("Page.waitForRequest.urlOrPredicate", "string|RegExp|Function", "String"); add("Page.waitForResponse.urlOrPredicate", "string|RegExp|function(Response):boolean", "String"); - add("Frame.waitForNavigation.options.url", "string|RegExp|Function", "String"); + add("Frame.waitForNavigation.options.url", "string|RegExp|Function", "Custom"); + add("Frame.waitForNavigation.options", "Object", "FutureNavigationOptions"); add("Frame.selectOption.values", "null|string|ElementHandle|Array|Object|Array|Array", "String"); add("Frame.setInputFiles.files", "string|Array|Object|Array", "String"); add("ElementHandle.selectOption.values", "null|string|ElementHandle|Array|Object|Array|Array", "String");