From 06b88b3d4b57e25ae021e516ff2036a9306f4624 Mon Sep 17 00:00:00 2001 From: Yury Semikhatsky Date: Fri, 7 May 2021 23:21:07 +0000 Subject: [PATCH] fix: support slowMo options in browserType.connect (#434) --- .../microsoft/playwright/impl/BrowserTypeImpl.java | 6 +++++- .../java/com/microsoft/playwright/impl/Utils.java | 1 - .../microsoft/playwright/impl/WebSocketTransport.java | 10 ++++++++-- .../microsoft/playwright/TestBrowserTypeConnect.java | 11 +++++++++++ 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/playwright/src/main/java/com/microsoft/playwright/impl/BrowserTypeImpl.java b/playwright/src/main/java/com/microsoft/playwright/impl/BrowserTypeImpl.java index e84d3f37..6e9890b7 100644 --- a/playwright/src/main/java/com/microsoft/playwright/impl/BrowserTypeImpl.java +++ b/playwright/src/main/java/com/microsoft/playwright/impl/BrowserTypeImpl.java @@ -61,6 +61,7 @@ class BrowserTypeImpl extends ChannelOwner implements BrowserType { try { Duration timeout = Duration.ofDays(1); Map headers = Collections.emptyMap(); + Duration slowMo = null; if (options != null) { if (options.timeout != null) { timeout = Duration.ofMillis(Math.round(options.timeout)); @@ -68,8 +69,11 @@ class BrowserTypeImpl extends ChannelOwner implements BrowserType { if (options.headers != null) { headers = options.headers; } + if (options.slowMo != null) { + slowMo = Duration.ofMillis(options.slowMo.intValue()); + } } - WebSocketTransport transport = new WebSocketTransport(new URI(wsEndpoint), headers, timeout); + WebSocketTransport transport = new WebSocketTransport(new URI(wsEndpoint), headers, timeout, slowMo); Connection connection = new Connection(transport); PlaywrightImpl playwright = (PlaywrightImpl) connection.waitForObjectWithKnownName("Playwright"); if (!playwright.initializer.has("preLaunchedBrowser")) { diff --git a/playwright/src/main/java/com/microsoft/playwright/impl/Utils.java b/playwright/src/main/java/com/microsoft/playwright/impl/Utils.java index 0a3b8a88..78ef3e73 100644 --- a/playwright/src/main/java/com/microsoft/playwright/impl/Utils.java +++ b/playwright/src/main/java/com/microsoft/playwright/impl/Utils.java @@ -38,7 +38,6 @@ class Utils { .registerTypeAdapter(Optional.class, new OptionalSerializer()) .create(); String json = gson.toJson(f); - System.err.println("json = " + json); return gson.fromJson(json, t); } diff --git a/playwright/src/main/java/com/microsoft/playwright/impl/WebSocketTransport.java b/playwright/src/main/java/com/microsoft/playwright/impl/WebSocketTransport.java index 267543d9..037dfde3 100644 --- a/playwright/src/main/java/com/microsoft/playwright/impl/WebSocketTransport.java +++ b/playwright/src/main/java/com/microsoft/playwright/impl/WebSocketTransport.java @@ -33,6 +33,7 @@ import java.util.function.Consumer; class WebSocketTransport implements Transport { private final BlockingQueue incoming = new LinkedBlockingQueue<>(); private final ClientConnection clientConnection; + private final Duration slowMo; private boolean isClosed; private volatile Exception lastError; ListenerCollection listeners = new ListenerCollection<>(); @@ -63,7 +64,7 @@ class WebSocketTransport implements Transport { } } - WebSocketTransport(URI uri, Map headers, Duration timeout) { + WebSocketTransport(URI uri, Map headers, Duration timeout, Duration slowMo) { clientConnection = new ClientConnection(uri); for (Map.Entry entry : headers.entrySet()) { clientConnection.addHeader(entry.getKey(), entry.getValue()); @@ -75,6 +76,7 @@ class WebSocketTransport implements Transport { } catch (InterruptedException e) { throw new PlaywrightException("Failed to connect", e); } + this.slowMo = slowMo; } @Override @@ -87,7 +89,11 @@ class WebSocketTransport implements Transport { public String poll(Duration timeout) { checkIfClosed(); try { - return incoming.poll(timeout.toMillis(), TimeUnit.MILLISECONDS); + String message = incoming.poll(timeout.toMillis(), TimeUnit.MILLISECONDS); + if (slowMo != null && message != null) { + Thread.sleep(slowMo.toMillis()); + } + return message; } catch (InterruptedException e) { throw new PlaywrightException("Failed to read message", e); } diff --git a/playwright/src/test/java/com/microsoft/playwright/TestBrowserTypeConnect.java b/playwright/src/test/java/com/microsoft/playwright/TestBrowserTypeConnect.java index a6db747c..27a00660 100644 --- a/playwright/src/test/java/com/microsoft/playwright/TestBrowserTypeConnect.java +++ b/playwright/src/test/java/com/microsoft/playwright/TestBrowserTypeConnect.java @@ -116,6 +116,17 @@ public class TestBrowserTypeConnect extends TestBase { } } + @Test + void shouldSupportSlowMo() { + Browser browser = browserType.connect(wsEndpoint, + new BrowserType.ConnectOptions().setSlowMo(1)); + BrowserContext browserContext = browser.newContext(); + Page page = browserContext.newPage(); + assertEquals(121, page.evaluate("11 * 11")); + page.navigate(server.EMPTY_PAGE); + browser.close(); + } + @Test void shouldBeAbleToConnectTwoBrowsersAtTheSameTime() { Browser browser1 = browserType.connect(wsEndpoint);