From b8a774eecc37f8aa55c8f4de7e99e49b1744137d Mon Sep 17 00:00:00 2001 From: Yury Semikhatsky Date: Fri, 12 Feb 2021 16:23:04 -0800 Subject: [PATCH] fix: generate frameByUrl from api.json (#285) --- .../java/com/microsoft/playwright/Page.java | 25 +++++++++++++++---- .../microsoft/playwright/impl/PageImpl.java | 2 +- .../TestElementHandleBoundingBox.java | 2 +- .../microsoft/playwright/TestPageBasic.java | 6 ++--- scripts/CLI_VERSION | 2 +- .../playwright/tools/ApiGenerator.java | 11 ++++---- .../com/microsoft/playwright/tools/Types.java | 2 -- 7 files changed, 31 insertions(+), 19 deletions(-) diff --git a/playwright/src/main/java/com/microsoft/playwright/Page.java b/playwright/src/main/java/com/microsoft/playwright/Page.java index 92c42dce..9805694c 100644 --- a/playwright/src/main/java/com/microsoft/playwright/Page.java +++ b/playwright/src/main/java/com/microsoft/playwright/Page.java @@ -1904,16 +1904,31 @@ public interface Page extends AutoCloseable { * [working with selectors](./selectors.md) for more details. */ void focus(String selector, FocusOptions options); - Frame frameByName(String name); - Frame frameByUrl(String glob); - Frame frameByUrl(Pattern pattern); /** * Returns frame matching the specified criteria. Either {@code name} or {@code url} must be specified. * * - * @param frameSelector Frame name or other frame lookup options. + * @param name Frame name specified in the {@code iframe}'s {@code name} attribute. */ - Frame frameByUrl(Predicate predicate); + Frame frame(String name); + /** + * Returns frame with matching URL. + * + * @param url A glob pattern, regex pattern or predicate receiving frame's {@code url} as a [URL] object. + */ + Frame frameByUrl(String url); + /** + * Returns frame with matching URL. + * + * @param url A glob pattern, regex pattern or predicate receiving frame's {@code url} as a [URL] object. + */ + Frame frameByUrl(Pattern url); + /** + * Returns frame with matching URL. + * + * @param url A glob pattern, regex pattern or predicate receiving frame's {@code url} as a [URL] object. + */ + Frame frameByUrl(Predicate url); /** * An array of all frames attached to the page. */ 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 5227350a..77c319b7 100644 --- a/playwright/src/main/java/com/microsoft/playwright/impl/PageImpl.java +++ b/playwright/src/main/java/com/microsoft/playwright/impl/PageImpl.java @@ -687,7 +687,7 @@ public class PageImpl extends ChannelOwner implements Page { } @Override - public Frame frameByName(String name) { + public Frame frame(String name) { for (Frame frame : frames) { if (name.equals(frame.name())) { return frame; diff --git a/playwright/src/test/java/com/microsoft/playwright/TestElementHandleBoundingBox.java b/playwright/src/test/java/com/microsoft/playwright/TestElementHandleBoundingBox.java index 885823da..d8a339f5 100644 --- a/playwright/src/test/java/com/microsoft/playwright/TestElementHandleBoundingBox.java +++ b/playwright/src/test/java/com/microsoft/playwright/TestElementHandleBoundingBox.java @@ -47,7 +47,7 @@ public class TestElementHandleBoundingBox extends TestBase { void shouldHandleNestedFrames() { page.setViewportSize(500, 500); page.navigate(server.PREFIX + "/frames/nested-frames.html"); - Frame nestedFrame = page.frameByName("dos"); + Frame nestedFrame = page.frame("dos"); assertNotNull(nestedFrame); ElementHandle elementHandle = nestedFrame.querySelector("div"); BoundingBox box = elementHandle.boundingBox(); diff --git a/playwright/src/test/java/com/microsoft/playwright/TestPageBasic.java b/playwright/src/test/java/com/microsoft/playwright/TestPageBasic.java index 97195000..32a71c3a 100644 --- a/playwright/src/test/java/com/microsoft/playwright/TestPageBasic.java +++ b/playwright/src/test/java/com/microsoft/playwright/TestPageBasic.java @@ -210,8 +210,8 @@ public class TestPageBasic extends TestBase { @Test void pageFrameShouldRespectName() { page.setContent(""); - assertNull(page.frameByName("bogus")); - Frame frame = page.frameByName("target"); + assertNull(page.frame("bogus")); + Frame frame = page.frame("target"); assertNotNull(frame); assertEquals(page.mainFrame().childFrames().get(0), frame); } @@ -272,7 +272,7 @@ public class TestPageBasic extends TestBase { @Test void framePressShouldWork() { page.setContent(""); - Frame frame = page.frameByName("inner"); + Frame frame = page.frame("inner"); frame.press("textarea", "a"); assertEquals("a", frame.evaluate("() => document.querySelector('textarea').value")); } diff --git a/scripts/CLI_VERSION b/scripts/CLI_VERSION index dbd0d964..8f6222f1 100644 --- a/scripts/CLI_VERSION +++ b/scripts/CLI_VERSION @@ -1 +1 @@ -1.9.0-next-1613169016000 +1.9.0-next-1613173968000 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 fcdf3fab..a066b979 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 @@ -464,12 +464,6 @@ class Method extends Element { private static Map customSignature = new HashMap<>(); static { customSignature.put("Page.setViewportSize", new String[]{"void setViewportSize(int width, int height);"}); - customSignature.put("Page.frame", new String[]{ - "Frame frameByName(String name);", - "Frame frameByUrl(String glob);", - "Frame frameByUrl(Pattern pattern);", - "Frame frameByUrl(Predicate predicate);", - }); customSignature.put("BrowserContext.cookies", new String[]{ "default List cookies() { return cookies((List) null); }", "default List cookies(String url) { return cookies(Arrays.asList(url)); }", @@ -568,6 +562,11 @@ class Method extends Element { returnType = new TypeRef(this, jsonElement.get("type")); if (jsonElement.has("args")) { for (JsonElement arg : jsonElement.getAsJsonArray("args")) { + JsonObject paramObj = arg.getAsJsonObject(); + if (paramObj.get("name").getAsString().equals("options") && + paramObj.getAsJsonObject("type").getAsJsonArray("properties").size() == 0) { + continue; + } params.add(new Param(this, arg.getAsJsonObject())); } } 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 89affe4b..d014423c 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 @@ -52,8 +52,6 @@ class Types { add("Page.exposeFunction.callback", "function", "FunctionCallback"); // The method has custom signatures - add("Page.frame.frameSelector", "Object|string", "Custom", new Empty()); - add("Page.frame.options", "Object", "FrameOptions", new Empty()); add("Page.selectOption.values", "Array|Array|Array|ElementHandle|Object|null|string", "String"); add("Page.setInputFiles.files", "Array|Array|Object|path", "String"); add("Frame.selectOption.values", "Array|Array|Array|ElementHandle|Object|null|string", "String");