From a969afecad962f99f75d43564fed91854847a6f2 Mon Sep 17 00:00:00 2001 From: Yury Semikhatsky Date: Tue, 13 Oct 2020 12:09:32 -0700 Subject: [PATCH] fix: split page.frame() into overloaded methods (#11) --- .../playwright/tools/ApiGenerator.java | 30 ++++------------ .../java/com/microsoft/playwright/Page.java | 28 +++------------ .../microsoft/playwright/impl/PageImpl.java | 36 ++++++++++++------- .../microsoft/playwright/TestPageBasic.java | 10 +++--- 4 files changed, 39 insertions(+), 65 deletions(-) diff --git a/api-generator/src/main/java/com/microsoft/playwright/tools/ApiGenerator.java b/api-generator/src/main/java/com/microsoft/playwright/tools/ApiGenerator.java index 766a0315..301bec1e 100644 --- a/api-generator/src/main/java/com/microsoft/playwright/tools/ApiGenerator.java +++ b/api-generator/src/main/java/com/microsoft/playwright/tools/ApiGenerator.java @@ -307,6 +307,12 @@ class Method extends Element { "void route(Pattern url, BiConsumer handler);", "void route(Predicate url, BiConsumer handler);", }); + customSignature.put("Page.frame", new String[]{ + "Frame frameByName(String name);", + "Frame frameByUrl(String glob);", + "Frame frameByUrl(Pattern pattern);", + "Frame frameByUrl(Predicate predicate);", + }); customSignature.put("Page.route", new String[]{ "void route(String url, BiConsumer handler);", "void route(Pattern url, BiConsumer handler);", @@ -614,30 +620,6 @@ class Interface extends TypeDefinition { output.add(offset + " Object call(Source source, Object... args);"); output.add(offset + "}"); output.add(""); - - output.add(offset + "class FrameOptions {"); - output.add(offset + " public String name;"); - output.add(offset + " public String url;"); - output.add(offset + " public Pattern urlPattern;"); - output.add(offset + " public Predicate urlPredicate;"); - output.add(""); - output.add(offset + " FrameOptions withName(String name) {"); - output.add(offset + " this.name = name;"); - output.add(offset + " return this;"); - output.add(offset + " }"); - output.add(offset + " FrameOptions withUrl(String url) {"); - output.add(offset + " this.url = url;"); - output.add(offset + " return this;"); - output.add(offset + " }"); - output.add(offset + " FrameOptions withUrl(Pattern pattern) {"); - output.add(offset + " urlPattern = pattern;"); - output.add(offset + " return this;"); - output.add(offset + " }"); - output.add(offset + " FrameOptions withUrl(Predicate predicate) {"); - output.add(offset + " urlPredicate = predicate;"); - output.add(offset + " return this;"); - output.add(offset + " }"); - output.add(offset + "}"); break; } case "BrowserContext": { diff --git a/playwright/src/main/java/com/microsoft/playwright/Page.java b/playwright/src/main/java/com/microsoft/playwright/Page.java index dbc9e8c9..3bc07692 100644 --- a/playwright/src/main/java/com/microsoft/playwright/Page.java +++ b/playwright/src/main/java/com/microsoft/playwright/Page.java @@ -54,29 +54,6 @@ public interface Page { Object call(Source source, Object... args); } - class FrameOptions { - public String name; - public String url; - public Pattern urlPattern; - public Predicate urlPredicate; - - FrameOptions withName(String name) { - this.name = name; - return this; - } - FrameOptions withUrl(String url) { - this.url = url; - return this; - } - FrameOptions withUrl(Pattern pattern) { - urlPattern = pattern; - return this; - } - FrameOptions withUrl(Predicate predicate) { - urlPredicate = predicate; - return this; - } - } enum EventType { CLOSE, @@ -853,7 +830,10 @@ public interface Page { focus(selector, null); } void focus(String selector, FocusOptions options); - Frame frame(FrameOptions options); + Frame frameByName(String name); + Frame frameByUrl(String glob); + Frame frameByUrl(Pattern pattern); + Frame frameByUrl(Predicate predicate); List frames(); default String getAttribute(String selector, String name) { return getAttribute(selector, name, null); 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 9280078f..17e031db 100644 --- a/playwright/src/main/java/com/microsoft/playwright/impl/PageImpl.java +++ b/playwright/src/main/java/com/microsoft/playwright/impl/PageImpl.java @@ -267,21 +267,33 @@ public class PageImpl extends ChannelOwner implements Page { } @Override - public Frame frame(FrameOptions options) { - if (options == null) { - throw new IllegalArgumentException("Frame criteria should be specified"); - } + public Frame frameByName(String name) { for (Frame frame : frames) { - if (options.name != null && options.name.equals(frame.name())) { + if (name.equals(frame.name())) { return frame; } - if (options.url != null && options.url.equals(frame.url())) { - return frame; - } - if (options.urlPattern != null && options.urlPattern.matcher(frame.url()).matches()) { - return frame; - } - if (options.urlPredicate != null && options.urlPredicate.test(frame.url())) { + } + return null; + } + + @Override + public Frame frameByUrl(String glob) { + return frameFor(new UrlMatcher(glob)); + } + + @Override + public Frame frameByUrl(Pattern pattern) { + return frameFor(new UrlMatcher(pattern)); + } + + @Override + public Frame frameByUrl(Predicate predicate) { + return frameFor(new UrlMatcher(predicate)); + } + + private Frame frameFor(UrlMatcher matcher) { + for (Frame frame : frames) { + if (matcher.test(frame.url())) { return frame; } } diff --git a/playwright/src/test/java/com/microsoft/playwright/TestPageBasic.java b/playwright/src/test/java/com/microsoft/playwright/TestPageBasic.java index 81a5c637..57acb387 100644 --- a/playwright/src/test/java/com/microsoft/playwright/TestPageBasic.java +++ b/playwright/src/test/java/com/microsoft/playwright/TestPageBasic.java @@ -259,8 +259,8 @@ public class TestPageBasic { @Test void pageFrameShouldRespectName() { page.setContent(""); - assertNull(page.frame(new Page.FrameOptions().withName("bogus"))); - Frame frame = page.frame(new Page.FrameOptions().withName("target")); + assertNull(page.frameByName("bogus")); + Frame frame = page.frameByName("target"); assertNotNull(frame); assertEquals(page.mainFrame().childFrames().get(0), frame); } @@ -268,8 +268,8 @@ public class TestPageBasic { @Test void pageFrameShouldRespectUrl() { page.setContent(""); - assertNull(page.frame(new Page.FrameOptions().withUrl(Pattern.compile("bogus")))); - Frame frame = page.frame(new Page.FrameOptions().withUrl(Pattern.compile(".*empty.*"))); + assertNull(page.frameByUrl(Pattern.compile("bogus"))); + Frame frame = page.frameByUrl(Pattern.compile(".*empty.*")); assertNotNull(frame); assertEquals(server.EMPTY_PAGE, frame.url()); } @@ -321,7 +321,7 @@ public class TestPageBasic { @Test void framePressShouldWork() { page.setContent(""); - Frame frame = page.frame(new Page.FrameOptions().withName("inner")); + Frame frame = page.frameByName("inner"); frame.press("textarea", "a"); assertEquals("a", frame.evaluate("() => document.querySelector('textarea').value")); }