mirror of
https://github.com/microsoft/playwright-java.git
synced 2025-09-08 21:01:00 +00:00
chore: use Path instead of File in public API (#56)
This commit is contained in:
parent
4a65757957
commit
3da0ac6e85
@ -285,30 +285,30 @@ class Method extends Element {
|
|||||||
"void addCookies(List<AddCookie> cookies);"
|
"void addCookies(List<AddCookie> cookies);"
|
||||||
});
|
});
|
||||||
customSignature.put("FileChooser.setFiles", new String[]{
|
customSignature.put("FileChooser.setFiles", new String[]{
|
||||||
"default void setFiles(File file) { setFiles(file, null); }",
|
"default void setFiles(Path file) { setFiles(file, null); }",
|
||||||
"default void setFiles(File file, SetFilesOptions options) { setFiles(new File[]{ file }, options); }",
|
"default void setFiles(Path file, SetFilesOptions options) { setFiles(new Path[]{ file }, options); }",
|
||||||
"default void setFiles(File[] files) { setFiles(files, null); }",
|
"default void setFiles(Path[] files) { setFiles(files, null); }",
|
||||||
"void setFiles(File[] files, SetFilesOptions options);",
|
"void setFiles(Path[] files, SetFilesOptions options);",
|
||||||
"default void setFiles(FileChooser.FilePayload file) { setFiles(file, null); }",
|
"default void setFiles(FileChooser.FilePayload file) { setFiles(file, null); }",
|
||||||
"default void setFiles(FileChooser.FilePayload file, SetFilesOptions options) { setFiles(new FileChooser.FilePayload[]{ file }, options); }",
|
"default void setFiles(FileChooser.FilePayload file, SetFilesOptions options) { setFiles(new FileChooser.FilePayload[]{ file }, options); }",
|
||||||
"default void setFiles(FileChooser.FilePayload[] files) { setFiles(files, null); }",
|
"default void setFiles(FileChooser.FilePayload[] files) { setFiles(files, null); }",
|
||||||
"void setFiles(FileChooser.FilePayload[] files, SetFilesOptions options);",
|
"void setFiles(FileChooser.FilePayload[] files, SetFilesOptions options);",
|
||||||
});
|
});
|
||||||
customSignature.put("ElementHandle.setInputFiles", new String[]{
|
customSignature.put("ElementHandle.setInputFiles", new String[]{
|
||||||
"default void setInputFiles(File file) { setInputFiles(file, null); }",
|
"default void setInputFiles(Path file) { setInputFiles(file, null); }",
|
||||||
"default void setInputFiles(File file, SetInputFilesOptions options) { setInputFiles(new File[]{ file }, options); }",
|
"default void setInputFiles(Path file, SetInputFilesOptions options) { setInputFiles(new Path[]{ file }, options); }",
|
||||||
"default void setInputFiles(File[] files) { setInputFiles(files, null); }",
|
"default void setInputFiles(Path[] files) { setInputFiles(files, null); }",
|
||||||
"void setInputFiles(File[] files, SetInputFilesOptions options);",
|
"void setInputFiles(Path[] files, SetInputFilesOptions options);",
|
||||||
"default void setInputFiles(FileChooser.FilePayload file) { setInputFiles(file, null); }",
|
"default void setInputFiles(FileChooser.FilePayload file) { setInputFiles(file, null); }",
|
||||||
"default void setInputFiles(FileChooser.FilePayload file, SetInputFilesOptions options) { setInputFiles(new FileChooser.FilePayload[]{ file }, options); }",
|
"default void setInputFiles(FileChooser.FilePayload file, SetInputFilesOptions options) { setInputFiles(new FileChooser.FilePayload[]{ file }, options); }",
|
||||||
"default void setInputFiles(FileChooser.FilePayload[] files) { setInputFiles(files, null); }",
|
"default void setInputFiles(FileChooser.FilePayload[] files) { setInputFiles(files, null); }",
|
||||||
"void setInputFiles(FileChooser.FilePayload[] files, SetInputFilesOptions options);",
|
"void setInputFiles(FileChooser.FilePayload[] files, SetInputFilesOptions options);",
|
||||||
});
|
});
|
||||||
String[] setInputFilesWithSelector = {
|
String[] setInputFilesWithSelector = {
|
||||||
"default void setInputFiles(String selector, File file) { setInputFiles(selector, file, null); }",
|
"default void setInputFiles(String selector, Path file) { setInputFiles(selector, file, null); }",
|
||||||
"default void setInputFiles(String selector, File file, SetInputFilesOptions options) { setInputFiles(selector, new File[]{ file }, options); }",
|
"default void setInputFiles(String selector, Path file, SetInputFilesOptions options) { setInputFiles(selector, new Path[]{ file }, options); }",
|
||||||
"default void setInputFiles(String selector, File[] files) { setInputFiles(selector, files, null); }",
|
"default void setInputFiles(String selector, Path[] files) { setInputFiles(selector, files, null); }",
|
||||||
"void setInputFiles(String selector, File[] files, SetInputFilesOptions options);",
|
"void setInputFiles(String selector, Path[] files, SetInputFilesOptions options);",
|
||||||
"default void setInputFiles(String selector, FileChooser.FilePayload file) { setInputFiles(selector, file, null); }",
|
"default void setInputFiles(String selector, FileChooser.FilePayload file) { setInputFiles(selector, file, null); }",
|
||||||
"default void setInputFiles(String selector, FileChooser.FilePayload file, SetInputFilesOptions options) { setInputFiles(selector, new FileChooser.FilePayload[]{ file }, options); }",
|
"default void setInputFiles(String selector, FileChooser.FilePayload file, SetInputFilesOptions options) { setInputFiles(selector, new FileChooser.FilePayload[]{ file }, options); }",
|
||||||
"default void setInputFiles(String selector, FileChooser.FilePayload[] files) { setInputFiles(selector, files, null); }",
|
"default void setInputFiles(String selector, FileChooser.FilePayload[] files) { setInputFiles(selector, files, null); }",
|
||||||
@ -643,13 +643,10 @@ class Interface extends TypeDefinition {
|
|||||||
if (jsonName.equals("Route")) {
|
if (jsonName.equals("Route")) {
|
||||||
output.add("import java.nio.charset.StandardCharsets;");
|
output.add("import java.nio.charset.StandardCharsets;");
|
||||||
}
|
}
|
||||||
if (asList("Page", "Frame", "ElementHandle", "FileChooser", "ChromiumBrowser").contains(jsonName)) {
|
|
||||||
output.add("import java.io.File;");
|
|
||||||
}
|
|
||||||
if ("Download".equals(jsonName)) {
|
if ("Download".equals(jsonName)) {
|
||||||
output.add("import java.io.InputStream;");
|
output.add("import java.io.InputStream;");
|
||||||
}
|
}
|
||||||
if (asList("Download", "Route").contains(jsonName)) {
|
if (asList("Page", "Frame", "ElementHandle", "FileChooser", "ChromiumBrowser", "Download", "Route").contains(jsonName)) {
|
||||||
output.add("import java.nio.file.Path;");
|
output.add("import java.nio.file.Path;");
|
||||||
}
|
}
|
||||||
output.add("import java.util.*;");
|
output.add("import java.util.*;");
|
||||||
|
@ -95,16 +95,16 @@ class Types {
|
|||||||
add("BrowserType.launchPersistentContext.options.colorScheme", "\"dark\"|\"light\"|\"no-preference\"", "ColorScheme");
|
add("BrowserType.launchPersistentContext.options.colorScheme", "\"dark\"|\"light\"|\"no-preference\"", "ColorScheme");
|
||||||
|
|
||||||
// File
|
// File
|
||||||
add("Page.addScriptTag.options.path", "string", "File");
|
add("Page.addScriptTag.options.path", "string", "Path");
|
||||||
add("Page.addStyleTag.options.path", "string", "File");
|
add("Page.addStyleTag.options.path", "string", "Path");
|
||||||
add("Page.pdf.options.path", "string", "File");
|
add("Page.pdf.options.path", "string", "Path");
|
||||||
add("Page.screenshot.options.path", "string", "File");
|
add("Page.screenshot.options.path", "string", "Path");
|
||||||
add("Frame.addScriptTag.options.path", "string", "File");
|
add("Frame.addScriptTag.options.path", "string", "Path");
|
||||||
add("Frame.addStyleTag.options.path", "string", "File");
|
add("Frame.addStyleTag.options.path", "string", "Path");
|
||||||
add("ElementHandle.screenshot.options.path", "string", "File");
|
add("ElementHandle.screenshot.options.path", "string", "Path");
|
||||||
add("Route.fulfill.response.path", "string", "Path");
|
add("Route.fulfill.response.path", "string", "Path");
|
||||||
add("Route.fulfill.response.status", "number", "int");
|
add("Route.fulfill.response.status", "number", "int");
|
||||||
add("ChromiumBrowser.startTracing.options.path", "string", "File");
|
add("ChromiumBrowser.startTracing.options.path", "string", "Path");
|
||||||
|
|
||||||
// Route
|
// Route
|
||||||
add("BrowserContext.route.handler", "function(Route, Request)", "BiConsumer<Route, Request>");
|
add("BrowserContext.route.handler", "function(Route, Request)", "BiConsumer<Route, Request>");
|
||||||
|
@ -16,16 +16,16 @@
|
|||||||
|
|
||||||
package com.microsoft.playwright;
|
package com.microsoft.playwright;
|
||||||
|
|
||||||
import java.io.File;
|
import java.nio.file.Path;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
public interface ChromiumBrowser extends Browser {
|
public interface ChromiumBrowser extends Browser {
|
||||||
class StartTracingOptions {
|
class StartTracingOptions {
|
||||||
public File path;
|
public Path path;
|
||||||
public Boolean screenshots;
|
public Boolean screenshots;
|
||||||
public List<String> categories;
|
public List<String> categories;
|
||||||
|
|
||||||
public StartTracingOptions withPath(File path) {
|
public StartTracingOptions withPath(Path path) {
|
||||||
this.path = path;
|
this.path = path;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
package com.microsoft.playwright;
|
package com.microsoft.playwright;
|
||||||
|
|
||||||
import java.io.File;
|
import java.nio.file.Path;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
public interface ElementHandle extends JSHandle {
|
public interface ElementHandle extends JSHandle {
|
||||||
@ -211,13 +211,13 @@ public interface ElementHandle extends JSHandle {
|
|||||||
}
|
}
|
||||||
class ScreenshotOptions {
|
class ScreenshotOptions {
|
||||||
public enum Type { JPEG, PNG }
|
public enum Type { JPEG, PNG }
|
||||||
public File path;
|
public Path path;
|
||||||
public Type type;
|
public Type type;
|
||||||
public Integer quality;
|
public Integer quality;
|
||||||
public Boolean omitBackground;
|
public Boolean omitBackground;
|
||||||
public Integer timeout;
|
public Integer timeout;
|
||||||
|
|
||||||
public ScreenshotOptions withPath(File path) {
|
public ScreenshotOptions withPath(Path path) {
|
||||||
this.path = path;
|
this.path = path;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
@ -434,10 +434,10 @@ public interface ElementHandle extends JSHandle {
|
|||||||
selectText(null);
|
selectText(null);
|
||||||
}
|
}
|
||||||
void selectText(SelectTextOptions options);
|
void selectText(SelectTextOptions options);
|
||||||
default void setInputFiles(File file) { setInputFiles(file, null); }
|
default void setInputFiles(Path file) { setInputFiles(file, null); }
|
||||||
default void setInputFiles(File file, SetInputFilesOptions options) { setInputFiles(new File[]{ file }, options); }
|
default void setInputFiles(Path file, SetInputFilesOptions options) { setInputFiles(new Path[]{ file }, options); }
|
||||||
default void setInputFiles(File[] files) { setInputFiles(files, null); }
|
default void setInputFiles(Path[] files) { setInputFiles(files, null); }
|
||||||
void setInputFiles(File[] files, SetInputFilesOptions options);
|
void setInputFiles(Path[] files, SetInputFilesOptions options);
|
||||||
default void setInputFiles(FileChooser.FilePayload file) { setInputFiles(file, null); }
|
default void setInputFiles(FileChooser.FilePayload file) { setInputFiles(file, null); }
|
||||||
default void setInputFiles(FileChooser.FilePayload file, SetInputFilesOptions options) { setInputFiles(new FileChooser.FilePayload[]{ file }, options); }
|
default void setInputFiles(FileChooser.FilePayload file, SetInputFilesOptions options) { setInputFiles(new FileChooser.FilePayload[]{ file }, options); }
|
||||||
default void setInputFiles(FileChooser.FilePayload[] files) { setInputFiles(files, null); }
|
default void setInputFiles(FileChooser.FilePayload[] files) { setInputFiles(files, null); }
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
package com.microsoft.playwright;
|
package com.microsoft.playwright;
|
||||||
|
|
||||||
import java.io.File;
|
import java.nio.file.Path;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
public interface FileChooser {
|
public interface FileChooser {
|
||||||
@ -48,10 +48,10 @@ public interface FileChooser {
|
|||||||
ElementHandle element();
|
ElementHandle element();
|
||||||
boolean isMultiple();
|
boolean isMultiple();
|
||||||
Page page();
|
Page page();
|
||||||
default void setFiles(File file) { setFiles(file, null); }
|
default void setFiles(Path file) { setFiles(file, null); }
|
||||||
default void setFiles(File file, SetFilesOptions options) { setFiles(new File[]{ file }, options); }
|
default void setFiles(Path file, SetFilesOptions options) { setFiles(new Path[]{ file }, options); }
|
||||||
default void setFiles(File[] files) { setFiles(files, null); }
|
default void setFiles(Path[] files) { setFiles(files, null); }
|
||||||
void setFiles(File[] files, SetFilesOptions options);
|
void setFiles(Path[] files, SetFilesOptions options);
|
||||||
default void setFiles(FileChooser.FilePayload file) { setFiles(file, null); }
|
default void setFiles(FileChooser.FilePayload file) { setFiles(file, null); }
|
||||||
default void setFiles(FileChooser.FilePayload file, SetFilesOptions options) { setFiles(new FileChooser.FilePayload[]{ file }, options); }
|
default void setFiles(FileChooser.FilePayload file, SetFilesOptions options) { setFiles(new FileChooser.FilePayload[]{ file }, options); }
|
||||||
default void setFiles(FileChooser.FilePayload[] files) { setFiles(files, null); }
|
default void setFiles(FileChooser.FilePayload[] files) { setFiles(files, null); }
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
package com.microsoft.playwright;
|
package com.microsoft.playwright;
|
||||||
|
|
||||||
import java.io.File;
|
import java.nio.file.Path;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
@ -25,7 +25,7 @@ public interface Frame {
|
|||||||
enum LoadState { DOMCONTENTLOADED, LOAD, NETWORKIDLE }
|
enum LoadState { DOMCONTENTLOADED, LOAD, NETWORKIDLE }
|
||||||
class AddScriptTagOptions {
|
class AddScriptTagOptions {
|
||||||
public String url;
|
public String url;
|
||||||
public File path;
|
public Path path;
|
||||||
public String content;
|
public String content;
|
||||||
public String type;
|
public String type;
|
||||||
|
|
||||||
@ -33,7 +33,7 @@ public interface Frame {
|
|||||||
this.url = url;
|
this.url = url;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
public AddScriptTagOptions withPath(File path) {
|
public AddScriptTagOptions withPath(Path path) {
|
||||||
this.path = path;
|
this.path = path;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
@ -48,14 +48,14 @@ public interface Frame {
|
|||||||
}
|
}
|
||||||
class AddStyleTagOptions {
|
class AddStyleTagOptions {
|
||||||
public String url;
|
public String url;
|
||||||
public File path;
|
public Path path;
|
||||||
public String content;
|
public String content;
|
||||||
|
|
||||||
public AddStyleTagOptions withUrl(String url) {
|
public AddStyleTagOptions withUrl(String url) {
|
||||||
this.url = url;
|
this.url = url;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
public AddStyleTagOptions withPath(File path) {
|
public AddStyleTagOptions withPath(Path path) {
|
||||||
this.path = path;
|
this.path = path;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
@ -555,10 +555,10 @@ public interface Frame {
|
|||||||
setContent(html, null);
|
setContent(html, null);
|
||||||
}
|
}
|
||||||
void setContent(String html, SetContentOptions options);
|
void setContent(String html, SetContentOptions options);
|
||||||
default void setInputFiles(String selector, File file) { setInputFiles(selector, file, null); }
|
default void setInputFiles(String selector, Path file) { setInputFiles(selector, file, null); }
|
||||||
default void setInputFiles(String selector, File file, SetInputFilesOptions options) { setInputFiles(selector, new File[]{ file }, options); }
|
default void setInputFiles(String selector, Path file, SetInputFilesOptions options) { setInputFiles(selector, new Path[]{ file }, options); }
|
||||||
default void setInputFiles(String selector, File[] files) { setInputFiles(selector, files, null); }
|
default void setInputFiles(String selector, Path[] files) { setInputFiles(selector, files, null); }
|
||||||
void setInputFiles(String selector, File[] files, SetInputFilesOptions options);
|
void setInputFiles(String selector, Path[] files, SetInputFilesOptions options);
|
||||||
default void setInputFiles(String selector, FileChooser.FilePayload file) { setInputFiles(selector, file, null); }
|
default void setInputFiles(String selector, FileChooser.FilePayload file) { setInputFiles(selector, file, null); }
|
||||||
default void setInputFiles(String selector, FileChooser.FilePayload file, SetInputFilesOptions options) { setInputFiles(selector, new FileChooser.FilePayload[]{ file }, options); }
|
default void setInputFiles(String selector, FileChooser.FilePayload file, SetInputFilesOptions options) { setInputFiles(selector, new FileChooser.FilePayload[]{ file }, options); }
|
||||||
default void setInputFiles(String selector, FileChooser.FilePayload[] files) { setInputFiles(selector, files, null); }
|
default void setInputFiles(String selector, FileChooser.FilePayload[] files) { setInputFiles(selector, files, null); }
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
package com.microsoft.playwright;
|
package com.microsoft.playwright;
|
||||||
|
|
||||||
import java.io.File;
|
import java.nio.file.Path;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.function.BiConsumer;
|
import java.util.function.BiConsumer;
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
@ -108,7 +108,7 @@ public interface Page {
|
|||||||
}
|
}
|
||||||
class AddScriptTagOptions {
|
class AddScriptTagOptions {
|
||||||
public String url;
|
public String url;
|
||||||
public File path;
|
public Path path;
|
||||||
public String content;
|
public String content;
|
||||||
public String type;
|
public String type;
|
||||||
|
|
||||||
@ -116,7 +116,7 @@ public interface Page {
|
|||||||
this.url = url;
|
this.url = url;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
public AddScriptTagOptions withPath(File path) {
|
public AddScriptTagOptions withPath(Path path) {
|
||||||
this.path = path;
|
this.path = path;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
@ -131,14 +131,14 @@ public interface Page {
|
|||||||
}
|
}
|
||||||
class AddStyleTagOptions {
|
class AddStyleTagOptions {
|
||||||
public String url;
|
public String url;
|
||||||
public File path;
|
public Path path;
|
||||||
public String content;
|
public String content;
|
||||||
|
|
||||||
public AddStyleTagOptions withUrl(String url) {
|
public AddStyleTagOptions withUrl(String url) {
|
||||||
this.url = url;
|
this.url = url;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
public AddStyleTagOptions withPath(File path) {
|
public AddStyleTagOptions withPath(Path path) {
|
||||||
this.path = path;
|
this.path = path;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
@ -428,7 +428,7 @@ public interface Page {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public File path;
|
public Path path;
|
||||||
public Integer scale;
|
public Integer scale;
|
||||||
public Boolean displayHeaderFooter;
|
public Boolean displayHeaderFooter;
|
||||||
public String headerTemplate;
|
public String headerTemplate;
|
||||||
@ -442,7 +442,7 @@ public interface Page {
|
|||||||
public Margin margin;
|
public Margin margin;
|
||||||
public Boolean preferCSSPageSize;
|
public Boolean preferCSSPageSize;
|
||||||
|
|
||||||
public PdfOptions withPath(File path) {
|
public PdfOptions withPath(Path path) {
|
||||||
this.path = path;
|
this.path = path;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
@ -557,7 +557,7 @@ public interface Page {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public File path;
|
public Path path;
|
||||||
public Type type;
|
public Type type;
|
||||||
public Integer quality;
|
public Integer quality;
|
||||||
public Boolean fullPage;
|
public Boolean fullPage;
|
||||||
@ -565,7 +565,7 @@ public interface Page {
|
|||||||
public Boolean omitBackground;
|
public Boolean omitBackground;
|
||||||
public Integer timeout;
|
public Integer timeout;
|
||||||
|
|
||||||
public ScreenshotOptions withPath(File path) {
|
public ScreenshotOptions withPath(Path path) {
|
||||||
this.path = path;
|
this.path = path;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
@ -929,10 +929,10 @@ public interface Page {
|
|||||||
void setDefaultNavigationTimeout(int timeout);
|
void setDefaultNavigationTimeout(int timeout);
|
||||||
void setDefaultTimeout(int timeout);
|
void setDefaultTimeout(int timeout);
|
||||||
void setExtraHTTPHeaders(Map<String, String> headers);
|
void setExtraHTTPHeaders(Map<String, String> headers);
|
||||||
default void setInputFiles(String selector, File file) { setInputFiles(selector, file, null); }
|
default void setInputFiles(String selector, Path file) { setInputFiles(selector, file, null); }
|
||||||
default void setInputFiles(String selector, File file, SetInputFilesOptions options) { setInputFiles(selector, new File[]{ file }, options); }
|
default void setInputFiles(String selector, Path file, SetInputFilesOptions options) { setInputFiles(selector, new Path[]{ file }, options); }
|
||||||
default void setInputFiles(String selector, File[] files) { setInputFiles(selector, files, null); }
|
default void setInputFiles(String selector, Path[] files) { setInputFiles(selector, files, null); }
|
||||||
void setInputFiles(String selector, File[] files, SetInputFilesOptions options);
|
void setInputFiles(String selector, Path[] files, SetInputFilesOptions options);
|
||||||
default void setInputFiles(String selector, FileChooser.FilePayload file) { setInputFiles(selector, file, null); }
|
default void setInputFiles(String selector, FileChooser.FilePayload file) { setInputFiles(selector, file, null); }
|
||||||
default void setInputFiles(String selector, FileChooser.FilePayload file, SetInputFilesOptions options) { setInputFiles(selector, new FileChooser.FilePayload[]{ file }, options); }
|
default void setInputFiles(String selector, FileChooser.FilePayload file, SetInputFilesOptions options) { setInputFiles(selector, new FileChooser.FilePayload[]{ file }, options); }
|
||||||
default void setInputFiles(String selector, FileChooser.FilePayload[] files) { setInputFiles(selector, files, null); }
|
default void setInputFiles(String selector, FileChooser.FilePayload[] files) { setInputFiles(selector, files, null); }
|
||||||
|
@ -18,6 +18,7 @@ package com.microsoft.playwright.example;
|
|||||||
import com.microsoft.playwright.*;
|
import com.microsoft.playwright.*;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
|
||||||
public class Main {
|
public class Main {
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
@ -28,7 +29,7 @@ public class Main {
|
|||||||
Page page = context.newPage();
|
Page page = context.newPage();
|
||||||
page.navigate("https://webkit.org");
|
page.navigate("https://webkit.org");
|
||||||
page.click("text=check feature status");
|
page.click("text=check feature status");
|
||||||
page.screenshot(new Page.ScreenshotOptions().withPath(new File("s.png")));
|
page.screenshot(new Page.ScreenshotOptions().withPath(Paths.get("s.png")));
|
||||||
browser.close();
|
browser.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
package com.microsoft.playwright.impl;
|
package com.microsoft.playwright.impl;
|
||||||
|
|
||||||
import com.google.gson.Gson;
|
|
||||||
import com.google.gson.JsonElement;
|
import com.google.gson.JsonElement;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import com.microsoft.playwright.BrowserContext;
|
import com.microsoft.playwright.BrowserContext;
|
||||||
@ -71,17 +70,17 @@ class BindingCall extends ChannelOwner {
|
|||||||
args.add(handle);
|
args.add(handle);
|
||||||
} else {
|
} else {
|
||||||
for (JsonElement arg : initializer.getAsJsonArray("args")) {
|
for (JsonElement arg : initializer.getAsJsonArray("args")) {
|
||||||
args.add(deserialize(new Gson().fromJson(arg, SerializedValue.class)));
|
args.add(deserialize(gson().fromJson(arg, SerializedValue.class)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Object result = binding.call(source, args.toArray());
|
Object result = binding.call(source, args.toArray());
|
||||||
|
|
||||||
JsonObject params = new JsonObject();
|
JsonObject params = new JsonObject();
|
||||||
params.add("result", new Gson().toJsonTree(serializeArgument(result)));
|
params.add("result", gson().toJsonTree(serializeArgument(result)));
|
||||||
sendMessage("resolve", params);
|
sendMessage("resolve", params);
|
||||||
} catch (RuntimeException exception) {
|
} catch (RuntimeException exception) {
|
||||||
JsonObject params = new JsonObject();
|
JsonObject params = new JsonObject();
|
||||||
params.add("error", new Gson().toJsonTree(serializeError(exception)));
|
params.add("error", gson().toJsonTree(serializeError(exception)));
|
||||||
sendMessage("reject", params);
|
sendMessage("reject", params);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,6 +27,7 @@ import java.util.function.BiConsumer;
|
|||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import static com.microsoft.playwright.impl.Serialization.gson;
|
||||||
import static com.microsoft.playwright.impl.Utils.isFunctionBody;
|
import static com.microsoft.playwright.impl.Utils.isFunctionBody;
|
||||||
import static com.microsoft.playwright.impl.Utils.isSafeCloseError;
|
import static com.microsoft.playwright.impl.Utils.isSafeCloseError;
|
||||||
|
|
||||||
@ -77,7 +78,7 @@ class BrowserContextImpl extends ChannelOwner implements BrowserContext {
|
|||||||
@Override
|
@Override
|
||||||
public void addCookies(List<AddCookie> cookies) {
|
public void addCookies(List<AddCookie> cookies) {
|
||||||
JsonObject params = new JsonObject();
|
JsonObject params = new JsonObject();
|
||||||
params.add("cookies", new Gson().toJsonTree(cookies));
|
params.add("cookies", gson().toJsonTree(cookies));
|
||||||
sendMessage("addCookies", params);
|
sendMessage("addCookies", params);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -107,43 +108,15 @@ class BrowserContextImpl extends ChannelOwner implements BrowserContext {
|
|||||||
sendMessage("clearPermissions");
|
sendMessage("clearPermissions");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class SameSiteAdapter extends TypeAdapter<SameSite> {
|
|
||||||
@Override
|
|
||||||
public void write(JsonWriter out, SameSite value) throws IOException {
|
|
||||||
String stringValue;
|
|
||||||
switch (value) {
|
|
||||||
case STRICT:
|
|
||||||
stringValue = "Strict";
|
|
||||||
break;
|
|
||||||
case LAX:
|
|
||||||
stringValue = "Lax";
|
|
||||||
break;
|
|
||||||
case NONE:
|
|
||||||
stringValue = "None";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
throw new PlaywrightException("Unexpected value: " + value);
|
|
||||||
}
|
|
||||||
out.value(stringValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public SameSite read(JsonReader in) throws IOException {
|
|
||||||
String value = in.nextString();
|
|
||||||
return SameSite.valueOf(value.toUpperCase());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Cookie> cookies(List<String> urls) {
|
public List<Cookie> cookies(List<String> urls) {
|
||||||
JsonObject params = new JsonObject();
|
JsonObject params = new JsonObject();
|
||||||
if (urls == null) {
|
if (urls == null) {
|
||||||
urls = Collections.emptyList();
|
urls = Collections.emptyList();
|
||||||
}
|
}
|
||||||
params.add("urls", new Gson().toJsonTree(urls));
|
params.add("urls", gson().toJsonTree(urls));
|
||||||
JsonObject json = sendMessage("cookies", params).getAsJsonObject();
|
JsonObject json = sendMessage("cookies", params).getAsJsonObject();
|
||||||
Gson gson = new GsonBuilder().registerTypeAdapter(SameSite.class, new SameSiteAdapter().nullSafe()).create();
|
Cookie[] cookies = gson().fromJson(json.getAsJsonArray("cookies"), Cookie[].class);
|
||||||
Cookie[] cookies = gson.fromJson(json.getAsJsonArray("cookies"), Cookie[].class);
|
|
||||||
return Arrays.asList(cookies);
|
return Arrays.asList(cookies);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -180,8 +153,8 @@ class BrowserContextImpl extends ChannelOwner implements BrowserContext {
|
|||||||
if (permissions == null) {
|
if (permissions == null) {
|
||||||
permissions = Collections.emptyList();
|
permissions = Collections.emptyList();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
params.add("permissions", new Gson().toJsonTree(permissions));
|
params.add("permissions", gson().toJsonTree(permissions));
|
||||||
sendMessage("grantPermissions", params);
|
sendMessage("grantPermissions", params);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -257,7 +230,7 @@ class BrowserContextImpl extends ChannelOwner implements BrowserContext {
|
|||||||
public void setGeolocation(Geolocation geolocation) {
|
public void setGeolocation(Geolocation geolocation) {
|
||||||
JsonObject params = new JsonObject();
|
JsonObject params = new JsonObject();
|
||||||
if (geolocation != null) {
|
if (geolocation != null) {
|
||||||
params.add("geolocation", new Gson().toJsonTree(geolocation));
|
params.add("geolocation", gson().toJsonTree(geolocation));
|
||||||
}
|
}
|
||||||
sendMessage("setGeolocation", params);
|
sendMessage("setGeolocation", params);
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
package com.microsoft.playwright.impl;
|
package com.microsoft.playwright.impl;
|
||||||
|
|
||||||
import com.google.gson.Gson;
|
|
||||||
import com.google.gson.JsonElement;
|
import com.google.gson.JsonElement;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import com.microsoft.playwright.*;
|
import com.microsoft.playwright.*;
|
||||||
@ -26,6 +25,7 @@ import java.util.HashSet;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
import static com.microsoft.playwright.impl.Serialization.gson;
|
||||||
import static com.microsoft.playwright.impl.Utils.convertViaJson;
|
import static com.microsoft.playwright.impl.Utils.convertViaJson;
|
||||||
import static com.microsoft.playwright.impl.Utils.isSafeCloseError;
|
import static com.microsoft.playwright.impl.Utils.isSafeCloseError;
|
||||||
|
|
||||||
@ -74,7 +74,7 @@ class BrowserImpl extends ChannelOwner implements Browser {
|
|||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new NewContextOptions();
|
options = new NewContextOptions();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
if (options.extraHTTPHeaders != null) {
|
if (options.extraHTTPHeaders != null) {
|
||||||
params.remove("extraHTTPHeaders");
|
params.remove("extraHTTPHeaders");
|
||||||
params.add("extraHTTPHeaders", Serialization.toProtocol(options.extraHTTPHeaders));
|
params.add("extraHTTPHeaders", Serialization.toProtocol(options.extraHTTPHeaders));
|
||||||
|
@ -16,15 +16,12 @@
|
|||||||
|
|
||||||
package com.microsoft.playwright.impl;
|
package com.microsoft.playwright.impl;
|
||||||
|
|
||||||
import com.google.gson.*;
|
import com.google.gson.JsonElement;
|
||||||
import com.google.gson.stream.JsonReader;
|
import com.google.gson.JsonObject;
|
||||||
import com.google.gson.stream.JsonWriter;
|
|
||||||
import com.microsoft.playwright.BrowserContext;
|
import com.microsoft.playwright.BrowserContext;
|
||||||
import com.microsoft.playwright.BrowserType;
|
import com.microsoft.playwright.BrowserType;
|
||||||
import com.microsoft.playwright.PlaywrightException;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import static com.microsoft.playwright.impl.Serialization.gson;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
class BrowserTypeImpl extends ChannelOwner implements BrowserType {
|
class BrowserTypeImpl extends ChannelOwner implements BrowserType {
|
||||||
BrowserTypeImpl(ChannelOwner parent, String type, String guid, JsonObject initializer) {
|
BrowserTypeImpl(ChannelOwner parent, String type, String guid, JsonObject initializer) {
|
||||||
@ -36,7 +33,7 @@ class BrowserTypeImpl extends ChannelOwner implements BrowserType {
|
|||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new LaunchOptions();
|
options = new LaunchOptions();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
JsonElement result = sendMessage("launch", params);
|
JsonElement result = sendMessage("launch", params);
|
||||||
return connection.getExistingObject(result.getAsJsonObject().getAsJsonObject("browser").get("guid").getAsString());
|
return connection.getExistingObject(result.getAsJsonObject().getAsJsonObject("browser").get("guid").getAsString());
|
||||||
}
|
}
|
||||||
@ -46,45 +43,12 @@ class BrowserTypeImpl extends ChannelOwner implements BrowserType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static class ColorSchemeAdapter extends TypeAdapter<LaunchPersistentContextOptions.ColorScheme> {
|
|
||||||
@Override
|
|
||||||
public void write(JsonWriter out, LaunchPersistentContextOptions.ColorScheme value) throws IOException {
|
|
||||||
String stringValue;
|
|
||||||
switch (value) {
|
|
||||||
case DARK:
|
|
||||||
stringValue = "dark";
|
|
||||||
break;
|
|
||||||
case LIGHT:
|
|
||||||
stringValue = "light";
|
|
||||||
break;
|
|
||||||
case NO_PREFERENCE:
|
|
||||||
stringValue = "no-preference";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
throw new PlaywrightException("Unexpected value: " + value);
|
|
||||||
}
|
|
||||||
out.value(stringValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public LaunchPersistentContextOptions.ColorScheme read(JsonReader in) throws IOException {
|
|
||||||
String value = in.nextString();
|
|
||||||
switch (value) {
|
|
||||||
case "dark": return LaunchPersistentContextOptions.ColorScheme.DARK;
|
|
||||||
case "light": return LaunchPersistentContextOptions.ColorScheme.LIGHT;
|
|
||||||
case "no-preference": return LaunchPersistentContextOptions.ColorScheme.NO_PREFERENCE;
|
|
||||||
default: throw new PlaywrightException("Unexpected value: " + value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BrowserContext launchPersistentContext(String userDataDir, LaunchPersistentContextOptions options) {
|
public BrowserContext launchPersistentContext(String userDataDir, LaunchPersistentContextOptions options) {
|
||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new LaunchPersistentContextOptions();
|
options = new LaunchPersistentContextOptions();
|
||||||
}
|
}
|
||||||
Gson gson = new GsonBuilder().registerTypeAdapter(LaunchPersistentContextOptions.ColorScheme.class, new ColorSchemeAdapter().nullSafe()).create();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
JsonObject params = gson.toJsonTree(options).getAsJsonObject();
|
|
||||||
if (options.extraHTTPHeaders != null) {
|
if (options.extraHTTPHeaders != null) {
|
||||||
params.remove("extraHTTPHeaders");
|
params.remove("extraHTTPHeaders");
|
||||||
params.add("extraHTTPHeaders", Serialization.toProtocol(options.extraHTTPHeaders));
|
params.add("extraHTTPHeaders", Serialization.toProtocol(options.extraHTTPHeaders));
|
||||||
|
@ -26,6 +26,8 @@ import java.time.Duration;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import static com.microsoft.playwright.impl.Serialization.gson;
|
||||||
|
|
||||||
class Message {
|
class Message {
|
||||||
int id;
|
int id;
|
||||||
String guid;
|
String guid;
|
||||||
@ -87,7 +89,7 @@ public class Connection {
|
|||||||
message.addProperty("guid", guid);
|
message.addProperty("guid", guid);
|
||||||
message.addProperty("method", method);
|
message.addProperty("method", method);
|
||||||
message.add("params", params);
|
message.add("params", params);
|
||||||
transport.send(new Gson().toJson(message));
|
transport.send(gson().toJson(message));
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -119,7 +121,7 @@ public class Connection {
|
|||||||
if (messageString == null) {
|
if (messageString == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Gson gson = new Gson();
|
Gson gson = gson();
|
||||||
Message message = gson.fromJson(messageString, Message.class);
|
Message message = gson.fromJson(messageString, Message.class);
|
||||||
dispatch(message);
|
dispatch(message);
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
package com.microsoft.playwright.impl;
|
package com.microsoft.playwright.impl;
|
||||||
|
|
||||||
import com.google.gson.Gson;
|
|
||||||
import com.google.gson.JsonElement;
|
import com.google.gson.JsonElement;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import com.microsoft.playwright.ConsoleMessage;
|
import com.microsoft.playwright.ConsoleMessage;
|
||||||
@ -25,6 +24,8 @@ import com.microsoft.playwright.JSHandle;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import static com.microsoft.playwright.impl.Serialization.gson;
|
||||||
|
|
||||||
public class ConsoleMessageImpl extends ChannelOwner implements ConsoleMessage {
|
public class ConsoleMessageImpl extends ChannelOwner implements ConsoleMessage {
|
||||||
public ConsoleMessageImpl(ChannelOwner parent, String type, String guid, JsonObject initializer) {
|
public ConsoleMessageImpl(ChannelOwner parent, String type, String guid, JsonObject initializer) {
|
||||||
super(parent, type, guid, initializer);
|
super(parent, type, guid, initializer);
|
||||||
@ -48,6 +49,6 @@ public class ConsoleMessageImpl extends ChannelOwner implements ConsoleMessage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Location location() {
|
public Location location() {
|
||||||
return new Gson().fromJson(initializer.get("location"), Location.class);
|
return gson().fromJson(initializer.get("location"), Location.class);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -26,6 +26,7 @@ import com.microsoft.playwright.FileChooser;
|
|||||||
import com.microsoft.playwright.Frame;
|
import com.microsoft.playwright.Frame;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.nio.file.Path;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Base64;
|
import java.util.Base64;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -77,9 +78,9 @@ class ElementHandleImpl extends JSHandleImpl implements ElementHandle {
|
|||||||
params.addProperty("selector", selector);
|
params.addProperty("selector", selector);
|
||||||
params.addProperty("expression", pageFunction);
|
params.addProperty("expression", pageFunction);
|
||||||
params.addProperty("isFunction", isFunctionBody(pageFunction));
|
params.addProperty("isFunction", isFunctionBody(pageFunction));
|
||||||
params.add("arg", new Gson().toJsonTree(serializeArgument(arg)));
|
params.add("arg", gson().toJsonTree(serializeArgument(arg)));
|
||||||
JsonElement json = sendMessage("evalOnSelector", params);
|
JsonElement json = sendMessage("evalOnSelector", params);
|
||||||
SerializedValue value = new Gson().fromJson(json.getAsJsonObject().get("value"), SerializedValue.class);
|
SerializedValue value = gson().fromJson(json.getAsJsonObject().get("value"), SerializedValue.class);
|
||||||
return deserialize(value);
|
return deserialize(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -89,9 +90,9 @@ class ElementHandleImpl extends JSHandleImpl implements ElementHandle {
|
|||||||
params.addProperty("selector", selector);
|
params.addProperty("selector", selector);
|
||||||
params.addProperty("expression", pageFunction);
|
params.addProperty("expression", pageFunction);
|
||||||
params.addProperty("isFunction", isFunctionBody(pageFunction));
|
params.addProperty("isFunction", isFunctionBody(pageFunction));
|
||||||
params.add("arg", new Gson().toJsonTree(serializeArgument(arg)));
|
params.add("arg", gson().toJsonTree(serializeArgument(arg)));
|
||||||
JsonElement json = sendMessage("evalOnSelectorAll", params);
|
JsonElement json = sendMessage("evalOnSelectorAll", params);
|
||||||
SerializedValue value = new Gson().fromJson(json.getAsJsonObject().get("value"), SerializedValue.class);
|
SerializedValue value = gson().fromJson(json.getAsJsonObject().get("value"), SerializedValue.class);
|
||||||
return deserialize(value);
|
return deserialize(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -101,7 +102,7 @@ class ElementHandleImpl extends JSHandleImpl implements ElementHandle {
|
|||||||
if (!json.has("value")) {
|
if (!json.has("value")) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return new Gson().fromJson(json.get("value"), BoundingBox.class);
|
return gson().fromJson(json.get("value"), BoundingBox.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -109,7 +110,7 @@ class ElementHandleImpl extends JSHandleImpl implements ElementHandle {
|
|||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new CheckOptions();
|
options = new CheckOptions();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
sendMessage("check", params);
|
sendMessage("check", params);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -118,7 +119,7 @@ class ElementHandleImpl extends JSHandleImpl implements ElementHandle {
|
|||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new ClickOptions();
|
options = new ClickOptions();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
params.remove("button");
|
params.remove("button");
|
||||||
if (options.button != null) {
|
if (options.button != null) {
|
||||||
params.addProperty("button", Serialization.toProtocol(options.button));
|
params.addProperty("button", Serialization.toProtocol(options.button));
|
||||||
@ -146,7 +147,7 @@ class ElementHandleImpl extends JSHandleImpl implements ElementHandle {
|
|||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new DblclickOptions();
|
options = new DblclickOptions();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
params.remove("button");
|
params.remove("button");
|
||||||
if (options.button != null) {
|
if (options.button != null) {
|
||||||
params.addProperty("button", Serialization.toProtocol(options.button));
|
params.addProperty("button", Serialization.toProtocol(options.button));
|
||||||
@ -164,7 +165,7 @@ class ElementHandleImpl extends JSHandleImpl implements ElementHandle {
|
|||||||
public void dispatchEvent(String type, Object eventInit) {
|
public void dispatchEvent(String type, Object eventInit) {
|
||||||
JsonObject params = new JsonObject();
|
JsonObject params = new JsonObject();
|
||||||
params.addProperty("type", type);
|
params.addProperty("type", type);
|
||||||
params.add("eventInit", new Gson().toJsonTree(serializeArgument(eventInit)));
|
params.add("eventInit", gson().toJsonTree(serializeArgument(eventInit)));
|
||||||
sendMessage("dispatchEvent", params);
|
sendMessage("dispatchEvent", params);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -173,7 +174,7 @@ class ElementHandleImpl extends JSHandleImpl implements ElementHandle {
|
|||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new FillOptions();
|
options = new FillOptions();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
params.addProperty("value", value);
|
params.addProperty("value", value);
|
||||||
sendMessage("fill", params);
|
sendMessage("fill", params);
|
||||||
}
|
}
|
||||||
@ -193,7 +194,7 @@ class ElementHandleImpl extends JSHandleImpl implements ElementHandle {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void hover(HoverOptions options) {
|
public void hover(HoverOptions options) {
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
params.remove("modifiers");
|
params.remove("modifiers");
|
||||||
if (options.modifiers != null) {
|
if (options.modifiers != null) {
|
||||||
params.add("modifiers", Serialization.toProtocol(options.modifiers));
|
params.add("modifiers", Serialization.toProtocol(options.modifiers));
|
||||||
@ -227,7 +228,7 @@ class ElementHandleImpl extends JSHandleImpl implements ElementHandle {
|
|||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new PressOptions();
|
options = new PressOptions();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
params.addProperty("key", key);
|
params.addProperty("key", key);
|
||||||
sendMessage("press", params);
|
sendMessage("press", params);
|
||||||
}
|
}
|
||||||
@ -244,16 +245,17 @@ class ElementHandleImpl extends JSHandleImpl implements ElementHandle {
|
|||||||
if (options.type == null) {
|
if (options.type == null) {
|
||||||
options.type = ScreenshotOptions.Type.PNG;
|
options.type = ScreenshotOptions.Type.PNG;
|
||||||
if (options.path != null) {
|
if (options.path != null) {
|
||||||
int extStart = options.path.getName().lastIndexOf('.');
|
String fileName = options.path.getFileName().toString();
|
||||||
|
int extStart = fileName.lastIndexOf('.');
|
||||||
if (extStart != -1) {
|
if (extStart != -1) {
|
||||||
String extension = options.path.getName().substring(extStart).toLowerCase();
|
String extension = fileName.substring(extStart).toLowerCase();
|
||||||
if (".jpeg".equals(extension) || ".jpg".equals(extension)) {
|
if (".jpeg".equals(extension) || ".jpg".equals(extension)) {
|
||||||
options.type = ScreenshotOptions.Type.JPEG;
|
options.type = ScreenshotOptions.Type.JPEG;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
params.remove("type");
|
params.remove("type");
|
||||||
params.addProperty("type", toProtocol(options.type));
|
params.addProperty("type", toProtocol(options.type));
|
||||||
params.remove("path");
|
params.remove("path");
|
||||||
@ -271,7 +273,7 @@ class ElementHandleImpl extends JSHandleImpl implements ElementHandle {
|
|||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new ScrollIntoViewIfNeededOptions();
|
options = new ScrollIntoViewIfNeededOptions();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
sendMessage("scrollIntoViewIfNeeded", params);
|
sendMessage("scrollIntoViewIfNeeded", params);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -280,9 +282,9 @@ class ElementHandleImpl extends JSHandleImpl implements ElementHandle {
|
|||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new SelectOptionOptions();
|
options = new SelectOptionOptions();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
if (values != null) {
|
if (values != null) {
|
||||||
params.add("options", new Gson().toJsonTree(values));
|
params.add("options", gson().toJsonTree(values));
|
||||||
}
|
}
|
||||||
return selectOption(params);
|
return selectOption(params);
|
||||||
}
|
}
|
||||||
@ -292,7 +294,7 @@ class ElementHandleImpl extends JSHandleImpl implements ElementHandle {
|
|||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new SelectOptionOptions();
|
options = new SelectOptionOptions();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
if (values != null) {
|
if (values != null) {
|
||||||
params.add("elements", Serialization.toProtocol(values));
|
params.add("elements", Serialization.toProtocol(values));
|
||||||
}
|
}
|
||||||
@ -309,12 +311,12 @@ class ElementHandleImpl extends JSHandleImpl implements ElementHandle {
|
|||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new SelectTextOptions();
|
options = new SelectTextOptions();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
sendMessage("selectText", params);
|
sendMessage("selectText", params);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setInputFiles(File[] files, SetInputFilesOptions options) {
|
public void setInputFiles(Path[] files, SetInputFilesOptions options) {
|
||||||
setInputFiles(Utils.toFilePayloads(files), options);
|
setInputFiles(Utils.toFilePayloads(files), options);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -323,7 +325,7 @@ class ElementHandleImpl extends JSHandleImpl implements ElementHandle {
|
|||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new SetInputFilesOptions();
|
options = new SetInputFilesOptions();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
params.add("files", Serialization.toJsonArray(files));
|
params.add("files", Serialization.toJsonArray(files));
|
||||||
sendMessage("setInputFiles", params);
|
sendMessage("setInputFiles", params);
|
||||||
}
|
}
|
||||||
@ -339,7 +341,7 @@ class ElementHandleImpl extends JSHandleImpl implements ElementHandle {
|
|||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new TypeOptions();
|
options = new TypeOptions();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
params.addProperty("text", text);
|
params.addProperty("text", text);
|
||||||
sendMessage("type", params);
|
sendMessage("type", params);
|
||||||
}
|
}
|
||||||
@ -349,7 +351,7 @@ class ElementHandleImpl extends JSHandleImpl implements ElementHandle {
|
|||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new UncheckOptions();
|
options = new UncheckOptions();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
sendMessage("uncheck", params);
|
sendMessage("uncheck", params);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -358,7 +360,7 @@ class ElementHandleImpl extends JSHandleImpl implements ElementHandle {
|
|||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new WaitForElementStateOptions();
|
options = new WaitForElementStateOptions();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
params.addProperty("state", toProtocol(state));
|
params.addProperty("state", toProtocol(state));
|
||||||
return toDeferred(sendMessageAsync("waitForElementState", params).apply(json -> null));
|
return toDeferred(sendMessageAsync("waitForElementState", params).apply(json -> null));
|
||||||
}
|
}
|
||||||
@ -375,7 +377,7 @@ class ElementHandleImpl extends JSHandleImpl implements ElementHandle {
|
|||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new WaitForSelectorOptions();
|
options = new WaitForSelectorOptions();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
params.remove("state");
|
params.remove("state");
|
||||||
params.addProperty("state", toProtocol(options.state));
|
params.addProperty("state", toProtocol(options.state));
|
||||||
params.addProperty("selector", selector);
|
params.addProperty("selector", selector);
|
||||||
|
@ -23,6 +23,7 @@ import com.microsoft.playwright.FileChooser;
|
|||||||
import com.microsoft.playwright.Page;
|
import com.microsoft.playwright.Page;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
|
||||||
import static com.microsoft.playwright.impl.Utils.convertViaJson;
|
import static com.microsoft.playwright.impl.Utils.convertViaJson;
|
||||||
|
|
||||||
@ -53,7 +54,7 @@ class FileChooserImpl implements FileChooser {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setFiles(File[] files, SetFilesOptions options) {
|
public void setFiles(Path[] files, SetFilesOptions options) {
|
||||||
setFiles(Utils.toFilePayloads(files), options);
|
setFiles(Utils.toFilePayloads(files), options);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,6 +26,7 @@ import java.io.File;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
import static com.microsoft.playwright.Frame.LoadState.*;
|
import static com.microsoft.playwright.Frame.LoadState.*;
|
||||||
@ -100,9 +101,9 @@ public class FrameImpl extends ChannelOwner implements Frame {
|
|||||||
params.addProperty("selector", selector);
|
params.addProperty("selector", selector);
|
||||||
params.addProperty("expression", pageFunction);
|
params.addProperty("expression", pageFunction);
|
||||||
params.addProperty("isFunction", isFunctionBody(pageFunction));
|
params.addProperty("isFunction", isFunctionBody(pageFunction));
|
||||||
params.add("arg", new Gson().toJsonTree(serializeArgument(arg)));
|
params.add("arg", gson().toJsonTree(serializeArgument(arg)));
|
||||||
JsonElement json = sendMessage("evalOnSelector", params);
|
JsonElement json = sendMessage("evalOnSelector", params);
|
||||||
SerializedValue value = new Gson().fromJson(json.getAsJsonObject().get("value"), SerializedValue.class);
|
SerializedValue value = gson().fromJson(json.getAsJsonObject().get("value"), SerializedValue.class);
|
||||||
return deserialize(value);
|
return deserialize(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -112,9 +113,9 @@ public class FrameImpl extends ChannelOwner implements Frame {
|
|||||||
params.addProperty("selector", selector);
|
params.addProperty("selector", selector);
|
||||||
params.addProperty("expression", pageFunction);
|
params.addProperty("expression", pageFunction);
|
||||||
params.addProperty("isFunction", isFunctionBody(pageFunction));
|
params.addProperty("isFunction", isFunctionBody(pageFunction));
|
||||||
params.add("arg", new Gson().toJsonTree(serializeArgument(arg)));
|
params.add("arg", gson().toJsonTree(serializeArgument(arg)));
|
||||||
JsonElement json = sendMessage("evalOnSelectorAll", params);
|
JsonElement json = sendMessage("evalOnSelectorAll", params);
|
||||||
SerializedValue value = new Gson().fromJson(json.getAsJsonObject().get("value"), SerializedValue.class);
|
SerializedValue value = gson().fromJson(json.getAsJsonObject().get("value"), SerializedValue.class);
|
||||||
return deserialize(value);
|
return deserialize(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -123,17 +124,17 @@ public class FrameImpl extends ChannelOwner implements Frame {
|
|||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new AddScriptTagOptions();
|
options = new AddScriptTagOptions();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
if (options.path != null) {
|
if (options.path != null) {
|
||||||
params.remove("path");
|
params.remove("path");
|
||||||
byte[] encoded;
|
byte[] encoded;
|
||||||
try {
|
try {
|
||||||
encoded = Files.readAllBytes(options.path.toPath());
|
encoded = Files.readAllBytes(options.path);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new PlaywrightException("Failed to read from file", e);
|
throw new PlaywrightException("Failed to read from file", e);
|
||||||
}
|
}
|
||||||
String content = new String(encoded, StandardCharsets.UTF_8);
|
String content = new String(encoded, StandardCharsets.UTF_8);
|
||||||
content += "//# sourceURL=" + options.path.getPath().replace("\n", "");
|
content += "//# sourceURL=" + options.path.toString().replace("\n", "");
|
||||||
params.addProperty("content", content);
|
params.addProperty("content", content);
|
||||||
}
|
}
|
||||||
JsonElement json = sendMessage("addScriptTag", params);
|
JsonElement json = sendMessage("addScriptTag", params);
|
||||||
@ -145,17 +146,17 @@ public class FrameImpl extends ChannelOwner implements Frame {
|
|||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new AddStyleTagOptions();
|
options = new AddStyleTagOptions();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
if (options.path != null) {
|
if (options.path != null) {
|
||||||
params.remove("path");
|
params.remove("path");
|
||||||
byte[] encoded;
|
byte[] encoded;
|
||||||
try {
|
try {
|
||||||
encoded = Files.readAllBytes(options.path.toPath());
|
encoded = Files.readAllBytes(options.path);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new PlaywrightException("Failed to read from file", e);
|
throw new PlaywrightException("Failed to read from file", e);
|
||||||
}
|
}
|
||||||
String content = new String(encoded, StandardCharsets.UTF_8);
|
String content = new String(encoded, StandardCharsets.UTF_8);
|
||||||
content += "/*# sourceURL=" + options.path.getPath().replace("\n", "") + "*/";
|
content += "/*# sourceURL=" + options.path.toString().replace("\n", "") + "*/";
|
||||||
params.addProperty("content", content);
|
params.addProperty("content", content);
|
||||||
}
|
}
|
||||||
JsonElement json = sendMessage("addStyleTag", params);
|
JsonElement json = sendMessage("addStyleTag", params);
|
||||||
@ -167,7 +168,7 @@ public class FrameImpl extends ChannelOwner implements Frame {
|
|||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new CheckOptions();
|
options = new CheckOptions();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
params.addProperty("selector", selector);
|
params.addProperty("selector", selector);
|
||||||
sendMessage("check", params);
|
sendMessage("check", params);
|
||||||
}
|
}
|
||||||
@ -182,7 +183,7 @@ public class FrameImpl extends ChannelOwner implements Frame {
|
|||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new ClickOptions();
|
options = new ClickOptions();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
params.addProperty("selector", selector);
|
params.addProperty("selector", selector);
|
||||||
|
|
||||||
params.remove("button");
|
params.remove("button");
|
||||||
@ -208,7 +209,7 @@ public class FrameImpl extends ChannelOwner implements Frame {
|
|||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new DblclickOptions();
|
options = new DblclickOptions();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
params.addProperty("selector", selector);
|
params.addProperty("selector", selector);
|
||||||
|
|
||||||
params.remove("button");
|
params.remove("button");
|
||||||
@ -229,10 +230,10 @@ public class FrameImpl extends ChannelOwner implements Frame {
|
|||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new DispatchEventOptions();
|
options = new DispatchEventOptions();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
params.addProperty("selector", selector);
|
params.addProperty("selector", selector);
|
||||||
params.addProperty("type", type);
|
params.addProperty("type", type);
|
||||||
params.add("eventInit", new Gson().toJsonTree(serializeArgument(eventInit)));
|
params.add("eventInit", gson().toJsonTree(serializeArgument(eventInit)));
|
||||||
sendMessage("dispatchEvent", params);
|
sendMessage("dispatchEvent", params);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -242,9 +243,9 @@ public class FrameImpl extends ChannelOwner implements Frame {
|
|||||||
params.addProperty("expression", expression);
|
params.addProperty("expression", expression);
|
||||||
params.addProperty("world", "main");
|
params.addProperty("world", "main");
|
||||||
params.addProperty("isFunction", isFunctionBody(expression));
|
params.addProperty("isFunction", isFunctionBody(expression));
|
||||||
params.add("arg", new Gson().toJsonTree(serializeArgument(arg)));
|
params.add("arg", gson().toJsonTree(serializeArgument(arg)));
|
||||||
JsonElement json = sendMessage("evaluateExpression", params);
|
JsonElement json = sendMessage("evaluateExpression", params);
|
||||||
SerializedValue value = new Gson().fromJson(json.getAsJsonObject().get("value"), SerializedValue.class);
|
SerializedValue value = gson().fromJson(json.getAsJsonObject().get("value"), SerializedValue.class);
|
||||||
return deserialize(value);
|
return deserialize(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -254,7 +255,7 @@ public class FrameImpl extends ChannelOwner implements Frame {
|
|||||||
params.addProperty("expression", pageFunction);
|
params.addProperty("expression", pageFunction);
|
||||||
params.addProperty("world", "main");
|
params.addProperty("world", "main");
|
||||||
params.addProperty("isFunction", isFunctionBody(pageFunction));
|
params.addProperty("isFunction", isFunctionBody(pageFunction));
|
||||||
params.add("arg", new Gson().toJsonTree(serializeArgument(arg)));
|
params.add("arg", gson().toJsonTree(serializeArgument(arg)));
|
||||||
JsonElement json = sendMessage("evaluateExpressionHandle", params);
|
JsonElement json = sendMessage("evaluateExpressionHandle", params);
|
||||||
return connection.getExistingObject(json.getAsJsonObject().getAsJsonObject("handle").get("guid").getAsString());
|
return connection.getExistingObject(json.getAsJsonObject().getAsJsonObject("handle").get("guid").getAsString());
|
||||||
}
|
}
|
||||||
@ -264,7 +265,7 @@ public class FrameImpl extends ChannelOwner implements Frame {
|
|||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new FillOptions();
|
options = new FillOptions();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
params.addProperty("selector", selector);
|
params.addProperty("selector", selector);
|
||||||
params.addProperty("value", value);
|
params.addProperty("value", value);
|
||||||
sendMessage("fill", params);
|
sendMessage("fill", params);
|
||||||
@ -275,7 +276,7 @@ public class FrameImpl extends ChannelOwner implements Frame {
|
|||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new FocusOptions();
|
options = new FocusOptions();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
params.addProperty("selector", selector);
|
params.addProperty("selector", selector);
|
||||||
sendMessage("focus", params);
|
sendMessage("focus", params);
|
||||||
}
|
}
|
||||||
@ -291,7 +292,7 @@ public class FrameImpl extends ChannelOwner implements Frame {
|
|||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new GetAttributeOptions();
|
options = new GetAttributeOptions();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
params.addProperty("selector", selector);
|
params.addProperty("selector", selector);
|
||||||
params.addProperty("name", name);
|
params.addProperty("name", name);
|
||||||
JsonObject json = sendMessage("getAttribute", params).getAsJsonObject();
|
JsonObject json = sendMessage("getAttribute", params).getAsJsonObject();
|
||||||
@ -306,7 +307,7 @@ public class FrameImpl extends ChannelOwner implements Frame {
|
|||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new NavigateOptions();
|
options = new NavigateOptions();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
params.addProperty("url", url);
|
params.addProperty("url", url);
|
||||||
if (options.waitUntil != null) {
|
if (options.waitUntil != null) {
|
||||||
params.remove("waitUntil");
|
params.remove("waitUntil");
|
||||||
@ -325,7 +326,7 @@ public class FrameImpl extends ChannelOwner implements Frame {
|
|||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new HoverOptions();
|
options = new HoverOptions();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
params.addProperty("selector", selector);
|
params.addProperty("selector", selector);
|
||||||
sendMessage("hover", params);
|
sendMessage("hover", params);
|
||||||
}
|
}
|
||||||
@ -335,7 +336,7 @@ public class FrameImpl extends ChannelOwner implements Frame {
|
|||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new InnerHTMLOptions();
|
options = new InnerHTMLOptions();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
params.addProperty("selector", selector);
|
params.addProperty("selector", selector);
|
||||||
JsonObject json = sendMessage("innerHTML", params).getAsJsonObject();
|
JsonObject json = sendMessage("innerHTML", params).getAsJsonObject();
|
||||||
return json.get("value").getAsString();
|
return json.get("value").getAsString();
|
||||||
@ -346,7 +347,7 @@ public class FrameImpl extends ChannelOwner implements Frame {
|
|||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new InnerTextOptions();
|
options = new InnerTextOptions();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
params.addProperty("selector", selector);
|
params.addProperty("selector", selector);
|
||||||
JsonObject json = sendMessage("innerText", params).getAsJsonObject();
|
JsonObject json = sendMessage("innerText", params).getAsJsonObject();
|
||||||
return json.get("value").getAsString();
|
return json.get("value").getAsString();
|
||||||
@ -377,7 +378,7 @@ public class FrameImpl extends ChannelOwner implements Frame {
|
|||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new PressOptions();
|
options = new PressOptions();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
params.addProperty("selector", selector);
|
params.addProperty("selector", selector);
|
||||||
params.addProperty("key", key);
|
params.addProperty("key", key);
|
||||||
sendMessage("press", params);
|
sendMessage("press", params);
|
||||||
@ -388,10 +389,10 @@ public class FrameImpl extends ChannelOwner implements Frame {
|
|||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new SelectOptionOptions();
|
options = new SelectOptionOptions();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
params.addProperty("selector", selector);
|
params.addProperty("selector", selector);
|
||||||
if (values != null) {
|
if (values != null) {
|
||||||
params.add("options", new Gson().toJsonTree(values));
|
params.add("options", gson().toJsonTree(values));
|
||||||
}
|
}
|
||||||
return selectOption(params);
|
return selectOption(params);
|
||||||
}
|
}
|
||||||
@ -401,7 +402,7 @@ public class FrameImpl extends ChannelOwner implements Frame {
|
|||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new SelectOptionOptions();
|
options = new SelectOptionOptions();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
params.addProperty("selector", selector);
|
params.addProperty("selector", selector);
|
||||||
if (values != null) {
|
if (values != null) {
|
||||||
params.add("elements", Serialization.toProtocol(values));
|
params.add("elements", Serialization.toProtocol(values));
|
||||||
@ -431,7 +432,7 @@ public class FrameImpl extends ChannelOwner implements Frame {
|
|||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new SetContentOptions();
|
options = new SetContentOptions();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
params.addProperty("html", html);
|
params.addProperty("html", html);
|
||||||
params.remove("waitUntil");
|
params.remove("waitUntil");
|
||||||
params.addProperty("waitUntil", toProtocol(options.waitUntil));
|
params.addProperty("waitUntil", toProtocol(options.waitUntil));
|
||||||
@ -439,7 +440,7 @@ public class FrameImpl extends ChannelOwner implements Frame {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setInputFiles(String selector, File[] files, SetInputFilesOptions options) {
|
public void setInputFiles(String selector, Path[] files, SetInputFilesOptions options) {
|
||||||
setInputFiles(selector, Utils.toFilePayloads(files), options);
|
setInputFiles(selector, Utils.toFilePayloads(files), options);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -448,7 +449,7 @@ public class FrameImpl extends ChannelOwner implements Frame {
|
|||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new SetInputFilesOptions();
|
options = new SetInputFilesOptions();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
params.addProperty("selector", selector);
|
params.addProperty("selector", selector);
|
||||||
params.add("files", toJsonArray(files));
|
params.add("files", toJsonArray(files));
|
||||||
sendMessage("setInputFiles", params);
|
sendMessage("setInputFiles", params);
|
||||||
@ -459,7 +460,7 @@ public class FrameImpl extends ChannelOwner implements Frame {
|
|||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new TextContentOptions();
|
options = new TextContentOptions();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
params.addProperty("selector", selector);
|
params.addProperty("selector", selector);
|
||||||
return sendMessage("textContent", params).getAsJsonObject().get("value").getAsString();
|
return sendMessage("textContent", params).getAsJsonObject().get("value").getAsString();
|
||||||
}
|
}
|
||||||
@ -475,7 +476,7 @@ public class FrameImpl extends ChannelOwner implements Frame {
|
|||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new TypeOptions();
|
options = new TypeOptions();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
params.addProperty("selector", selector);
|
params.addProperty("selector", selector);
|
||||||
params.addProperty("text", text);
|
params.addProperty("text", text);
|
||||||
sendMessage("type", params);
|
sendMessage("type", params);
|
||||||
@ -486,7 +487,7 @@ public class FrameImpl extends ChannelOwner implements Frame {
|
|||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new UncheckOptions();
|
options = new UncheckOptions();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
params.addProperty("selector", selector);
|
params.addProperty("selector", selector);
|
||||||
sendMessage("uncheck", params);
|
sendMessage("uncheck", params);
|
||||||
}
|
}
|
||||||
@ -501,10 +502,10 @@ public class FrameImpl extends ChannelOwner implements Frame {
|
|||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new WaitForFunctionOptions();
|
options = new WaitForFunctionOptions();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
params.addProperty("expression", pageFunction);
|
params.addProperty("expression", pageFunction);
|
||||||
params.addProperty("isFunction", isFunctionBody(pageFunction));
|
params.addProperty("isFunction", isFunctionBody(pageFunction));
|
||||||
params.add("arg", new Gson().toJsonTree(serializeArgument(arg)));
|
params.add("arg", gson().toJsonTree(serializeArgument(arg)));
|
||||||
Waitable<JSHandle> handle = sendMessageAsync("waitForFunction", params).apply(json -> {
|
Waitable<JSHandle> handle = sendMessageAsync("waitForFunction", params).apply(json -> {
|
||||||
JsonObject element = json.getAsJsonObject().getAsJsonObject("handle");
|
JsonObject element = json.getAsJsonObject().getAsJsonObject("handle");
|
||||||
return connection.getExistingObject(element.get("guid").getAsString());
|
return connection.getExistingObject(element.get("guid").getAsString());
|
||||||
@ -657,7 +658,7 @@ public class FrameImpl extends ChannelOwner implements Frame {
|
|||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new WaitForSelectorOptions();
|
options = new WaitForSelectorOptions();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
params.addProperty("selector", selector);
|
params.addProperty("selector", selector);
|
||||||
if (options.state != null) {
|
if (options.state != null) {
|
||||||
params.remove("state");
|
params.remove("state");
|
||||||
|
@ -25,8 +25,7 @@ import com.microsoft.playwright.JSHandle;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import static com.microsoft.playwright.impl.Serialization.deserialize;
|
import static com.microsoft.playwright.impl.Serialization.*;
|
||||||
import static com.microsoft.playwright.impl.Serialization.serializeArgument;
|
|
||||||
import static com.microsoft.playwright.impl.Utils.isFunctionBody;
|
import static com.microsoft.playwright.impl.Utils.isFunctionBody;
|
||||||
|
|
||||||
public class JSHandleImpl extends ChannelOwner implements JSHandle {
|
public class JSHandleImpl extends ChannelOwner implements JSHandle {
|
||||||
@ -45,9 +44,9 @@ public class JSHandleImpl extends ChannelOwner implements JSHandle {
|
|||||||
params.addProperty("expression", pageFunction);
|
params.addProperty("expression", pageFunction);
|
||||||
params.addProperty("world", "main");
|
params.addProperty("world", "main");
|
||||||
params.addProperty("isFunction", isFunctionBody(pageFunction));
|
params.addProperty("isFunction", isFunctionBody(pageFunction));
|
||||||
params.add("arg", new Gson().toJsonTree(serializeArgument(arg)));
|
params.add("arg", gson().toJsonTree(serializeArgument(arg)));
|
||||||
JsonElement json = sendMessage("evaluateExpression", params);
|
JsonElement json = sendMessage("evaluateExpression", params);
|
||||||
SerializedValue value = new Gson().fromJson(json.getAsJsonObject().get("value"), SerializedValue.class);
|
SerializedValue value = gson().fromJson(json.getAsJsonObject().get("value"), SerializedValue.class);
|
||||||
return deserialize(value);
|
return deserialize(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -57,7 +56,7 @@ public class JSHandleImpl extends ChannelOwner implements JSHandle {
|
|||||||
params.addProperty("expression", pageFunction);
|
params.addProperty("expression", pageFunction);
|
||||||
params.addProperty("world", "main");
|
params.addProperty("world", "main");
|
||||||
params.addProperty("isFunction", isFunctionBody(pageFunction));
|
params.addProperty("isFunction", isFunctionBody(pageFunction));
|
||||||
params.add("arg", new Gson().toJsonTree(serializeArgument(arg)));
|
params.add("arg", gson().toJsonTree(serializeArgument(arg)));
|
||||||
JsonElement json = sendMessage("evaluateExpressionHandle", params);
|
JsonElement json = sendMessage("evaluateExpressionHandle", params);
|
||||||
return connection.getExistingObject(json.getAsJsonObject().getAsJsonObject("handle").get("guid").getAsString());
|
return connection.getExistingObject(json.getAsJsonObject().getAsJsonObject("handle").get("guid").getAsString());
|
||||||
}
|
}
|
||||||
@ -85,7 +84,7 @@ public class JSHandleImpl extends ChannelOwner implements JSHandle {
|
|||||||
@Override
|
@Override
|
||||||
public Object jsonValue() {
|
public Object jsonValue() {
|
||||||
JsonObject json = sendMessage("jsonValue").getAsJsonObject();
|
JsonObject json = sendMessage("jsonValue").getAsJsonObject();
|
||||||
SerializedValue value = new Gson().fromJson(json.get("value"), SerializedValue.class);
|
SerializedValue value = gson().fromJson(json.get("value"), SerializedValue.class);
|
||||||
return deserialize(value);
|
return deserialize(value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,7 @@ import com.google.gson.Gson;
|
|||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import com.microsoft.playwright.Mouse;
|
import com.microsoft.playwright.Mouse;
|
||||||
|
|
||||||
|
import static com.microsoft.playwright.impl.Serialization.gson;
|
||||||
import static com.microsoft.playwright.impl.Serialization.toProtocol;
|
import static com.microsoft.playwright.impl.Serialization.toProtocol;
|
||||||
import static com.microsoft.playwright.impl.Utils.convertViaJson;
|
import static com.microsoft.playwright.impl.Utils.convertViaJson;
|
||||||
|
|
||||||
@ -35,7 +36,7 @@ class MouseImpl implements Mouse {
|
|||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new ClickOptions();
|
options = new ClickOptions();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
params.addProperty("x", x);
|
params.addProperty("x", x);
|
||||||
params.addProperty("y", y);
|
params.addProperty("y", y);
|
||||||
if (options.button != null) {
|
if (options.button != null) {
|
||||||
@ -62,7 +63,7 @@ class MouseImpl implements Mouse {
|
|||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new DownOptions();
|
options = new DownOptions();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
page.sendMessage("mouseDown", params);
|
page.sendMessage("mouseDown", params);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -71,7 +72,7 @@ class MouseImpl implements Mouse {
|
|||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new MoveOptions();
|
options = new MoveOptions();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
params.addProperty("x", x);
|
params.addProperty("x", x);
|
||||||
params.addProperty("y", y);
|
params.addProperty("y", y);
|
||||||
page.sendMessage("mouseMove", params);
|
page.sendMessage("mouseMove", params);
|
||||||
@ -82,7 +83,7 @@ class MouseImpl implements Mouse {
|
|||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new UpOptions();
|
options = new UpOptions();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
page.sendMessage("mouseUp", params);
|
page.sendMessage("mouseUp", params);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,11 +23,13 @@ import com.microsoft.playwright.*;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.nio.file.Path;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.function.BiConsumer;
|
import java.util.function.BiConsumer;
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import static com.microsoft.playwright.impl.Serialization.gson;
|
||||||
import static com.microsoft.playwright.impl.Utils.convertViaJson;
|
import static com.microsoft.playwright.impl.Utils.convertViaJson;
|
||||||
|
|
||||||
|
|
||||||
@ -156,7 +158,7 @@ public class PageImpl extends ChannelOwner implements Page {
|
|||||||
route.continue_();
|
route.continue_();
|
||||||
}
|
}
|
||||||
} else if ("pageError".equals(event)) {
|
} else if ("pageError".equals(event)) {
|
||||||
SerializedError error = new Gson().fromJson(params.getAsJsonObject("error"), SerializedError.class);
|
SerializedError error = gson().fromJson(params.getAsJsonObject("error"), SerializedError.class);
|
||||||
listeners.notify(EventType.PAGEERROR, new ErrorImpl(error));
|
listeners.notify(EventType.PAGEERROR, new ErrorImpl(error));
|
||||||
} else if ("crash".equals(event)) {
|
} else if ("crash".equals(event)) {
|
||||||
listeners.notify(EventType.CRASH, null);
|
listeners.notify(EventType.CRASH, null);
|
||||||
@ -203,7 +205,7 @@ public class PageImpl extends ChannelOwner implements Page {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void close(CloseOptions options) {
|
public void close(CloseOptions options) {
|
||||||
JsonObject params = options == null ? new JsonObject() : new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = options == null ? new JsonObject() : gson().toJsonTree(options).getAsJsonObject();
|
||||||
sendMessage("close", params);
|
sendMessage("close", params);
|
||||||
if (ownedContext != null) {
|
if (ownedContext != null) {
|
||||||
ownedContext.close();
|
ownedContext.close();
|
||||||
@ -416,7 +418,7 @@ public class PageImpl extends ChannelOwner implements Page {
|
|||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new GoBackOptions();
|
options = new GoBackOptions();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
params.remove("waitUntil");
|
params.remove("waitUntil");
|
||||||
params.addProperty("waitUntil", FrameImpl.toProtocol(options.waitUntil));
|
params.addProperty("waitUntil", FrameImpl.toProtocol(options.waitUntil));
|
||||||
JsonObject json = sendMessage("goBack", params).getAsJsonObject();
|
JsonObject json = sendMessage("goBack", params).getAsJsonObject();
|
||||||
@ -431,7 +433,7 @@ public class PageImpl extends ChannelOwner implements Page {
|
|||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new GoForwardOptions();
|
options = new GoForwardOptions();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
params.remove("waitUntil");
|
params.remove("waitUntil");
|
||||||
params.addProperty("waitUntil", FrameImpl.toProtocol(options.waitUntil));
|
params.addProperty("waitUntil", FrameImpl.toProtocol(options.waitUntil));
|
||||||
JsonObject json = sendMessage("goForward", params).getAsJsonObject();
|
JsonObject json = sendMessage("goForward", params).getAsJsonObject();
|
||||||
@ -498,7 +500,7 @@ public class PageImpl extends ChannelOwner implements Page {
|
|||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new PdfOptions();
|
options = new PdfOptions();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
params.remove("path");
|
params.remove("path");
|
||||||
JsonObject json = sendMessage("pdf", params).getAsJsonObject();
|
JsonObject json = sendMessage("pdf", params).getAsJsonObject();
|
||||||
byte[] buffer = Base64.getDecoder().decode(json.get("pdf").getAsString());
|
byte[] buffer = Base64.getDecoder().decode(json.get("pdf").getAsString());
|
||||||
@ -518,7 +520,7 @@ public class PageImpl extends ChannelOwner implements Page {
|
|||||||
if (options == null) {
|
if (options == null) {
|
||||||
options = new ReloadOptions();
|
options = new ReloadOptions();
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
params.remove("waitUntil");
|
params.remove("waitUntil");
|
||||||
params.addProperty("waitUntil", FrameImpl.toProtocol(options.waitUntil));
|
params.addProperty("waitUntil", FrameImpl.toProtocol(options.waitUntil));
|
||||||
JsonObject json = sendMessage("reload", params).getAsJsonObject();
|
JsonObject json = sendMessage("reload", params).getAsJsonObject();
|
||||||
@ -564,16 +566,17 @@ public class PageImpl extends ChannelOwner implements Page {
|
|||||||
if (options.type == null) {
|
if (options.type == null) {
|
||||||
options.type = ScreenshotOptions.Type.PNG;
|
options.type = ScreenshotOptions.Type.PNG;
|
||||||
if (options.path != null) {
|
if (options.path != null) {
|
||||||
int extStart = options.path.getName().lastIndexOf('.');
|
String fileName = options.path.getFileName().toString();
|
||||||
|
int extStart = fileName.lastIndexOf('.');
|
||||||
if (extStart != -1) {
|
if (extStart != -1) {
|
||||||
String extension = options.path.getName().substring(extStart).toLowerCase();
|
String extension = fileName.substring(extStart).toLowerCase();
|
||||||
if (".jpeg".equals(extension) || ".jpg".equals(extension)) {
|
if (".jpeg".equals(extension) || ".jpg".equals(extension)) {
|
||||||
options.type = ScreenshotOptions.Type.JPEG;
|
options.type = ScreenshotOptions.Type.JPEG;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
JsonObject params = new Gson().toJsonTree(options).getAsJsonObject();
|
JsonObject params = gson().toJsonTree(options).getAsJsonObject();
|
||||||
params.remove("type");
|
params.remove("type");
|
||||||
params.addProperty("type", toProtocol(options.type));
|
params.addProperty("type", toProtocol(options.type));
|
||||||
params.remove("path");
|
params.remove("path");
|
||||||
@ -632,7 +635,7 @@ public class PageImpl extends ChannelOwner implements Page {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setInputFiles(String selector, File[] files, SetInputFilesOptions options) {
|
public void setInputFiles(String selector, Path[] files, SetInputFilesOptions options) {
|
||||||
mainFrame.setInputFiles(selector, files, convertViaJson(options, Frame.SetInputFilesOptions.class));
|
mainFrame.setInputFiles(selector, files, convertViaJson(options, Frame.SetInputFilesOptions.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -645,7 +648,7 @@ public class PageImpl extends ChannelOwner implements Page {
|
|||||||
public void setViewportSize(int width, int height) {
|
public void setViewportSize(int width, int height) {
|
||||||
viewport = new Viewport(width, height);
|
viewport = new Viewport(width, height);
|
||||||
JsonObject params = new JsonObject();
|
JsonObject params = new JsonObject();
|
||||||
params.add("viewportSize", new Gson().toJsonTree(viewport));
|
params.add("viewportSize", gson().toJsonTree(viewport));
|
||||||
sendMessage("setViewportSize", params);
|
sendMessage("setViewportSize", params);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -59,7 +59,7 @@ public class PlaywrightImpl extends ChannelOwner implements Playwright {
|
|||||||
firefox = parent.connection.getExistingObject(initializer.getAsJsonObject("firefox").get("guid").getAsString());
|
firefox = parent.connection.getExistingObject(initializer.getAsJsonObject("firefox").get("guid").getAsString());
|
||||||
webkit = parent.connection.getExistingObject(initializer.getAsJsonObject("webkit").get("guid").getAsString());
|
webkit = parent.connection.getExistingObject(initializer.getAsJsonObject("webkit").get("guid").getAsString());
|
||||||
|
|
||||||
Gson gson = new Gson();
|
Gson gson = Serialization.gson();
|
||||||
for (JsonElement item : initializer.getAsJsonArray("deviceDescriptors")) {
|
for (JsonElement item : initializer.getAsJsonArray("deviceDescriptors")) {
|
||||||
JsonObject o = item.getAsJsonObject();
|
JsonObject o = item.getAsJsonObject();
|
||||||
String name = o.get("name").getAsString();
|
String name = o.get("name").getAsString();
|
||||||
|
@ -16,21 +16,32 @@
|
|||||||
|
|
||||||
package com.microsoft.playwright.impl;
|
package com.microsoft.playwright.impl;
|
||||||
|
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.*;
|
||||||
import com.google.gson.JsonArray;
|
import com.google.gson.stream.JsonReader;
|
||||||
import com.google.gson.JsonElement;
|
import com.google.gson.stream.JsonWriter;
|
||||||
import com.google.gson.JsonObject;
|
|
||||||
import com.microsoft.playwright.*;
|
import com.microsoft.playwright.*;
|
||||||
|
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
import java.io.PrintStream;
|
import java.io.PrintStream;
|
||||||
import java.lang.reflect.Array;
|
import java.lang.reflect.Type;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.nio.file.Path;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
import java.util.stream.StreamSupport;
|
|
||||||
|
|
||||||
class Serialization {
|
class Serialization {
|
||||||
|
private static Gson gson;
|
||||||
|
|
||||||
|
static Gson gson() {
|
||||||
|
if (gson == null) {
|
||||||
|
gson = new GsonBuilder()
|
||||||
|
.registerTypeAdapter(BrowserContext.SameSite.class, new SameSiteAdapter().nullSafe())
|
||||||
|
.registerTypeAdapter(BrowserType.LaunchPersistentContextOptions.ColorScheme.class, new ColorSchemeAdapter().nullSafe())
|
||||||
|
.registerTypeAdapter(Path.class, new PathSerializer()).create();
|
||||||
|
}
|
||||||
|
return gson;
|
||||||
|
}
|
||||||
|
|
||||||
static SerializedError serializeError(Throwable e) {
|
static SerializedError serializeError(Throwable e) {
|
||||||
SerializedError result = new SerializedError();
|
SerializedError result = new SerializedError();
|
||||||
result.error = new SerializedError.Error();
|
result.error = new SerializedError.Error();
|
||||||
@ -40,7 +51,7 @@ class Serialization {
|
|||||||
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||||
e.printStackTrace(new PrintStream(out));
|
e.printStackTrace(new PrintStream(out));
|
||||||
result.error.stack = new String(out.toByteArray(), StandardCharsets.UTF_8);
|
result.error.stack = new String(out.toByteArray(), StandardCharsets.UTF_8);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static SerializedValue serializeValue(Object value, List<JSHandleImpl> handles, int depth) {
|
private static SerializedValue serializeValue(Object value, List<JSHandleImpl> handles, int depth) {
|
||||||
@ -56,7 +67,7 @@ class Serialization {
|
|||||||
if (value == null) {
|
if (value == null) {
|
||||||
result.v = "undefined";
|
result.v = "undefined";
|
||||||
} else if (value instanceof Double) {
|
} else if (value instanceof Double) {
|
||||||
double d = ((Double) value).doubleValue();
|
double d = ((Double) value);
|
||||||
if (d == Double.POSITIVE_INFINITY) {
|
if (d == Double.POSITIVE_INFINITY) {
|
||||||
result.v = "Infinity";
|
result.v = "Infinity";
|
||||||
} else if (d == Double.NEGATIVE_INFINITY) {
|
} else if (d == Double.NEGATIVE_INFINITY) {
|
||||||
@ -160,15 +171,19 @@ class Serialization {
|
|||||||
}
|
}
|
||||||
return (T) map;
|
return (T) map;
|
||||||
}
|
}
|
||||||
throw new PlaywrightException("Unexpected result: " + new Gson().toJson(value));
|
throw new PlaywrightException("Unexpected result: " + gson().toJson(value));
|
||||||
}
|
}
|
||||||
|
|
||||||
static String toProtocol(Mouse.Button button) {
|
static String toProtocol(Mouse.Button button) {
|
||||||
switch (button) {
|
switch (button) {
|
||||||
case LEFT: return "left";
|
case LEFT:
|
||||||
case RIGHT: return "right";
|
return "left";
|
||||||
case MIDDLE: return "middle";
|
case RIGHT:
|
||||||
default: throw new PlaywrightException("Unexpected value: " + button);
|
return "right";
|
||||||
|
case MIDDLE:
|
||||||
|
return "middle";
|
||||||
|
default:
|
||||||
|
throw new PlaywrightException("Unexpected value: " + button);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -229,4 +244,71 @@ class Serialization {
|
|||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static class PathSerializer implements JsonSerializer<Path> {
|
||||||
|
@Override
|
||||||
|
public JsonElement serialize(Path src, Type typeOfSrc, JsonSerializationContext context) {
|
||||||
|
return new JsonPrimitive(src.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class SameSiteAdapter extends TypeAdapter<BrowserContext.SameSite> {
|
||||||
|
@Override
|
||||||
|
public void write(JsonWriter out, BrowserContext.SameSite value) throws IOException {
|
||||||
|
String stringValue;
|
||||||
|
switch (value) {
|
||||||
|
case STRICT:
|
||||||
|
stringValue = "Strict";
|
||||||
|
break;
|
||||||
|
case LAX:
|
||||||
|
stringValue = "Lax";
|
||||||
|
break;
|
||||||
|
case NONE:
|
||||||
|
stringValue = "None";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new PlaywrightException("Unexpected value: " + value);
|
||||||
|
}
|
||||||
|
out.value(stringValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BrowserContext.SameSite read(JsonReader in) throws IOException {
|
||||||
|
String value = in.nextString();
|
||||||
|
return BrowserContext.SameSite.valueOf(value.toUpperCase());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class ColorSchemeAdapter extends TypeAdapter<BrowserType.LaunchPersistentContextOptions.ColorScheme> {
|
||||||
|
@Override
|
||||||
|
public void write(JsonWriter out, BrowserType.LaunchPersistentContextOptions.ColorScheme value) throws IOException {
|
||||||
|
String stringValue;
|
||||||
|
switch (value) {
|
||||||
|
case DARK:
|
||||||
|
stringValue = "dark";
|
||||||
|
break;
|
||||||
|
case LIGHT:
|
||||||
|
stringValue = "light";
|
||||||
|
break;
|
||||||
|
case NO_PREFERENCE:
|
||||||
|
stringValue = "no-preference";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new PlaywrightException("Unexpected value: " + value);
|
||||||
|
}
|
||||||
|
out.value(stringValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BrowserType.LaunchPersistentContextOptions.ColorScheme read(JsonReader in) throws IOException {
|
||||||
|
String value = in.nextString();
|
||||||
|
switch (value) {
|
||||||
|
case "dark": return BrowserType.LaunchPersistentContextOptions.ColorScheme.DARK;
|
||||||
|
case "light": return BrowserType.LaunchPersistentContextOptions.ColorScheme.LIGHT;
|
||||||
|
case "no-preference": return BrowserType.LaunchPersistentContextOptions.ColorScheme.NO_PREFERENCE;
|
||||||
|
default: throw new PlaywrightException("Unexpected value: " + value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,8 +32,9 @@ import java.util.*;
|
|||||||
class Utils {
|
class Utils {
|
||||||
// TODO: generate converter.
|
// TODO: generate converter.
|
||||||
static <F, T> T convertViaJson(F f, Class<T> t) {
|
static <F, T> T convertViaJson(F f, Class<T> t) {
|
||||||
String json = new Gson().toJson(f);
|
Gson gson = new Gson();
|
||||||
return new Gson().fromJson(json, t);
|
String json = gson.toJson(f);
|
||||||
|
return gson.fromJson(json, t);
|
||||||
}
|
}
|
||||||
|
|
||||||
static boolean isFunctionBody(String expression) {
|
static boolean isFunctionBody(String expression) {
|
||||||
@ -113,30 +114,32 @@ class Utils {
|
|||||||
return mimeType;
|
return mimeType;
|
||||||
}
|
}
|
||||||
|
|
||||||
static FileChooser.FilePayload[] toFilePayloads(File[] files) {
|
static FileChooser.FilePayload[] toFilePayloads(Path[] files) {
|
||||||
List<FileChooser.FilePayload> payloads = new ArrayList<>();
|
List<FileChooser.FilePayload> payloads = new ArrayList<>();
|
||||||
for (File file : files) {
|
for (Path file : files) {
|
||||||
byte[] buffer;
|
byte[] buffer;
|
||||||
try {
|
try {
|
||||||
buffer = Files.readAllBytes(file.toPath());
|
buffer = Files.readAllBytes(file);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new PlaywrightException("Failed to read from file", e);
|
throw new PlaywrightException("Failed to read from file", e);
|
||||||
}
|
}
|
||||||
payloads.add(new FileChooser.FilePayload(file.getName(), mimeType(file.toPath()), buffer));
|
payloads.add(new FileChooser.FilePayload(file.getFileName().toString(), mimeType(file), buffer));
|
||||||
}
|
}
|
||||||
return payloads.toArray(new FileChooser.FilePayload[0]);
|
return payloads.toArray(new FileChooser.FilePayload[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void writeToFile(byte[] buffer, File path) {
|
static void writeToFile(byte[] buffer, Path path) {
|
||||||
File dir = path.getParentFile();
|
Path dir = path.getParent();
|
||||||
if (dir != null) {
|
if (dir != null) {
|
||||||
if (!dir.exists()) {
|
if (!Files.exists(dir)) {
|
||||||
if (!dir.mkdirs()) {
|
try {
|
||||||
throw new PlaywrightException("Failed to create parent directory: " + dir.getPath());
|
Files.createDirectories(dir);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new PlaywrightException("Failed to create parent directory: " + dir.toString(), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
try (DataOutputStream out = new DataOutputStream(new FileOutputStream(path));) {
|
try (DataOutputStream out = new DataOutputStream(new FileOutputStream(path.toFile()));) {
|
||||||
out.write(buffer);
|
out.write(buffer);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new PlaywrightException("Failed to write to file", e);
|
throw new PlaywrightException("Failed to write to file", e);
|
||||||
|
@ -21,8 +21,7 @@ import com.google.gson.JsonElement;
|
|||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import com.microsoft.playwright.*;
|
import com.microsoft.playwright.*;
|
||||||
|
|
||||||
import static com.microsoft.playwright.impl.Serialization.deserialize;
|
import static com.microsoft.playwright.impl.Serialization.*;
|
||||||
import static com.microsoft.playwright.impl.Serialization.serializeArgument;
|
|
||||||
import static com.microsoft.playwright.impl.Utils.isFunctionBody;
|
import static com.microsoft.playwright.impl.Utils.isFunctionBody;
|
||||||
|
|
||||||
class WorkerImpl extends ChannelOwner implements Worker {
|
class WorkerImpl extends ChannelOwner implements Worker {
|
||||||
@ -48,9 +47,9 @@ class WorkerImpl extends ChannelOwner implements Worker {
|
|||||||
JsonObject params = new JsonObject();
|
JsonObject params = new JsonObject();
|
||||||
params.addProperty("expression", pageFunction);
|
params.addProperty("expression", pageFunction);
|
||||||
params.addProperty("isFunction", isFunctionBody(pageFunction));
|
params.addProperty("isFunction", isFunctionBody(pageFunction));
|
||||||
params.add("arg", new Gson().toJsonTree(serializeArgument(arg)));
|
params.add("arg", gson().toJsonTree(serializeArgument(arg)));
|
||||||
JsonElement json = sendMessage("evaluateExpression", params);
|
JsonElement json = sendMessage("evaluateExpression", params);
|
||||||
SerializedValue value = new Gson().fromJson(json.getAsJsonObject().get("value"), SerializedValue.class);
|
SerializedValue value = gson().fromJson(json.getAsJsonObject().get("value"), SerializedValue.class);
|
||||||
return deserialize(value);
|
return deserialize(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -59,7 +58,7 @@ class WorkerImpl extends ChannelOwner implements Worker {
|
|||||||
JsonObject params = new JsonObject();
|
JsonObject params = new JsonObject();
|
||||||
params.addProperty("expression", pageFunction);
|
params.addProperty("expression", pageFunction);
|
||||||
params.addProperty("isFunction", isFunctionBody(pageFunction));
|
params.addProperty("isFunction", isFunctionBody(pageFunction));
|
||||||
params.add("arg", new Gson().toJsonTree(serializeArgument(arg)));
|
params.add("arg", gson().toJsonTree(serializeArgument(arg)));
|
||||||
JsonElement json = sendMessage("evaluateExpressionHandle", params);
|
JsonElement json = sendMessage("evaluateExpressionHandle", params);
|
||||||
return connection.getExistingObject(json.getAsJsonObject().getAsJsonObject("handle").get("guid").getAsString());
|
return connection.getExistingObject(json.getAsJsonObject().getAsJsonObject("handle").get("guid").getAsString());
|
||||||
}
|
}
|
||||||
|
@ -19,6 +19,8 @@ package com.microsoft.playwright;
|
|||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.nio.file.Paths;
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -30,7 +32,7 @@ import static org.junit.jupiter.api.Assertions.*;
|
|||||||
|
|
||||||
|
|
||||||
public class TestPageSetInputFiles extends TestBase {
|
public class TestPageSetInputFiles extends TestBase {
|
||||||
static File FILE_TO_UPLOAD = new File("src/test/resources/file-to-upload.txt");
|
static Path FILE_TO_UPLOAD = Paths.get("src/test/resources/file-to-upload.txt");
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void shouldUploadTheFile() {
|
void shouldUploadTheFile() {
|
||||||
@ -238,7 +240,7 @@ public class TestPageSetInputFiles extends TestBase {
|
|||||||
@Override
|
@Override
|
||||||
public void handle(Event<Page.EventType> event) {
|
public void handle(Event<Page.EventType> event) {
|
||||||
FileChooser fileChooser = (FileChooser) event.data();
|
FileChooser fileChooser = (FileChooser) event.data();
|
||||||
fileChooser.setFiles(new File[0]);
|
fileChooser.setFiles(new Path[0]);
|
||||||
page.removeListener(Page.EventType.FILECHOOSER, this);
|
page.removeListener(Page.EventType.FILECHOOSER, this);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -257,7 +259,7 @@ public class TestPageSetInputFiles extends TestBase {
|
|||||||
page.click("input");
|
page.click("input");
|
||||||
FileChooser fileChooser = (FileChooser) event.get().data();
|
FileChooser fileChooser = (FileChooser) event.get().data();
|
||||||
try {
|
try {
|
||||||
fileChooser.setFiles(new File[]{FILE_TO_UPLOAD, new File("src/test/resources/pptr.png")});
|
fileChooser.setFiles(new Path[]{FILE_TO_UPLOAD, Paths.get("src/test/resources/pptr.png")});
|
||||||
fail("did not throw");
|
fail("did not throw");
|
||||||
} catch (PlaywrightException e) {
|
} catch (PlaywrightException e) {
|
||||||
assertTrue(e.getMessage().contains("Non-multiple file input can only accept single file"));
|
assertTrue(e.getMessage().contains("Non-multiple file input can only accept single file"));
|
||||||
|
@ -21,6 +21,7 @@ import org.junit.jupiter.api.Test;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.*;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
|
||||||
@ -28,12 +29,10 @@ public class TestPdf extends TestBase {
|
|||||||
@Test
|
@Test
|
||||||
void shouldBeAbleToSaveFile() throws IOException {
|
void shouldBeAbleToSaveFile() throws IOException {
|
||||||
// TODO: test.skip(headful || browserName !== "chromium", "Printing to pdf is currently only supported in headless chromium.");
|
// TODO: test.skip(headful || browserName !== "chromium", "Printing to pdf is currently only supported in headless chromium.");
|
||||||
File path = File.createTempFile("output", ".pdf");
|
Path path = File.createTempFile("output", ".pdf").toPath();
|
||||||
page.pdf(new Page.PdfOptions().withPath(path));
|
page.pdf(new Page.PdfOptions().withPath(path));
|
||||||
long size = Files.size(path.toPath());
|
long size = Files.size(path);
|
||||||
assertTrue(size > 0);
|
assertTrue(size > 0);
|
||||||
Browser b = playwright.webkit().launch();
|
|
||||||
System.out.println(b.version());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
Loading…
x
Reference in New Issue
Block a user