From 51d7c1e1d419d8ed29e1cfe4b65ad91c1c389615 Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Wed, 24 Aug 2022 18:46:24 -0700 Subject: [PATCH 01/66] feat: support directConnect --- .../remote/AppiumCommandExecutor.java | 37 ++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java index 01c551fb4..7dff0cd2b 100644 --- a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java +++ b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java @@ -47,6 +47,7 @@ import java.io.IOException; import java.lang.reflect.Field; import java.net.ConnectException; +import java.net.MalformedURLException; import java.net.URL; import java.time.Duration; import java.util.Map; @@ -147,6 +148,12 @@ protected HttpClient getClient() { return getPrivateFieldValue(HttpCommandExecutor.class, "client", HttpClient.class); } + protected void setClientWithURL(URL serverUrl) { + HttpClient.Factory httpClientFactory = getPrivateFieldValue(HttpCommandExecutor.class, "httpClientFactory", HttpClient.Factory.class); + setPrivateFieldValue(HttpCommandExecutor.class, "client", httpClientFactory.createClient(serverUrl)); + } + + private Response createSession(Command command) throws IOException { if (getCommandCodec() != null) { throw new SessionNotCreatedException("Session already exists"); @@ -166,13 +173,41 @@ private Response createSession(Command command) throws IOException { setCommandCodec(new AppiumW3CHttpCommandCodec()); refreshAdditionalCommands(); setResponseCodec(dialect.getResponseCodec()); - return result.createResponse(); + Response response = result.createResponse(); + + setDirectConnect(response); + + return response; } public void refreshAdditionalCommands() { getAdditionalCommands().forEach(this::defineCommand); } + @SuppressWarnings("unchecked") + private void setDirectConnect(Response response) { + Map responseValue = (Map) response.getValue(); + + String directConnectProtocol = getDirectConnectValue(responseValue, "directConnectProtocol"); + String directConnectPath = getDirectConnectValue(responseValue, "directConnectPath"); + String directConnectHost = getDirectConnectValue(responseValue, "directConnectHost"); + String directConnectPort = getDirectConnectValue(responseValue, "directConnectPort"); + + if (directConnectProtocol == null || directConnectHost == null || directConnectPath == null || directConnectPort == null) { + return; + } + + String urlString = directConnectProtocol + "://" + directConnectHost + ":" + directConnectPort + directConnectPath; + try { + setClientWithURL(new URL(urlString)); + } catch (MalformedURLException e) { /* ignore */} + } + + private String getDirectConnectValue(Map responseValue, String key) { + String directConnectPath = String.valueOf(responseValue.get("appium:" + key)); + return directConnectPath == null ? String.valueOf(responseValue.get(key)) : directConnectPath; + } + @Override public Response execute(Command command) throws WebDriverException { if (DriverCommand.NEW_SESSION.equals(command.getName())) { From 65e494faa3ed0ecd8b90134f0ed1df7984ee0420 Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Wed, 24 Aug 2022 19:27:20 -0700 Subject: [PATCH 02/66] add an argument for directConnect --- .../remote/AppiumCommandExecutor.java | 52 ++++++++++++++----- 1 file changed, 40 insertions(+), 12 deletions(-) diff --git a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java index 7dff0cd2b..24a859df0 100644 --- a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java +++ b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java @@ -61,10 +61,13 @@ public class AppiumCommandExecutor extends HttpCommandExecutor { private final Optional serviceOptional; + private final boolean directConnect; + private AppiumCommandExecutor(Map additionalCommands, DriverService service, URL addressOfRemoteServer, HttpClient.Factory httpClientFactory, - ClientConfig clientConfig) { + ClientConfig clientConfig, + boolean directConnect) { super(additionalCommands, ofNullable(clientConfig).orElse( ClientConfig.defaultConfig() @@ -76,30 +79,55 @@ private AppiumCommandExecutor(Map additionalCommands, Drive ofNullable(httpClientFactory).orElseGet(HttpCommandExecutor::getDefaultClientFactory) ); serviceOptional = ofNullable(service); + directConnect = directConnect; + } + + public AppiumCommandExecutor(Map additionalCommands, DriverService service, + HttpClient.Factory httpClientFactory, boolean directConnect) { + this(additionalCommands, checkNotNull(service), null, httpClientFactory, null, directConnect); } public AppiumCommandExecutor(Map additionalCommands, DriverService service, HttpClient.Factory httpClientFactory) { - this(additionalCommands, checkNotNull(service), null, httpClientFactory, null); + this(additionalCommands, checkNotNull(service), null, httpClientFactory, null, false); + } + + public AppiumCommandExecutor(Map additionalCommands, + URL addressOfRemoteServer, HttpClient.Factory httpClientFactory, boolean directConnect) { + this(additionalCommands, null, checkNotNull(addressOfRemoteServer), httpClientFactory, null, directConnect); } public AppiumCommandExecutor(Map additionalCommands, URL addressOfRemoteServer, HttpClient.Factory httpClientFactory) { - this(additionalCommands, null, checkNotNull(addressOfRemoteServer), httpClientFactory, null); + this(additionalCommands, null, checkNotNull(addressOfRemoteServer), httpClientFactory, null, false); + } + + public AppiumCommandExecutor(Map additionalCommands, ClientConfig clientConfig, boolean directConnect) { + this(additionalCommands, null, checkNotNull(clientConfig.baseUrl()), null, clientConfig, directConnect); } public AppiumCommandExecutor(Map additionalCommands, ClientConfig clientConfig) { - this(additionalCommands, null, checkNotNull(clientConfig.baseUrl()), null, clientConfig); + this(additionalCommands, null, checkNotNull(clientConfig.baseUrl()), null, clientConfig, false); + } + + public AppiumCommandExecutor(Map additionalCommands, + URL addressOfRemoteServer, boolean directConnect) { + this(additionalCommands, addressOfRemoteServer, HttpClient.Factory.createDefault(), directConnect); } public AppiumCommandExecutor(Map additionalCommands, URL addressOfRemoteServer) { - this(additionalCommands, addressOfRemoteServer, HttpClient.Factory.createDefault()); + this(additionalCommands, addressOfRemoteServer, HttpClient.Factory.createDefault(), false); + } + + public AppiumCommandExecutor(Map additionalCommands, + DriverService service, boolean directConnect) { + this(additionalCommands, service, HttpClient.Factory.createDefault(), directConnect); } public AppiumCommandExecutor(Map additionalCommands, DriverService service) { - this(additionalCommands, service, HttpClient.Factory.createDefault()); + this(additionalCommands, service, HttpClient.Factory.createDefault(), false); } @SuppressWarnings("SameParameterValue") @@ -185,7 +213,11 @@ public void refreshAdditionalCommands() { } @SuppressWarnings("unchecked") - private void setDirectConnect(Response response) { + private void setDirectConnect(Response response) throws MalformedURLException { + if (!this.directConnect) { + return; + } + Map responseValue = (Map) response.getValue(); String directConnectProtocol = getDirectConnectValue(responseValue, "directConnectProtocol"); @@ -196,11 +228,7 @@ private void setDirectConnect(Response response) { if (directConnectProtocol == null || directConnectHost == null || directConnectPath == null || directConnectPort == null) { return; } - - String urlString = directConnectProtocol + "://" + directConnectHost + ":" + directConnectPort + directConnectPath; - try { - setClientWithURL(new URL(urlString)); - } catch (MalformedURLException e) { /* ignore */} + setClientWithURL(new URL(directConnectProtocol + "://" + directConnectHost + ":" + directConnectPort + directConnectPath)); } private String getDirectConnectValue(Map responseValue, String key) { From 05d0976a932ecc0a1a718467c2e48a985f3725e2 Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Wed, 24 Aug 2022 19:57:45 -0700 Subject: [PATCH 03/66] add flag in android drivers --- .../io/appium/java_client/AppiumDriver.java | 52 +++++++++++++++++-- .../java_client/android/AndroidDriver.java | 39 ++++++++++++++ .../remote/AppiumCommandExecutor.java | 27 +--------- 3 files changed, 88 insertions(+), 30 deletions(-) diff --git a/src/main/java/io/appium/java_client/AppiumDriver.java b/src/main/java/io/appium/java_client/AppiumDriver.java index 0f109af2c..0b5760823 100644 --- a/src/main/java/io/appium/java_client/AppiumDriver.java +++ b/src/main/java/io/appium/java_client/AppiumDriver.java @@ -85,28 +85,52 @@ public AppiumDriver(HttpCommandExecutor executor, Capabilities capabilities) { } public AppiumDriver(ClientConfig clientConfig, Capabilities capabilities) { - this(new AppiumCommandExecutor(MobileCommand.commandRepository, clientConfig), capabilities); + this(new AppiumCommandExecutor(MobileCommand.commandRepository, clientConfig, false), capabilities); + } + + public AppiumDriver(ClientConfig clientConfig, Capabilities capabilities, boolean directConnect) { + this(new AppiumCommandExecutor(MobileCommand.commandRepository, clientConfig, directConnect), capabilities); } public AppiumDriver(URL remoteAddress, Capabilities capabilities) { - this(new AppiumCommandExecutor(MobileCommand.commandRepository, remoteAddress), + this(new AppiumCommandExecutor(MobileCommand.commandRepository, remoteAddress, false), + capabilities); + } + public AppiumDriver(URL remoteAddress, Capabilities capabilities, boolean directConnect) { + this(new AppiumCommandExecutor(MobileCommand.commandRepository, remoteAddress, directConnect), capabilities); } public AppiumDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities) { this(new AppiumCommandExecutor(MobileCommand.commandRepository, remoteAddress, - httpClientFactory), capabilities); + httpClientFactory, false), capabilities); } + public AppiumDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, + Capabilities capabilities, boolean directConnect) { + this(new AppiumCommandExecutor(MobileCommand.commandRepository, remoteAddress, + httpClientFactory, directConnect), capabilities); + } public AppiumDriver(AppiumDriverLocalService service, Capabilities capabilities) { - this(new AppiumCommandExecutor(MobileCommand.commandRepository, service), + this(new AppiumCommandExecutor(MobileCommand.commandRepository, service, false), + capabilities); + } + + public AppiumDriver(AppiumDriverLocalService service, Capabilities capabilities, boolean directConnect) { + this(new AppiumCommandExecutor(MobileCommand.commandRepository, service, directConnect), capabilities); } public AppiumDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - this(new AppiumCommandExecutor(MobileCommand.commandRepository, service, httpClientFactory), + this(new AppiumCommandExecutor(MobileCommand.commandRepository, service, httpClientFactory, false), + capabilities); + } + + public AppiumDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, + Capabilities capabilities, boolean directConnect) { + this(new AppiumCommandExecutor(MobileCommand.commandRepository, service, httpClientFactory, directConnect), capabilities); } @@ -114,20 +138,38 @@ public AppiumDriver(AppiumServiceBuilder builder, Capabilities capabilities) { this(builder.build(), capabilities); } + public AppiumDriver(AppiumServiceBuilder builder, Capabilities capabilities, boolean directConnect) { + this(builder.build(), capabilities, directConnect); + } + public AppiumDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities) { this(builder.build(), httpClientFactory, capabilities); } + public AppiumDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, + Capabilities capabilities, boolean directConnect) { + this(builder.build(), httpClientFactory, capabilities, directConnect); + } + public AppiumDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities) { this(AppiumDriverLocalService.buildDefaultService(), httpClientFactory, capabilities); } + public AppiumDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities, boolean directConnect) { + this(AppiumDriverLocalService.buildDefaultService(), httpClientFactory, + capabilities, directConnect); + } + public AppiumDriver(Capabilities capabilities) { this(AppiumDriverLocalService.buildDefaultService(), capabilities); } + public AppiumDriver(Capabilities capabilities, boolean directConnect) { + this(AppiumDriverLocalService.buildDefaultService(), capabilities, directConnect); + } + /** * Changes platform name if it is not set and returns merged capabilities. * diff --git a/src/main/java/io/appium/java_client/android/AndroidDriver.java b/src/main/java/io/appium/java_client/android/AndroidDriver.java index 76810cac3..844f71249 100644 --- a/src/main/java/io/appium/java_client/android/AndroidDriver.java +++ b/src/main/java/io/appium/java_client/android/AndroidDriver.java @@ -117,6 +117,10 @@ public AndroidDriver(URL remoteAddress, Capabilities capabilities) { super(remoteAddress, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } + public AndroidDriver(URL remoteAddress, Capabilities capabilities, boolean directConnect) { + super(remoteAddress, ensurePlatformName(capabilities, ANDROID_PLATFORM), directConnect); + } + /** * Creates a new instance based on Appium server URL, HTTP client factory and {@code capabilities}. * @@ -129,6 +133,11 @@ public AndroidDriver( super(remoteAddress, httpClientFactory, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } + public AndroidDriver( + URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities, boolean directConnect) { + super(remoteAddress, httpClientFactory, ensurePlatformName(capabilities, ANDROID_PLATFORM), directConnect); + } + /** * Creates a new instance based on Appium driver local service and {@code capabilities}. * @@ -139,6 +148,10 @@ public AndroidDriver(AppiumDriverLocalService service, Capabilities capabilities super(service, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } + public AndroidDriver(AppiumDriverLocalService service, Capabilities capabilities, boolean directConnect) { + super(service, ensurePlatformName(capabilities, ANDROID_PLATFORM), directConnect); + } + /** * Creates a new instance based on Appium driver local service, HTTP client factory and {@code capabilities}. * @@ -151,6 +164,11 @@ public AndroidDriver( super(service, httpClientFactory, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } + public AndroidDriver( + AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities, boolean directConnect) { + super(service, httpClientFactory, ensurePlatformName(capabilities, ANDROID_PLATFORM), directConnect); + } + /** * Creates a new instance based on Appium service builder and {@code capabilities}. * @@ -161,6 +179,10 @@ public AndroidDriver(AppiumServiceBuilder builder, Capabilities capabilities) { super(builder, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } + public AndroidDriver(AppiumServiceBuilder builder, Capabilities capabilities, boolean directConnect) { + super(builder, ensurePlatformName(capabilities, ANDROID_PLATFORM), directConnect); + } + /** * Creates a new instance based on Appium service builder, HTTP client factory and {@code capabilities}. * @@ -173,6 +195,11 @@ public AndroidDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClient super(builder, httpClientFactory, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } + public AndroidDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, + Capabilities capabilities, boolean directConnect) { + super(builder, httpClientFactory, ensurePlatformName(capabilities, ANDROID_PLATFORM), directConnect); + } + /** * Creates a new instance based on HTTP client factory and {@code capabilities}. * @@ -183,6 +210,10 @@ public AndroidDriver(HttpClient.Factory httpClientFactory, Capabilities capabili super(httpClientFactory, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } + public AndroidDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities, boolean directConnect) { + super(httpClientFactory, ensurePlatformName(capabilities, ANDROID_PLATFORM), directConnect); + } + /** * Creates a new instance based on the given ClientConfig and {@code capabilities}. * The HTTP client is default client generated by {@link HttpCommandExecutor#getDefaultClientFactory}. @@ -206,6 +237,10 @@ public AndroidDriver(ClientConfig clientConfig, Capabilities capabilities) { super(clientConfig, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } + public AndroidDriver(ClientConfig clientConfig, Capabilities capabilities, boolean directConnect) { + super(clientConfig, ensurePlatformName(capabilities, ANDROID_PLATFORM), directConnect); + } + /** * Creates a new instance based on {@code capabilities}. * @@ -215,6 +250,10 @@ public AndroidDriver(Capabilities capabilities) { super(ensurePlatformName(capabilities, ANDROID_PLATFORM)); } + public AndroidDriver(Capabilities capabilities, boolean directConnect) { + super(ensurePlatformName(capabilities, ANDROID_PLATFORM), directConnect); + } + /** * Get test-coverage data. * diff --git a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java index 24a859df0..51114bcae 100644 --- a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java +++ b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java @@ -61,6 +61,7 @@ public class AppiumCommandExecutor extends HttpCommandExecutor { private final Optional serviceOptional; + // To enable https://appiumpro.com/editions/86-connecting-directly-to-appium-hosts-in-distributed-environments private final boolean directConnect; private AppiumCommandExecutor(Map additionalCommands, DriverService service, @@ -79,7 +80,7 @@ private AppiumCommandExecutor(Map additionalCommands, Drive ofNullable(httpClientFactory).orElseGet(HttpCommandExecutor::getDefaultClientFactory) ); serviceOptional = ofNullable(service); - directConnect = directConnect; + this.directConnect = directConnect; } public AppiumCommandExecutor(Map additionalCommands, DriverService service, @@ -87,49 +88,25 @@ public AppiumCommandExecutor(Map additionalCommands, Driver this(additionalCommands, checkNotNull(service), null, httpClientFactory, null, directConnect); } - public AppiumCommandExecutor(Map additionalCommands, DriverService service, - HttpClient.Factory httpClientFactory) { - this(additionalCommands, checkNotNull(service), null, httpClientFactory, null, false); - } - public AppiumCommandExecutor(Map additionalCommands, URL addressOfRemoteServer, HttpClient.Factory httpClientFactory, boolean directConnect) { this(additionalCommands, null, checkNotNull(addressOfRemoteServer), httpClientFactory, null, directConnect); } - public AppiumCommandExecutor(Map additionalCommands, - URL addressOfRemoteServer, HttpClient.Factory httpClientFactory) { - this(additionalCommands, null, checkNotNull(addressOfRemoteServer), httpClientFactory, null, false); - } - public AppiumCommandExecutor(Map additionalCommands, ClientConfig clientConfig, boolean directConnect) { this(additionalCommands, null, checkNotNull(clientConfig.baseUrl()), null, clientConfig, directConnect); } - public AppiumCommandExecutor(Map additionalCommands, ClientConfig clientConfig) { - this(additionalCommands, null, checkNotNull(clientConfig.baseUrl()), null, clientConfig, false); - } - public AppiumCommandExecutor(Map additionalCommands, URL addressOfRemoteServer, boolean directConnect) { this(additionalCommands, addressOfRemoteServer, HttpClient.Factory.createDefault(), directConnect); } - public AppiumCommandExecutor(Map additionalCommands, - URL addressOfRemoteServer) { - this(additionalCommands, addressOfRemoteServer, HttpClient.Factory.createDefault(), false); - } - public AppiumCommandExecutor(Map additionalCommands, DriverService service, boolean directConnect) { this(additionalCommands, service, HttpClient.Factory.createDefault(), directConnect); } - public AppiumCommandExecutor(Map additionalCommands, - DriverService service) { - this(additionalCommands, service, HttpClient.Factory.createDefault(), false); - } - @SuppressWarnings("SameParameterValue") protected B getPrivateFieldValue( Class cls, String fieldName, Class fieldType) { From 5c3f95031ac57c3e1f026478e40f7e1ffb925864 Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Wed, 24 Aug 2022 22:07:41 -0700 Subject: [PATCH 04/66] add config --- .../java_client/AppiumClientConfig.java | 37 +++++ .../io/appium/java_client/AppiumDriver.java | 46 +++---- .../java_client/android/AndroidDriver.java | 129 +++++++++++++----- .../remote/AppiumCommandExecutor.java | 53 +++++-- 4 files changed, 196 insertions(+), 69 deletions(-) create mode 100644 src/main/java/io/appium/java_client/AppiumClientConfig.java diff --git a/src/main/java/io/appium/java_client/AppiumClientConfig.java b/src/main/java/io/appium/java_client/AppiumClientConfig.java new file mode 100644 index 000000000..6efe854cf --- /dev/null +++ b/src/main/java/io/appium/java_client/AppiumClientConfig.java @@ -0,0 +1,37 @@ +package io.appium.java_client; + +/** + * Manage Appium Client options. + */ + +public class AppiumClientConfig { + private boolean directConnect = false; + + public AppiumClientConfig() {} + + /** + * @return the instance of AppiumClientConfig. + */ + public static AppiumClientConfig defaultConfig() { + return new AppiumClientConfig(); + } + + /** + * Whether enable directConnect feature described in + * https://appiumpro.com/editions/86-connecting-directly-to-appium-hosts-in-distributed-environments + * + * @param directConnect if enable the directConnect feature + * @return A self reference + */ + public AppiumClientConfig directConnect(boolean directConnect) { + this.directConnect = directConnect; + return this; + } + + /** + * Whether enable directConnect feature is enabled. + * + * @return If the directConnect is enabled.Defaults false. + */ + public boolean isDirectConnectEnabled() { return this.directConnect; } +} diff --git a/src/main/java/io/appium/java_client/AppiumDriver.java b/src/main/java/io/appium/java_client/AppiumDriver.java index 0b5760823..8e43a9883 100644 --- a/src/main/java/io/appium/java_client/AppiumDriver.java +++ b/src/main/java/io/appium/java_client/AppiumDriver.java @@ -85,52 +85,52 @@ public AppiumDriver(HttpCommandExecutor executor, Capabilities capabilities) { } public AppiumDriver(ClientConfig clientConfig, Capabilities capabilities) { - this(new AppiumCommandExecutor(MobileCommand.commandRepository, clientConfig, false), capabilities); + this(new AppiumCommandExecutor(MobileCommand.commandRepository, clientConfig), capabilities); } - public AppiumDriver(ClientConfig clientConfig, Capabilities capabilities, boolean directConnect) { - this(new AppiumCommandExecutor(MobileCommand.commandRepository, clientConfig, directConnect), capabilities); + public AppiumDriver(ClientConfig clientConfig, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + this(new AppiumCommandExecutor(MobileCommand.commandRepository, clientConfig, appiumClientConfig), capabilities); } public AppiumDriver(URL remoteAddress, Capabilities capabilities) { - this(new AppiumCommandExecutor(MobileCommand.commandRepository, remoteAddress, false), + this(new AppiumCommandExecutor(MobileCommand.commandRepository, remoteAddress), capabilities); } - public AppiumDriver(URL remoteAddress, Capabilities capabilities, boolean directConnect) { - this(new AppiumCommandExecutor(MobileCommand.commandRepository, remoteAddress, directConnect), + public AppiumDriver(URL remoteAddress, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + this(new AppiumCommandExecutor(MobileCommand.commandRepository, remoteAddress, appiumClientConfig), capabilities); } public AppiumDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities) { this(new AppiumCommandExecutor(MobileCommand.commandRepository, remoteAddress, - httpClientFactory, false), capabilities); + httpClientFactory), capabilities); } public AppiumDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, - Capabilities capabilities, boolean directConnect) { + Capabilities capabilities, AppiumClientConfig appiumClientConfig) { this(new AppiumCommandExecutor(MobileCommand.commandRepository, remoteAddress, - httpClientFactory, directConnect), capabilities); + httpClientFactory, appiumClientConfig), capabilities); } public AppiumDriver(AppiumDriverLocalService service, Capabilities capabilities) { - this(new AppiumCommandExecutor(MobileCommand.commandRepository, service, false), + this(new AppiumCommandExecutor(MobileCommand.commandRepository, service), capabilities); } - public AppiumDriver(AppiumDriverLocalService service, Capabilities capabilities, boolean directConnect) { - this(new AppiumCommandExecutor(MobileCommand.commandRepository, service, directConnect), + public AppiumDriver(AppiumDriverLocalService service, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + this(new AppiumCommandExecutor(MobileCommand.commandRepository, service, appiumClientConfig), capabilities); } public AppiumDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - this(new AppiumCommandExecutor(MobileCommand.commandRepository, service, httpClientFactory, false), + this(new AppiumCommandExecutor(MobileCommand.commandRepository, service, httpClientFactory), capabilities); } public AppiumDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, - Capabilities capabilities, boolean directConnect) { - this(new AppiumCommandExecutor(MobileCommand.commandRepository, service, httpClientFactory, directConnect), + Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + this(new AppiumCommandExecutor(MobileCommand.commandRepository, service, httpClientFactory, appiumClientConfig), capabilities); } @@ -138,8 +138,8 @@ public AppiumDriver(AppiumServiceBuilder builder, Capabilities capabilities) { this(builder.build(), capabilities); } - public AppiumDriver(AppiumServiceBuilder builder, Capabilities capabilities, boolean directConnect) { - this(builder.build(), capabilities, directConnect); + public AppiumDriver(AppiumServiceBuilder builder, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + this(builder.build(), capabilities, appiumClientConfig); } public AppiumDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, @@ -148,8 +148,8 @@ public AppiumDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientF } public AppiumDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, - Capabilities capabilities, boolean directConnect) { - this(builder.build(), httpClientFactory, capabilities, directConnect); + Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + this(builder.build(), httpClientFactory, capabilities, appiumClientConfig); } public AppiumDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities) { @@ -157,17 +157,17 @@ public AppiumDriver(HttpClient.Factory httpClientFactory, Capabilities capabilit capabilities); } - public AppiumDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities, boolean directConnect) { + public AppiumDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { this(AppiumDriverLocalService.buildDefaultService(), httpClientFactory, - capabilities, directConnect); + capabilities, appiumClientConfig); } public AppiumDriver(Capabilities capabilities) { this(AppiumDriverLocalService.buildDefaultService(), capabilities); } - public AppiumDriver(Capabilities capabilities, boolean directConnect) { - this(AppiumDriverLocalService.buildDefaultService(), capabilities, directConnect); + public AppiumDriver(Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + this(AppiumDriverLocalService.buildDefaultService(), capabilities, appiumClientConfig); } /** diff --git a/src/main/java/io/appium/java_client/android/AndroidDriver.java b/src/main/java/io/appium/java_client/android/AndroidDriver.java index 844f71249..9fcbc2adc 100644 --- a/src/main/java/io/appium/java_client/android/AndroidDriver.java +++ b/src/main/java/io/appium/java_client/android/AndroidDriver.java @@ -23,19 +23,7 @@ import com.google.common.collect.ImmutableMap; -import io.appium.java_client.AppiumDriver; -import io.appium.java_client.CommandExecutionHelper; -import io.appium.java_client.ExecuteCDPCommand; -import io.appium.java_client.HasAppStrings; -import io.appium.java_client.HasDeviceTime; -import io.appium.java_client.HasOnScreenKeyboard; -import io.appium.java_client.HidesKeyboard; -import io.appium.java_client.InteractsWithApps; -import io.appium.java_client.PullsFiles; -import io.appium.java_client.LocksDevice; -import io.appium.java_client.PerformsTouchActions; -import io.appium.java_client.PushesFiles; -import io.appium.java_client.SupportsLegacyAppManagement; +import io.appium.java_client.*; import io.appium.java_client.android.connection.HasNetworkConnection; import io.appium.java_client.android.geolocation.SupportsExtendedGeolocationCommands; import io.appium.java_client.android.nativekey.PressesKey; @@ -117,8 +105,15 @@ public AndroidDriver(URL remoteAddress, Capabilities capabilities) { super(remoteAddress, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } - public AndroidDriver(URL remoteAddress, Capabilities capabilities, boolean directConnect) { - super(remoteAddress, ensurePlatformName(capabilities, ANDROID_PLATFORM), directConnect); + /** + * Creates a new instance based on Appium server URL and {@code capabilities}. + * + * @param remoteAddress is the address of remotely/locally started Appium server + * @param capabilities take a look at {@link Capabilities} + * @param appiumClientConfig take a look at {@link AppiumClientConfig} + */ + public AndroidDriver(URL remoteAddress, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(remoteAddress, ensurePlatformName(capabilities, ANDROID_PLATFORM), appiumClientConfig); } /** @@ -133,9 +128,17 @@ public AndroidDriver( super(remoteAddress, httpClientFactory, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } + /** + * Creates a new instance based on Appium server URL, HTTP client factory and {@code capabilities}. + * + * @param remoteAddress is the address of remotely/locally started Appium server + * @param httpClientFactory take a look at {@link HttpClient.Factory} + * @param capabilities take a look at {@link Capabilities} + * @param appiumClientConfig take a look at {@link AppiumClientConfig} + */ public AndroidDriver( - URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities, boolean directConnect) { - super(remoteAddress, httpClientFactory, ensurePlatformName(capabilities, ANDROID_PLATFORM), directConnect); + URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(remoteAddress, httpClientFactory, ensurePlatformName(capabilities, ANDROID_PLATFORM), appiumClientConfig); } /** @@ -148,8 +151,15 @@ public AndroidDriver(AppiumDriverLocalService service, Capabilities capabilities super(service, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } - public AndroidDriver(AppiumDriverLocalService service, Capabilities capabilities, boolean directConnect) { - super(service, ensurePlatformName(capabilities, ANDROID_PLATFORM), directConnect); + /** + * Creates a new instance based on Appium driver local service and {@code capabilities}. + * + * @param service take a look at {@link AppiumDriverLocalService} + * @param capabilities take a look at {@link Capabilities} + * @param appiumClientConfig take a look at {@link AppiumClientConfig} + */ + public AndroidDriver(AppiumDriverLocalService service, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(service, ensurePlatformName(capabilities, ANDROID_PLATFORM), appiumClientConfig); } /** @@ -164,9 +174,17 @@ public AndroidDriver( super(service, httpClientFactory, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } + /** + * Creates a new instance based on Appium driver local service, HTTP client factory and {@code capabilities}. + * + * @param service take a look at {@link AppiumDriverLocalService} + * @param httpClientFactory take a look at {@link HttpClient.Factory} + * @param capabilities take a look at {@link Capabilities} + * @param appiumClientConfig take a look at {@link AppiumClientConfig} + */ public AndroidDriver( - AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities, boolean directConnect) { - super(service, httpClientFactory, ensurePlatformName(capabilities, ANDROID_PLATFORM), directConnect); + AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(service, httpClientFactory, ensurePlatformName(capabilities, ANDROID_PLATFORM), appiumClientConfig); } /** @@ -179,8 +197,15 @@ public AndroidDriver(AppiumServiceBuilder builder, Capabilities capabilities) { super(builder, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } - public AndroidDriver(AppiumServiceBuilder builder, Capabilities capabilities, boolean directConnect) { - super(builder, ensurePlatformName(capabilities, ANDROID_PLATFORM), directConnect); + /** + * Creates a new instance based on Appium service builder and {@code capabilities}. + * + * @param builder take a look at {@link AppiumServiceBuilder} + * @param capabilities take a look at {@link Capabilities} + * @param appiumClientConfig take a look at {@link AppiumClientConfig} + */ + public AndroidDriver(AppiumServiceBuilder builder, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(builder, ensurePlatformName(capabilities, ANDROID_PLATFORM), appiumClientConfig); } /** @@ -195,9 +220,17 @@ public AndroidDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClient super(builder, httpClientFactory, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } + /** + * Creates a new instance based on Appium service builder, HTTP client factory and {@code capabilities}. + * + * @param builder take a look at {@link AppiumServiceBuilder} + * @param httpClientFactory take a look at {@link HttpClient.Factory} + * @param capabilities take a look at {@link Capabilities} + * @param appiumClientConfig take a look at {@link AppiumClientConfig} + */ public AndroidDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, - Capabilities capabilities, boolean directConnect) { - super(builder, httpClientFactory, ensurePlatformName(capabilities, ANDROID_PLATFORM), directConnect); + Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(builder, httpClientFactory, ensurePlatformName(capabilities, ANDROID_PLATFORM), appiumClientConfig); } /** @@ -210,8 +243,15 @@ public AndroidDriver(HttpClient.Factory httpClientFactory, Capabilities capabili super(httpClientFactory, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } - public AndroidDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities, boolean directConnect) { - super(httpClientFactory, ensurePlatformName(capabilities, ANDROID_PLATFORM), directConnect); + /** + * Creates a new instance based on HTTP client factory and {@code capabilities}. + * + * @param httpClientFactory take a look at {@link HttpClient.Factory} + * @param capabilities take a look at {@link Capabilities} + * @param appiumClientConfig take a look at {@link AppiumClientConfig} + */ + public AndroidDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(httpClientFactory, ensurePlatformName(capabilities, ANDROID_PLATFORM), appiumClientConfig); } /** @@ -237,8 +277,29 @@ public AndroidDriver(ClientConfig clientConfig, Capabilities capabilities) { super(clientConfig, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } - public AndroidDriver(ClientConfig clientConfig, Capabilities capabilities, boolean directConnect) { - super(clientConfig, ensurePlatformName(capabilities, ANDROID_PLATFORM), directConnect); + /** + * Creates a new instance based on the given ClientConfig and {@code capabilities}. + * The HTTP client is default client generated by {@link HttpCommandExecutor#getDefaultClientFactory}. + * For example: + * + *
+     *
+     * ClientConfig clientConfig = ClientConfig.defaultConfig()
+     *     .baseUri(URI.create("WebDriver URL"))
+     *     .readTimeout(Duration.ofMinutes(5));
+     * AppiumClientConfig appiumClientConfig = AppiumClientConfig.defaultConfig().directConnect(true);
+     * UiAutomator2Options options = new UiAutomator2Options();
+     * AndroidDriver driver = new AndroidDriver(clientConfig, options);
+     *
+     * 
+ * + * @param clientConfig take a look at {@link ClientConfig} + * @param capabilities take a look at {@link Capabilities} + * @param appiumClientConfig take a look at {@link AppiumClientConfig} + * + */ + public AndroidDriver(ClientConfig clientConfig, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(clientConfig, ensurePlatformName(capabilities, ANDROID_PLATFORM), appiumClientConfig); } /** @@ -250,8 +311,14 @@ public AndroidDriver(Capabilities capabilities) { super(ensurePlatformName(capabilities, ANDROID_PLATFORM)); } - public AndroidDriver(Capabilities capabilities, boolean directConnect) { - super(ensurePlatformName(capabilities, ANDROID_PLATFORM), directConnect); + /** + * Creates a new instance based on {@code capabilities}. + * + * @param capabilities take a look at {@link Capabilities} + * @param appiumClientConfig take a look at {@link AppiumClientConfig} + */ + public AndroidDriver(Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(ensurePlatformName(capabilities, ANDROID_PLATFORM), appiumClientConfig); } /** diff --git a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java index 51114bcae..683fe5847 100644 --- a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java +++ b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java @@ -24,6 +24,7 @@ import com.google.common.base.Supplier; import com.google.common.base.Throwables; +import io.appium.java_client.AppiumClientConfig; import org.openqa.selenium.SessionNotCreatedException; import org.openqa.selenium.WebDriverException; import org.openqa.selenium.internal.Require; @@ -61,14 +62,13 @@ public class AppiumCommandExecutor extends HttpCommandExecutor { private final Optional serviceOptional; - // To enable https://appiumpro.com/editions/86-connecting-directly-to-appium-hosts-in-distributed-environments - private final boolean directConnect; + private final AppiumClientConfig appiumClientConfig; private AppiumCommandExecutor(Map additionalCommands, DriverService service, URL addressOfRemoteServer, HttpClient.Factory httpClientFactory, ClientConfig clientConfig, - boolean directConnect) { + AppiumClientConfig appiumClientConfig) { super(additionalCommands, ofNullable(clientConfig).orElse( ClientConfig.defaultConfig() @@ -80,31 +80,54 @@ private AppiumCommandExecutor(Map additionalCommands, Drive ofNullable(httpClientFactory).orElseGet(HttpCommandExecutor::getDefaultClientFactory) ); serviceOptional = ofNullable(service); - this.directConnect = directConnect; + this.appiumClientConfig = appiumClientConfig; } public AppiumCommandExecutor(Map additionalCommands, DriverService service, - HttpClient.Factory httpClientFactory, boolean directConnect) { - this(additionalCommands, checkNotNull(service), null, httpClientFactory, null, directConnect); + HttpClient.Factory httpClientFactory) { + this(additionalCommands, checkNotNull(service), null, httpClientFactory, null, AppiumClientConfig.defaultConfig()); + } + + public AppiumCommandExecutor(Map additionalCommands, DriverService service, + HttpClient.Factory httpClientFactory, AppiumClientConfig appiumClientConfig) { + this(additionalCommands, checkNotNull(service), null, httpClientFactory, null, appiumClientConfig); } public AppiumCommandExecutor(Map additionalCommands, - URL addressOfRemoteServer, HttpClient.Factory httpClientFactory, boolean directConnect) { - this(additionalCommands, null, checkNotNull(addressOfRemoteServer), httpClientFactory, null, directConnect); + URL addressOfRemoteServer, HttpClient.Factory httpClientFactory) { + this(additionalCommands, null, checkNotNull(addressOfRemoteServer), httpClientFactory, null, AppiumClientConfig.defaultConfig()); + } + public AppiumCommandExecutor(Map additionalCommands, + URL addressOfRemoteServer, HttpClient.Factory httpClientFactory, AppiumClientConfig appiumClientConfig) { + this(additionalCommands, null, checkNotNull(addressOfRemoteServer), httpClientFactory, null, appiumClientConfig); + } + + public AppiumCommandExecutor(Map additionalCommands, ClientConfig clientConfig) { + this(additionalCommands, null, checkNotNull(clientConfig.baseUrl()), null, clientConfig, AppiumClientConfig.defaultConfig()); } - public AppiumCommandExecutor(Map additionalCommands, ClientConfig clientConfig, boolean directConnect) { - this(additionalCommands, null, checkNotNull(clientConfig.baseUrl()), null, clientConfig, directConnect); + public AppiumCommandExecutor(Map additionalCommands, ClientConfig clientConfig, AppiumClientConfig appiumClientConfig) { + this(additionalCommands, null, checkNotNull(clientConfig.baseUrl()), null, clientConfig, appiumClientConfig); + } + + public AppiumCommandExecutor(Map additionalCommands, + URL addressOfRemoteServer) { + this(additionalCommands, addressOfRemoteServer, HttpClient.Factory.createDefault(), AppiumClientConfig.defaultConfig()); + } + + public AppiumCommandExecutor(Map additionalCommands, + URL addressOfRemoteServer, AppiumClientConfig appiumClientConfig) { + this(additionalCommands, addressOfRemoteServer, HttpClient.Factory.createDefault(), appiumClientConfig); } public AppiumCommandExecutor(Map additionalCommands, - URL addressOfRemoteServer, boolean directConnect) { - this(additionalCommands, addressOfRemoteServer, HttpClient.Factory.createDefault(), directConnect); + DriverService service) { + this(additionalCommands, service, HttpClient.Factory.createDefault(), AppiumClientConfig.defaultConfig()); } public AppiumCommandExecutor(Map additionalCommands, - DriverService service, boolean directConnect) { - this(additionalCommands, service, HttpClient.Factory.createDefault(), directConnect); + DriverService service, AppiumClientConfig appiumClientConfig) { + this(additionalCommands, service, HttpClient.Factory.createDefault(), appiumClientConfig); } @SuppressWarnings("SameParameterValue") @@ -191,7 +214,7 @@ public void refreshAdditionalCommands() { @SuppressWarnings("unchecked") private void setDirectConnect(Response response) throws MalformedURLException { - if (!this.directConnect) { + if (!this.appiumClientConfig.isDirectConnectEnabled()) { return; } From a5c3baade668a4d7882278b4005678abe651688e Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Wed, 24 Aug 2022 22:16:43 -0700 Subject: [PATCH 05/66] add for ios --- .../io/appium/java_client/ios/IOSDriver.java | 132 ++++++++++++++++-- 1 file changed, 120 insertions(+), 12 deletions(-) diff --git a/src/main/java/io/appium/java_client/ios/IOSDriver.java b/src/main/java/io/appium/java_client/ios/IOSDriver.java index 18ecf3065..de934d57e 100644 --- a/src/main/java/io/appium/java_client/ios/IOSDriver.java +++ b/src/main/java/io/appium/java_client/ios/IOSDriver.java @@ -21,18 +21,7 @@ import com.google.common.collect.ImmutableMap; -import io.appium.java_client.AppiumDriver; -import io.appium.java_client.HasAppStrings; -import io.appium.java_client.HasDeviceTime; -import io.appium.java_client.HasOnScreenKeyboard; -import io.appium.java_client.HidesKeyboard; -import io.appium.java_client.HidesKeyboardWithKeyName; -import io.appium.java_client.InteractsWithApps; -import io.appium.java_client.PullsFiles; -import io.appium.java_client.LocksDevice; -import io.appium.java_client.PerformsTouchActions; -import io.appium.java_client.PushesFiles; -import io.appium.java_client.SupportsLegacyAppManagement; +import io.appium.java_client.*; import io.appium.java_client.battery.HasBattery; import io.appium.java_client.remote.SupportsContextSwitching; import io.appium.java_client.remote.SupportsLocation; @@ -106,6 +95,17 @@ public IOSDriver(URL remoteAddress, Capabilities capabilities) { super(remoteAddress, ensurePlatformName(capabilities, PLATFORM_NAME)); } + /** + * Creates a new instance based on Appium server URL and {@code capabilities}. + * + * @param remoteAddress is the address of remotely/locally started Appium server + * @param capabilities take a look at {@link Capabilities} + * @param appiumClientConfig take a look at {@link AppiumClientConfig} + */ + public IOSDriver(URL remoteAddress, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(remoteAddress, ensurePlatformName(capabilities, PLATFORM_NAME), appiumClientConfig); + } + /** * Creates a new instance based on Appium server URL, HTTP client factory and {@code capabilities}. * @@ -118,6 +118,19 @@ public IOSDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, super(remoteAddress, httpClientFactory, ensurePlatformName(capabilities, PLATFORM_NAME)); } + /** + * Creates a new instance based on Appium server URL, HTTP client factory and {@code capabilities}. + * + * @param remoteAddress is the address of remotely/locally started Appium server + * @param httpClientFactory take a look at {@link HttpClient.Factory} + * @param capabilities take a look at {@link Capabilities} + * @param appiumClientConfig take a look at {@link AppiumClientConfig} + */ + public IOSDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, + Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(remoteAddress, httpClientFactory, ensurePlatformName(capabilities, PLATFORM_NAME), appiumClientConfig); + } + /** * Creates a new instance based on Appium driver local service and {@code capabilities}. * @@ -128,6 +141,17 @@ public IOSDriver(AppiumDriverLocalService service, Capabilities capabilities) { super(service, ensurePlatformName(capabilities, PLATFORM_NAME)); } + /** + * Creates a new instance based on Appium driver local service and {@code capabilities}. + * + * @param service take a look at {@link AppiumDriverLocalService} + * @param capabilities take a look at {@link Capabilities} + * @param appiumClientConfig take a look at {@link AppiumClientConfig} + */ + public IOSDriver(AppiumDriverLocalService service, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(service, ensurePlatformName(capabilities, PLATFORM_NAME), appiumClientConfig); + } + /** * Creates a new instance based on Appium driver local service, HTTP client factory and {@code capabilities}. * @@ -140,6 +164,19 @@ public IOSDriver(AppiumDriverLocalService service, HttpClient.Factory httpClient super(service, httpClientFactory, ensurePlatformName(capabilities, PLATFORM_NAME)); } + /** + * Creates a new instance based on Appium driver local service, HTTP client factory and {@code capabilities}. + * + * @param service take a look at {@link AppiumDriverLocalService} + * @param httpClientFactory take a look at {@link HttpClient.Factory} + * @param capabilities take a look at {@link Capabilities} + * @param appiumClientConfig take a look at {@link AppiumClientConfig} + */ + public IOSDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, + Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(service, httpClientFactory, ensurePlatformName(capabilities, PLATFORM_NAME), appiumClientConfig); + } + /** * Creates a new instance based on Appium service builder and {@code capabilities}. * @@ -150,6 +187,17 @@ public IOSDriver(AppiumServiceBuilder builder, Capabilities capabilities) { super(builder, ensurePlatformName(capabilities, PLATFORM_NAME)); } + /** + * Creates a new instance based on Appium service builder and {@code capabilities}. + * + * @param builder take a look at {@link AppiumServiceBuilder} + * @param capabilities take a look at {@link Capabilities} + * @param appiumClientConfig take a look at {@link AppiumClientConfig} + */ + public IOSDriver(AppiumServiceBuilder builder, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(builder, ensurePlatformName(capabilities, PLATFORM_NAME), appiumClientConfig); + } + /** * Creates a new instance based on Appium service builder, HTTP client factory and {@code capabilities}. * @@ -162,6 +210,19 @@ public IOSDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFact super(builder, httpClientFactory, ensurePlatformName(capabilities, PLATFORM_NAME)); } + /** + * Creates a new instance based on Appium service builder, HTTP client factory and {@code capabilities}. + * + * @param builder take a look at {@link AppiumServiceBuilder} + * @param httpClientFactory take a look at {@link HttpClient.Factory} + * @param capabilities take a look at {@link Capabilities} + * @param appiumClientConfig take a look at {@link AppiumClientConfig} + */ + public IOSDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, + Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(builder, httpClientFactory, ensurePlatformName(capabilities, PLATFORM_NAME), appiumClientConfig); + } + /** * Creates a new instance based on HTTP client factory and {@code capabilities}. * @@ -172,6 +233,17 @@ public IOSDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities super(httpClientFactory, ensurePlatformName(capabilities, PLATFORM_NAME)); } + /** + * Creates a new instance based on HTTP client factory and {@code capabilities}. + * + * @param httpClientFactory take a look at {@link HttpClient.Factory} + * @param capabilities take a look at {@link Capabilities} + * @param appiumClientConfig take a look at {@link AppiumClientConfig} + */ + public IOSDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(httpClientFactory, ensurePlatformName(capabilities, PLATFORM_NAME), appiumClientConfig); + } + /** * Creates a new instance based on the given ClientConfig and {@code capabilities}. * The HTTP client is default client generated by {@link HttpCommandExecutor#getDefaultClientFactory}. @@ -195,6 +267,32 @@ public IOSDriver(ClientConfig clientConfig, Capabilities capabilities) { super(clientConfig, ensurePlatformName(capabilities, PLATFORM_NAME)); } + + /** + * Creates a new instance based on the given ClientConfig and {@code capabilities}. + * The HTTP client is default client generated by {@link HttpCommandExecutor#getDefaultClientFactory}. + * For example: + * + *
+     *
+     * ClientConfig clientConfig = ClientConfig.defaultConfig()
+     *     .baseUri(URI.create("WebDriver URL"))
+     *     .readTimeout(Duration.ofMinutes(5));
+     * AppiumClientConfig appiumClientConfig = AppiumClientConfig.defaultConfig().directConnect(true)
+     * XCUITestOptions options = new XCUITestOptions();
+     * IOSDriver driver = new IOSDriver(clientConfig, options, appiumClientConfig);
+     *
+     * 
+ * + * @param clientConfig take a look at {@link ClientConfig} + * @param capabilities take a look at {@link Capabilities} + * @param appiumClientConfig take a look at {@link AppiumClientConfig} + * + */ + public IOSDriver(ClientConfig clientConfig, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(clientConfig, ensurePlatformName(capabilities, PLATFORM_NAME), appiumClientConfig); + } + /** * Creates a new instance based on {@code capabilities}. * @@ -204,6 +302,16 @@ public IOSDriver(Capabilities capabilities) { super(ensurePlatformName(capabilities, PLATFORM_NAME)); } + /** + * Creates a new instance based on {@code capabilities}. + * + * @param capabilities take a look at {@link Capabilities} + * @param appiumClientConfig take a look at {@link AppiumClientConfig} + */ + public IOSDriver(Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(ensurePlatformName(capabilities, PLATFORM_NAME), appiumClientConfig); + } + @Override public TargetLocator switchTo() { return new InnerTargetLocator(); } From 48b42e81d6a1273a7c4f6e1816c30ec8e3cc7e3e Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Wed, 24 Aug 2022 22:29:17 -0700 Subject: [PATCH 06/66] add config to other drivers --- .../appium/java_client/gecko/GeckoDriver.java | 61 ++++++++++++++++ .../io/appium/java_client/mac/Mac2Driver.java | 68 ++++++++++++++++++ .../java_client/safari/SafariDriver.java | 48 +++++++++++++ .../java_client/windows/WindowsDriver.java | 71 +++++++++++++++++-- 4 files changed, 243 insertions(+), 5 deletions(-) diff --git a/src/main/java/io/appium/java_client/gecko/GeckoDriver.java b/src/main/java/io/appium/java_client/gecko/GeckoDriver.java index 43d2072c8..0b31a0fc7 100644 --- a/src/main/java/io/appium/java_client/gecko/GeckoDriver.java +++ b/src/main/java/io/appium/java_client/gecko/GeckoDriver.java @@ -16,6 +16,7 @@ package io.appium.java_client.gecko; +import io.appium.java_client.AppiumClientConfig; import io.appium.java_client.AppiumDriver; import io.appium.java_client.remote.AutomationName; import io.appium.java_client.service.local.AppiumDriverLocalService; @@ -48,32 +49,63 @@ public GeckoDriver(URL remoteAddress, Capabilities capabilities) { super(remoteAddress, ensureAutomationName(capabilities, AUTOMATION_NAME)); } + public GeckoDriver(URL remoteAddress, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(remoteAddress, ensureAutomationName(capabilities, AUTOMATION_NAME), appiumClientConfig); + } + public GeckoDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities) { super(remoteAddress, httpClientFactory, ensureAutomationName(capabilities, AUTOMATION_NAME)); } + public GeckoDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, + Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(remoteAddress, httpClientFactory, ensureAutomationName(capabilities, AUTOMATION_NAME), appiumClientConfig); + } + public GeckoDriver(AppiumDriverLocalService service, Capabilities capabilities) { super(service, ensureAutomationName(capabilities, AUTOMATION_NAME)); } + public GeckoDriver(AppiumDriverLocalService service, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(service, ensureAutomationName(capabilities, AUTOMATION_NAME), appiumClientConfig); + } + public GeckoDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities) { super(service, httpClientFactory, ensureAutomationName(capabilities, AUTOMATION_NAME)); } + public GeckoDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, + Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(service, httpClientFactory, ensureAutomationName(capabilities, AUTOMATION_NAME), appiumClientConfig); + } + public GeckoDriver(AppiumServiceBuilder builder, Capabilities capabilities) { super(builder, ensureAutomationName(capabilities, AUTOMATION_NAME)); } + public GeckoDriver(AppiumServiceBuilder builder, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(builder, ensureAutomationName(capabilities, AUTOMATION_NAME), appiumClientConfig); + } + public GeckoDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities) { super(builder, httpClientFactory, ensureAutomationName(capabilities, AUTOMATION_NAME)); } + public GeckoDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, + Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(builder, httpClientFactory, ensureAutomationName(capabilities, AUTOMATION_NAME), appiumClientConfig); + } + public GeckoDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities) { super(httpClientFactory, ensureAutomationName(capabilities, AUTOMATION_NAME)); } + public GeckoDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(httpClientFactory, ensureAutomationName(capabilities, AUTOMATION_NAME), appiumClientConfig); + } + /** * Creates a new instance based on the given ClientConfig and {@code capabilities}. * The HTTP client is default client generated by {@link HttpCommandExecutor#getDefaultClientFactory}. @@ -97,7 +129,36 @@ public GeckoDriver(ClientConfig clientConfig, Capabilities capabilities) { super(clientConfig, ensureAutomationName(capabilities, AUTOMATION_NAME)); } + /** + * Creates a new instance based on the given ClientConfig and {@code capabilities}. + * The HTTP client is default client generated by {@link HttpCommandExecutor#getDefaultClientFactory}. + * For example: + * + *
+     *
+     * ClientConfig clientConfig = ClientConfig.defaultConfig()
+     *     .baseUri(URI.create("WebDriver URL"))
+     *     .readTimeout(Duration.ofMinutes(5));
+     * AppiumClientConfig appiumClientConfig = AppiumClientConfig.defaultConfig().directConnect(false);
+     * GeckoOptions options = new GeckoOptions();
+     * GeckoDriver driver = new GeckoDriver(clientConfig, options, appiumClientConfig);
+     *
+     * 
+ * + * @param clientConfig take a look at {@link ClientConfig} + * @param capabilities take a look at {@link Capabilities} + * @param appiumClientConfig take a look at {@link AppiumClientConfig} + * + */ + public GeckoDriver(ClientConfig clientConfig, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(clientConfig, ensureAutomationName(capabilities, AUTOMATION_NAME), appiumClientConfig); + } + public GeckoDriver(Capabilities capabilities) { super(ensureAutomationName(capabilities, AUTOMATION_NAME)); } + + public GeckoDriver(Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(ensureAutomationName(capabilities, AUTOMATION_NAME), appiumClientConfig); + } } diff --git a/src/main/java/io/appium/java_client/mac/Mac2Driver.java b/src/main/java/io/appium/java_client/mac/Mac2Driver.java index b76de5943..bdfee74f6 100644 --- a/src/main/java/io/appium/java_client/mac/Mac2Driver.java +++ b/src/main/java/io/appium/java_client/mac/Mac2Driver.java @@ -16,6 +16,7 @@ package io.appium.java_client.mac; +import io.appium.java_client.AppiumClientConfig; import io.appium.java_client.AppiumDriver; import io.appium.java_client.PerformsTouchActions; import io.appium.java_client.remote.AutomationName; @@ -54,37 +55,74 @@ public Mac2Driver(URL remoteAddress, Capabilities capabilities) { capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } + public Mac2Driver(URL remoteAddress, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(remoteAddress, ensurePlatformAndAutomationNames( + capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + } + public Mac2Driver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities) { super(remoteAddress, httpClientFactory, ensurePlatformAndAutomationNames( capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } + public Mac2Driver(URL remoteAddress, HttpClient.Factory httpClientFactory, + Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(remoteAddress, httpClientFactory, ensurePlatformAndAutomationNames( + capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + } + public Mac2Driver(AppiumDriverLocalService service, Capabilities capabilities) { super(service, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } + public Mac2Driver(AppiumDriverLocalService service, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(service, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + } + public Mac2Driver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities) { super(service, httpClientFactory, ensurePlatformAndAutomationNames( capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } + public Mac2Driver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, + Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(service, httpClientFactory, ensurePlatformAndAutomationNames( + capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + } + public Mac2Driver(AppiumServiceBuilder builder, Capabilities capabilities) { super(builder, ensurePlatformAndAutomationNames( capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } + public Mac2Driver(AppiumServiceBuilder builder, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(builder, ensurePlatformAndAutomationNames( + capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + } + public Mac2Driver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities) { super(builder, httpClientFactory, ensurePlatformAndAutomationNames( capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } + public Mac2Driver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, + Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(builder, httpClientFactory, ensurePlatformAndAutomationNames( + capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + } + public Mac2Driver(HttpClient.Factory httpClientFactory, Capabilities capabilities) { super(httpClientFactory, ensurePlatformAndAutomationNames( capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } + public Mac2Driver(HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(httpClientFactory, ensurePlatformAndAutomationNames( + capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + } + /** * Creates a new instance based on the given ClientConfig and {@code capabilities}. * The HTTP client is default client generated by {@link HttpCommandExecutor#getDefaultClientFactory}. @@ -109,7 +147,37 @@ public Mac2Driver(ClientConfig clientConfig, Capabilities capabilities) { capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } + /** + * Creates a new instance based on the given ClientConfig and {@code capabilities}. + * The HTTP client is default client generated by {@link HttpCommandExecutor#getDefaultClientFactory}. + * For example: + * + *
+     *
+     * ClientConfig clientConfig = ClientConfig.defaultConfig()
+     *     .baseUri(URI.create("WebDriver URL"))
+     *     .readTimeout(Duration.ofMinutes(5));
+     * AppiumClientConfig appiumClientConfig = AppiumClientConfig.defaultConfig().directConnect(true);
+     * Mac2Options options = new Mac2Options();
+     * Mac2Driver driver = new Mac2Driver(clientConfig, options, appiumClientConfig);
+     *
+     * 
+ * + * @param clientConfig take a look at {@link ClientConfig} + * @param capabilities take a look at {@link Capabilities} + * @param appiumClientConfig take a look at {@link AppiumClientConfig} + * + */ + public Mac2Driver(ClientConfig clientConfig, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(clientConfig, ensurePlatformAndAutomationNames( + capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + } + public Mac2Driver(Capabilities capabilities) { super(ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } + + public Mac2Driver(Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + } } diff --git a/src/main/java/io/appium/java_client/safari/SafariDriver.java b/src/main/java/io/appium/java_client/safari/SafariDriver.java index 0b8a8400d..5318f60bd 100644 --- a/src/main/java/io/appium/java_client/safari/SafariDriver.java +++ b/src/main/java/io/appium/java_client/safari/SafariDriver.java @@ -16,6 +16,7 @@ package io.appium.java_client.safari; +import io.appium.java_client.AppiumClientConfig; import io.appium.java_client.AppiumDriver; import io.appium.java_client.remote.AutomationName; import io.appium.java_client.service.local.AppiumDriverLocalService; @@ -50,38 +51,76 @@ public SafariDriver(URL remoteAddress, Capabilities capabilities) { capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } + public SafariDriver(URL remoteAddress, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(remoteAddress, ensurePlatformAndAutomationNames( + capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + } + public SafariDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities) { super(remoteAddress, httpClientFactory, ensurePlatformAndAutomationNames( capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } + public SafariDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, + Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(remoteAddress, httpClientFactory, ensurePlatformAndAutomationNames( + capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + } + public SafariDriver(AppiumDriverLocalService service, Capabilities capabilities) { super(service, ensurePlatformAndAutomationNames( capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } + public SafariDriver(AppiumDriverLocalService service, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(service, ensurePlatformAndAutomationNames( + capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + } + public SafariDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities) { super(service, httpClientFactory, ensurePlatformAndAutomationNames( capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } + public SafariDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, + Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(service, httpClientFactory, ensurePlatformAndAutomationNames( + capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + } + public SafariDriver(AppiumServiceBuilder builder, Capabilities capabilities) { super(builder, ensurePlatformAndAutomationNames( capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } + public SafariDriver(AppiumServiceBuilder builder, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(builder, ensurePlatformAndAutomationNames( + capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + } + public SafariDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities) { super(builder, httpClientFactory, ensurePlatformAndAutomationNames( capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } + public SafariDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, + Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(builder, httpClientFactory, ensurePlatformAndAutomationNames( + capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + } + public SafariDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities) { super(httpClientFactory, ensurePlatformAndAutomationNames( capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } + public SafariDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(httpClientFactory, ensurePlatformAndAutomationNames( + capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + } + /** * Creates a new instance based on the given ClientConfig and {@code capabilities}. * The HTTP client is default client generated by {@link HttpCommandExecutor#getDefaultClientFactory}. @@ -106,7 +145,16 @@ public SafariDriver(ClientConfig clientConfig, Capabilities capabilities) { capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } + public SafariDriver(ClientConfig clientConfig, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(clientConfig, ensurePlatformAndAutomationNames( + capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + } + public SafariDriver(Capabilities capabilities) { super(ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } + + public SafariDriver(Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + } } diff --git a/src/main/java/io/appium/java_client/windows/WindowsDriver.java b/src/main/java/io/appium/java_client/windows/WindowsDriver.java index 82af6e02d..d4ac72c5b 100644 --- a/src/main/java/io/appium/java_client/windows/WindowsDriver.java +++ b/src/main/java/io/appium/java_client/windows/WindowsDriver.java @@ -16,11 +16,7 @@ package io.appium.java_client.windows; -import io.appium.java_client.AppiumDriver; -import io.appium.java_client.MobileCommand; -import io.appium.java_client.PerformsTouchActions; -import io.appium.java_client.PullsFiles; -import io.appium.java_client.PushesFiles; +import io.appium.java_client.*; import io.appium.java_client.remote.AutomationName; import io.appium.java_client.screenrecording.CanRecordScreen; import io.appium.java_client.service.local.AppiumDriverLocalService; @@ -50,36 +46,72 @@ public WindowsDriver(URL remoteAddress, Capabilities capabilities) { capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } + public WindowsDriver(URL remoteAddress, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(remoteAddress, ensurePlatformAndAutomationNames( + capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + } + public WindowsDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities) { super(remoteAddress, httpClientFactory, ensurePlatformAndAutomationNames( capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } + public WindowsDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, + Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(remoteAddress, httpClientFactory, ensurePlatformAndAutomationNames( + capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + } + public WindowsDriver(AppiumDriverLocalService service, Capabilities capabilities) { super(service, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } + public WindowsDriver(AppiumDriverLocalService service, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(service, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + } + public WindowsDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities) { super(service, httpClientFactory, ensurePlatformAndAutomationNames( capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } + public WindowsDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, + Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(service, httpClientFactory, ensurePlatformAndAutomationNames( + capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + } + public WindowsDriver(AppiumServiceBuilder builder, Capabilities capabilities) { super(builder, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } + public WindowsDriver(AppiumServiceBuilder builder, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(builder, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + } + public WindowsDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities) { super(builder, httpClientFactory, ensurePlatformAndAutomationNames( capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } + public WindowsDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, + Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(builder, httpClientFactory, ensurePlatformAndAutomationNames( + capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + } + public WindowsDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities) { super(httpClientFactory, ensurePlatformAndAutomationNames( capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } + public WindowsDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(httpClientFactory, ensurePlatformAndAutomationNames( + capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + } + /** * Creates a new instance based on the given ClientConfig and {@code capabilities}. * The HTTP client is default client generated by {@link HttpCommandExecutor#getDefaultClientFactory}. @@ -104,10 +136,39 @@ public WindowsDriver(ClientConfig clientConfig, Capabilities capabilities) { capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } + /** + * Creates a new instance based on the given ClientConfig and {@code capabilities}. + * The HTTP client is default client generated by {@link HttpCommandExecutor#getDefaultClientFactory}. + * For example: + * + *
+     *
+     * ClientConfig clientConfig = ClientConfig.defaultConfig()
+     *     .baseUri(URI.create("WebDriver URL"))
+     *     .readTimeout(Duration.ofMinutes(5));
+     * AppiumClientConfig appiumClientConfig = AppiumClientConfig.defaultConfig().directConnect(true);
+     * WindowsOptions options = new WindowsOptions();
+     * WindowsDriver driver = new WindowsDriver(clientConfig, options, appiumClientConfig);
+     *
+     * 
+ * + * @param clientConfig take a look at {@link ClientConfig} + * @param capabilities take a look at {@link Capabilities} + * @param appiumClientConfig take a look at {@link AppiumClientConfig} + * + */ public WindowsDriver(ClientConfig clientConfig, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(clientConfig, ensurePlatformAndAutomationNames( + capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + } + public WindowsDriver(Capabilities capabilities) { super(ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } + public WindowsDriver(Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + } + /** * Launch the application app under test after it was closed. */ From 55ad185bfabe1ac9424dbcc7d67cf11b930574c9 Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Wed, 24 Aug 2022 22:36:08 -0700 Subject: [PATCH 07/66] update imports, license --- .../appium/java_client/AppiumClientConfig.java | 16 ++++++++++++++++ .../java_client/android/AndroidDriver.java | 15 ++++++++++++++- .../io/appium/java_client/ios/IOSDriver.java | 14 +++++++++++++- .../remote/AppiumCommandExecutor.java | 2 +- .../java_client/windows/WindowsDriver.java | 7 ++++++- 5 files changed, 50 insertions(+), 4 deletions(-) diff --git a/src/main/java/io/appium/java_client/AppiumClientConfig.java b/src/main/java/io/appium/java_client/AppiumClientConfig.java index 6efe854cf..2619cad6b 100644 --- a/src/main/java/io/appium/java_client/AppiumClientConfig.java +++ b/src/main/java/io/appium/java_client/AppiumClientConfig.java @@ -1,3 +1,19 @@ +/* + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * See the NOTICE file distributed with this work for additional + * information regarding copyright ownership. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package io.appium.java_client; /** diff --git a/src/main/java/io/appium/java_client/android/AndroidDriver.java b/src/main/java/io/appium/java_client/android/AndroidDriver.java index 9fcbc2adc..7804d263e 100644 --- a/src/main/java/io/appium/java_client/android/AndroidDriver.java +++ b/src/main/java/io/appium/java_client/android/AndroidDriver.java @@ -23,7 +23,20 @@ import com.google.common.collect.ImmutableMap; -import io.appium.java_client.*; +import io.appium.java_client.AppiumClientConfig; +import io.appium.java_client.AppiumDriver; +import io.appium.java_client.CommandExecutionHelper; +import io.appium.java_client.ExecuteCDPCommand; +import io.appium.java_client.HasAppStrings; +import io.appium.java_client.HasDeviceTime; +import io.appium.java_client.HasOnScreenKeyboard; +import io.appium.java_client.HidesKeyboard; +import io.appium.java_client.InteractsWithApps; +import io.appium.java_client.PullsFiles; +import io.appium.java_client.LocksDevice; +import io.appium.java_client.PerformsTouchActions; +import io.appium.java_client.PushesFiles; +import io.appium.java_client.SupportsLegacyAppManagement; import io.appium.java_client.android.connection.HasNetworkConnection; import io.appium.java_client.android.geolocation.SupportsExtendedGeolocationCommands; import io.appium.java_client.android.nativekey.PressesKey; diff --git a/src/main/java/io/appium/java_client/ios/IOSDriver.java b/src/main/java/io/appium/java_client/ios/IOSDriver.java index de934d57e..e0369db17 100644 --- a/src/main/java/io/appium/java_client/ios/IOSDriver.java +++ b/src/main/java/io/appium/java_client/ios/IOSDriver.java @@ -21,7 +21,19 @@ import com.google.common.collect.ImmutableMap; -import io.appium.java_client.*; +import io.appium.java_client.AppiumClientConfig; +import io.appium.java_client.AppiumDriver; +import io.appium.java_client.HasAppStrings; +import io.appium.java_client.HasDeviceTime; +import io.appium.java_client.HasOnScreenKeyboard; +import io.appium.java_client.HidesKeyboard; +import io.appium.java_client.HidesKeyboardWithKeyName; +import io.appium.java_client.InteractsWithApps; +import io.appium.java_client.PullsFiles; +import io.appium.java_client.LocksDevice; +import io.appium.java_client.PerformsTouchActions; +import io.appium.java_client.PushesFiles; +import io.appium.java_client.SupportsLegacyAppManagement; import io.appium.java_client.battery.HasBattery; import io.appium.java_client.remote.SupportsContextSwitching; import io.appium.java_client.remote.SupportsLocation; diff --git a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java index 683fe5847..0494919ba 100644 --- a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java +++ b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java @@ -97,6 +97,7 @@ public AppiumCommandExecutor(Map additionalCommands, URL addressOfRemoteServer, HttpClient.Factory httpClientFactory) { this(additionalCommands, null, checkNotNull(addressOfRemoteServer), httpClientFactory, null, AppiumClientConfig.defaultConfig()); } + public AppiumCommandExecutor(Map additionalCommands, URL addressOfRemoteServer, HttpClient.Factory httpClientFactory, AppiumClientConfig appiumClientConfig) { this(additionalCommands, null, checkNotNull(addressOfRemoteServer), httpClientFactory, null, appiumClientConfig); @@ -181,7 +182,6 @@ protected void setClientWithURL(URL serverUrl) { setPrivateFieldValue(HttpCommandExecutor.class, "client", httpClientFactory.createClient(serverUrl)); } - private Response createSession(Command command) throws IOException { if (getCommandCodec() != null) { throw new SessionNotCreatedException("Session already exists"); diff --git a/src/main/java/io/appium/java_client/windows/WindowsDriver.java b/src/main/java/io/appium/java_client/windows/WindowsDriver.java index d4ac72c5b..49aecc2a8 100644 --- a/src/main/java/io/appium/java_client/windows/WindowsDriver.java +++ b/src/main/java/io/appium/java_client/windows/WindowsDriver.java @@ -16,7 +16,12 @@ package io.appium.java_client.windows; -import io.appium.java_client.*; +import io.appium.java_client.AppiumClientConfig; +import io.appium.java_client.AppiumDriver; +import io.appium.java_client.MobileCommand; +import io.appium.java_client.PerformsTouchActions; +import io.appium.java_client.PullsFiles; +import io.appium.java_client.PushesFiles; import io.appium.java_client.remote.AutomationName; import io.appium.java_client.screenrecording.CanRecordScreen; import io.appium.java_client.service.local.AppiumDriverLocalService; From d0ff28a60423ea1a0b3bc2145fd32f3c17a09a39 Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Wed, 24 Aug 2022 22:37:42 -0700 Subject: [PATCH 08/66] use a tag --- src/main/java/io/appium/java_client/AppiumClientConfig.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/appium/java_client/AppiumClientConfig.java b/src/main/java/io/appium/java_client/AppiumClientConfig.java index 2619cad6b..11e506cf1 100644 --- a/src/main/java/io/appium/java_client/AppiumClientConfig.java +++ b/src/main/java/io/appium/java_client/AppiumClientConfig.java @@ -17,7 +17,7 @@ package io.appium.java_client; /** - * Manage Appium Client options. + * Manage Appium Client configurations. */ public class AppiumClientConfig { @@ -34,7 +34,7 @@ public static AppiumClientConfig defaultConfig() { /** * Whether enable directConnect feature described in - * https://appiumpro.com/editions/86-connecting-directly-to-appium-hosts-in-distributed-environments + * Connecting Directly to Appium Hosts in Distributed Environments * * @param directConnect if enable the directConnect feature * @return A self reference From 16dd824e3903c7aceb68974b22c7850d46a1a894 Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Wed, 24 Aug 2022 22:54:23 -0700 Subject: [PATCH 09/66] fix lint --- .../java_client/AppiumClientConfig.java | 11 ++++-- .../io/appium/java_client/AppiumDriver.java | 18 ++++++---- .../java_client/android/AndroidDriver.java | 18 ++++++---- .../appium/java_client/gecko/GeckoDriver.java | 9 +++-- .../io/appium/java_client/ios/IOSDriver.java | 6 ++-- .../io/appium/java_client/mac/Mac2Driver.java | 9 +++-- .../remote/AppiumCommandExecutor.java | 36 ++++++++++++------- .../java_client/safari/SafariDriver.java | 9 +++-- .../java_client/windows/WindowsDriver.java | 19 ++++++---- 9 files changed, 91 insertions(+), 44 deletions(-) diff --git a/src/main/java/io/appium/java_client/AppiumClientConfig.java b/src/main/java/io/appium/java_client/AppiumClientConfig.java index 11e506cf1..e7f88ffdc 100644 --- a/src/main/java/io/appium/java_client/AppiumClientConfig.java +++ b/src/main/java/io/appium/java_client/AppiumClientConfig.java @@ -23,9 +23,11 @@ public class AppiumClientConfig { private boolean directConnect = false; - public AppiumClientConfig() {} + public AppiumClientConfig() { + } /** + * Return the instance of AppiumClientConfig with a default config. * @return the instance of AppiumClientConfig. */ public static AppiumClientConfig defaultConfig() { @@ -34,7 +36,8 @@ public static AppiumClientConfig defaultConfig() { /** * Whether enable directConnect feature described in - * Connecting Directly to Appium Hosts in Distributed Environments + * + * Connecting Directly to Appium Hosts in Distributed Environments. * * @param directConnect if enable the directConnect feature * @return A self reference @@ -49,5 +52,7 @@ public AppiumClientConfig directConnect(boolean directConnect) { * * @return If the directConnect is enabled.Defaults false. */ - public boolean isDirectConnectEnabled() { return this.directConnect; } + public boolean isDirectConnectEnabled() { + return this.directConnect; + } } diff --git a/src/main/java/io/appium/java_client/AppiumDriver.java b/src/main/java/io/appium/java_client/AppiumDriver.java index 8e43a9883..4836680f3 100644 --- a/src/main/java/io/appium/java_client/AppiumDriver.java +++ b/src/main/java/io/appium/java_client/AppiumDriver.java @@ -89,13 +89,15 @@ public AppiumDriver(ClientConfig clientConfig, Capabilities capabilities) { } public AppiumDriver(ClientConfig clientConfig, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(new AppiumCommandExecutor(MobileCommand.commandRepository, clientConfig, appiumClientConfig), capabilities); + this(new AppiumCommandExecutor(MobileCommand.commandRepository, clientConfig, appiumClientConfig), + capabilities); } public AppiumDriver(URL remoteAddress, Capabilities capabilities) { this(new AppiumCommandExecutor(MobileCommand.commandRepository, remoteAddress), capabilities); } + public AppiumDriver(URL remoteAddress, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { this(new AppiumCommandExecutor(MobileCommand.commandRepository, remoteAddress, appiumClientConfig), capabilities); @@ -112,12 +114,14 @@ public AppiumDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, this(new AppiumCommandExecutor(MobileCommand.commandRepository, remoteAddress, httpClientFactory, appiumClientConfig), capabilities); } + public AppiumDriver(AppiumDriverLocalService service, Capabilities capabilities) { this(new AppiumCommandExecutor(MobileCommand.commandRepository, service), capabilities); } - public AppiumDriver(AppiumDriverLocalService service, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + public AppiumDriver(AppiumDriverLocalService service, Capabilities capabilities, + AppiumClientConfig appiumClientConfig) { this(new AppiumCommandExecutor(MobileCommand.commandRepository, service, appiumClientConfig), capabilities); } @@ -130,15 +134,16 @@ public AppiumDriver(AppiumDriverLocalService service, HttpClient.Factory httpCli public AppiumDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(new AppiumCommandExecutor(MobileCommand.commandRepository, service, httpClientFactory, appiumClientConfig), - capabilities); + this(new AppiumCommandExecutor(MobileCommand.commandRepository, service, + httpClientFactory, appiumClientConfig), capabilities); } public AppiumDriver(AppiumServiceBuilder builder, Capabilities capabilities) { this(builder.build(), capabilities); } - public AppiumDriver(AppiumServiceBuilder builder, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + public AppiumDriver(AppiumServiceBuilder builder, Capabilities capabilities, + AppiumClientConfig appiumClientConfig) { this(builder.build(), capabilities, appiumClientConfig); } @@ -157,7 +162,8 @@ public AppiumDriver(HttpClient.Factory httpClientFactory, Capabilities capabilit capabilities); } - public AppiumDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + public AppiumDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities, + AppiumClientConfig appiumClientConfig) { this(AppiumDriverLocalService.buildDefaultService(), httpClientFactory, capabilities, appiumClientConfig); } diff --git a/src/main/java/io/appium/java_client/android/AndroidDriver.java b/src/main/java/io/appium/java_client/android/AndroidDriver.java index 7804d263e..c1333e3fd 100644 --- a/src/main/java/io/appium/java_client/android/AndroidDriver.java +++ b/src/main/java/io/appium/java_client/android/AndroidDriver.java @@ -150,7 +150,8 @@ public AndroidDriver( * @param appiumClientConfig take a look at {@link AppiumClientConfig} */ public AndroidDriver( - URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities, + AppiumClientConfig appiumClientConfig) { super(remoteAddress, httpClientFactory, ensurePlatformName(capabilities, ANDROID_PLATFORM), appiumClientConfig); } @@ -171,7 +172,8 @@ public AndroidDriver(AppiumDriverLocalService service, Capabilities capabilities * @param capabilities take a look at {@link Capabilities} * @param appiumClientConfig take a look at {@link AppiumClientConfig} */ - public AndroidDriver(AppiumDriverLocalService service, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + public AndroidDriver(AppiumDriverLocalService service, Capabilities capabilities, + AppiumClientConfig appiumClientConfig) { super(service, ensurePlatformName(capabilities, ANDROID_PLATFORM), appiumClientConfig); } @@ -196,7 +198,8 @@ public AndroidDriver( * @param appiumClientConfig take a look at {@link AppiumClientConfig} */ public AndroidDriver( - AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities, + AppiumClientConfig appiumClientConfig) { super(service, httpClientFactory, ensurePlatformName(capabilities, ANDROID_PLATFORM), appiumClientConfig); } @@ -217,7 +220,8 @@ public AndroidDriver(AppiumServiceBuilder builder, Capabilities capabilities) { * @param capabilities take a look at {@link Capabilities} * @param appiumClientConfig take a look at {@link AppiumClientConfig} */ - public AndroidDriver(AppiumServiceBuilder builder, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + public AndroidDriver(AppiumServiceBuilder builder, Capabilities capabilities, + AppiumClientConfig appiumClientConfig) { super(builder, ensurePlatformName(capabilities, ANDROID_PLATFORM), appiumClientConfig); } @@ -263,7 +267,8 @@ public AndroidDriver(HttpClient.Factory httpClientFactory, Capabilities capabili * @param capabilities take a look at {@link Capabilities} * @param appiumClientConfig take a look at {@link AppiumClientConfig} */ - public AndroidDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + public AndroidDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities, + AppiumClientConfig appiumClientConfig) { super(httpClientFactory, ensurePlatformName(capabilities, ANDROID_PLATFORM), appiumClientConfig); } @@ -311,7 +316,8 @@ public AndroidDriver(ClientConfig clientConfig, Capabilities capabilities) { * @param appiumClientConfig take a look at {@link AppiumClientConfig} * */ - public AndroidDriver(ClientConfig clientConfig, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + public AndroidDriver(ClientConfig clientConfig, Capabilities capabilities, + AppiumClientConfig appiumClientConfig) { super(clientConfig, ensurePlatformName(capabilities, ANDROID_PLATFORM), appiumClientConfig); } diff --git a/src/main/java/io/appium/java_client/gecko/GeckoDriver.java b/src/main/java/io/appium/java_client/gecko/GeckoDriver.java index 0b31a0fc7..0c51c9169 100644 --- a/src/main/java/io/appium/java_client/gecko/GeckoDriver.java +++ b/src/main/java/io/appium/java_client/gecko/GeckoDriver.java @@ -59,14 +59,16 @@ public GeckoDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capa public GeckoDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(remoteAddress, httpClientFactory, ensureAutomationName(capabilities, AUTOMATION_NAME), appiumClientConfig); + super(remoteAddress, httpClientFactory, ensureAutomationName(capabilities, AUTOMATION_NAME), + appiumClientConfig); } public GeckoDriver(AppiumDriverLocalService service, Capabilities capabilities) { super(service, ensureAutomationName(capabilities, AUTOMATION_NAME)); } - public GeckoDriver(AppiumDriverLocalService service, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + public GeckoDriver(AppiumDriverLocalService service, Capabilities capabilities, + AppiumClientConfig appiumClientConfig) { super(service, ensureAutomationName(capabilities, AUTOMATION_NAME), appiumClientConfig); } @@ -102,7 +104,8 @@ public GeckoDriver(HttpClient.Factory httpClientFactory, Capabilities capabiliti super(httpClientFactory, ensureAutomationName(capabilities, AUTOMATION_NAME)); } - public GeckoDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + public GeckoDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities, + AppiumClientConfig appiumClientConfig) { super(httpClientFactory, ensureAutomationName(capabilities, AUTOMATION_NAME), appiumClientConfig); } diff --git a/src/main/java/io/appium/java_client/ios/IOSDriver.java b/src/main/java/io/appium/java_client/ios/IOSDriver.java index e0369db17..62b4e5213 100644 --- a/src/main/java/io/appium/java_client/ios/IOSDriver.java +++ b/src/main/java/io/appium/java_client/ios/IOSDriver.java @@ -160,7 +160,8 @@ public IOSDriver(AppiumDriverLocalService service, Capabilities capabilities) { * @param capabilities take a look at {@link Capabilities} * @param appiumClientConfig take a look at {@link AppiumClientConfig} */ - public IOSDriver(AppiumDriverLocalService service, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + public IOSDriver(AppiumDriverLocalService service, Capabilities capabilities, + AppiumClientConfig appiumClientConfig) { super(service, ensurePlatformName(capabilities, PLATFORM_NAME), appiumClientConfig); } @@ -252,7 +253,8 @@ public IOSDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities * @param capabilities take a look at {@link Capabilities} * @param appiumClientConfig take a look at {@link AppiumClientConfig} */ - public IOSDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + public IOSDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities, + AppiumClientConfig appiumClientConfig) { super(httpClientFactory, ensurePlatformName(capabilities, PLATFORM_NAME), appiumClientConfig); } diff --git a/src/main/java/io/appium/java_client/mac/Mac2Driver.java b/src/main/java/io/appium/java_client/mac/Mac2Driver.java index bdfee74f6..1f3ba4e88 100644 --- a/src/main/java/io/appium/java_client/mac/Mac2Driver.java +++ b/src/main/java/io/appium/java_client/mac/Mac2Driver.java @@ -75,8 +75,10 @@ public Mac2Driver(AppiumDriverLocalService service, Capabilities capabilities) { super(service, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } - public Mac2Driver(AppiumDriverLocalService service, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(service, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + public Mac2Driver(AppiumDriverLocalService service, Capabilities capabilities, + AppiumClientConfig appiumClientConfig) { + super(service, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME), + appiumClientConfig); } public Mac2Driver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, @@ -118,7 +120,8 @@ public Mac2Driver(HttpClient.Factory httpClientFactory, Capabilities capabilitie capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } - public Mac2Driver(HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + public Mac2Driver(HttpClient.Factory httpClientFactory, Capabilities capabilities, + AppiumClientConfig appiumClientConfig) { super(httpClientFactory, ensurePlatformAndAutomationNames( capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); } diff --git a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java index 0494919ba..7e44b2b0c 100644 --- a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java +++ b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java @@ -85,35 +85,44 @@ private AppiumCommandExecutor(Map additionalCommands, Drive public AppiumCommandExecutor(Map additionalCommands, DriverService service, HttpClient.Factory httpClientFactory) { - this(additionalCommands, checkNotNull(service), null, httpClientFactory, null, AppiumClientConfig.defaultConfig()); + this(additionalCommands, checkNotNull(service), null, httpClientFactory, null, + AppiumClientConfig.defaultConfig()); } public AppiumCommandExecutor(Map additionalCommands, DriverService service, HttpClient.Factory httpClientFactory, AppiumClientConfig appiumClientConfig) { - this(additionalCommands, checkNotNull(service), null, httpClientFactory, null, appiumClientConfig); + this(additionalCommands, checkNotNull(service), null, httpClientFactory, null, + appiumClientConfig); } public AppiumCommandExecutor(Map additionalCommands, URL addressOfRemoteServer, HttpClient.Factory httpClientFactory) { - this(additionalCommands, null, checkNotNull(addressOfRemoteServer), httpClientFactory, null, AppiumClientConfig.defaultConfig()); + this(additionalCommands, null, checkNotNull(addressOfRemoteServer), httpClientFactory, null, + AppiumClientConfig.defaultConfig()); } public AppiumCommandExecutor(Map additionalCommands, - URL addressOfRemoteServer, HttpClient.Factory httpClientFactory, AppiumClientConfig appiumClientConfig) { - this(additionalCommands, null, checkNotNull(addressOfRemoteServer), httpClientFactory, null, appiumClientConfig); + URL addressOfRemoteServer, HttpClient.Factory httpClientFactory, + AppiumClientConfig appiumClientConfig) { + this(additionalCommands, null, checkNotNull(addressOfRemoteServer), httpClientFactory, null, + appiumClientConfig); } public AppiumCommandExecutor(Map additionalCommands, ClientConfig clientConfig) { - this(additionalCommands, null, checkNotNull(clientConfig.baseUrl()), null, clientConfig, AppiumClientConfig.defaultConfig()); + this(additionalCommands, null, checkNotNull(clientConfig.baseUrl()), null, clientConfig, + AppiumClientConfig.defaultConfig()); } - public AppiumCommandExecutor(Map additionalCommands, ClientConfig clientConfig, AppiumClientConfig appiumClientConfig) { - this(additionalCommands, null, checkNotNull(clientConfig.baseUrl()), null, clientConfig, appiumClientConfig); + public AppiumCommandExecutor(Map additionalCommands, ClientConfig clientConfig, + AppiumClientConfig appiumClientConfig) { + this(additionalCommands, null, checkNotNull(clientConfig.baseUrl()), null, clientConfig, + appiumClientConfig); } public AppiumCommandExecutor(Map additionalCommands, URL addressOfRemoteServer) { - this(additionalCommands, addressOfRemoteServer, HttpClient.Factory.createDefault(), AppiumClientConfig.defaultConfig()); + this(additionalCommands, addressOfRemoteServer, HttpClient.Factory.createDefault(), + AppiumClientConfig.defaultConfig()); } public AppiumCommandExecutor(Map additionalCommands, @@ -178,7 +187,8 @@ protected HttpClient getClient() { } protected void setClientWithURL(URL serverUrl) { - HttpClient.Factory httpClientFactory = getPrivateFieldValue(HttpCommandExecutor.class, "httpClientFactory", HttpClient.Factory.class); + HttpClient.Factory httpClientFactory = getPrivateFieldValue(HttpCommandExecutor.class, + "httpClientFactory", HttpClient.Factory.class); setPrivateFieldValue(HttpCommandExecutor.class, "client", httpClientFactory.createClient(serverUrl)); } @@ -225,10 +235,12 @@ private void setDirectConnect(Response response) throws MalformedURLException { String directConnectHost = getDirectConnectValue(responseValue, "directConnectHost"); String directConnectPort = getDirectConnectValue(responseValue, "directConnectPort"); - if (directConnectProtocol == null || directConnectHost == null || directConnectPath == null || directConnectPort == null) { + if (directConnectProtocol == null || directConnectHost == null + || directConnectPath == null || directConnectPort == null) { return; } - setClientWithURL(new URL(directConnectProtocol + "://" + directConnectHost + ":" + directConnectPort + directConnectPath)); + setClientWithURL(new URL(directConnectProtocol + "://" + directConnectHost + ":" + + directConnectPort + directConnectPath)); } private String getDirectConnectValue(Map responseValue, String key) { diff --git a/src/main/java/io/appium/java_client/safari/SafariDriver.java b/src/main/java/io/appium/java_client/safari/SafariDriver.java index 5318f60bd..af3263201 100644 --- a/src/main/java/io/appium/java_client/safari/SafariDriver.java +++ b/src/main/java/io/appium/java_client/safari/SafariDriver.java @@ -72,7 +72,8 @@ public SafariDriver(AppiumDriverLocalService service, Capabilities capabilities) capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } - public SafariDriver(AppiumDriverLocalService service, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + public SafariDriver(AppiumDriverLocalService service, Capabilities capabilities, + AppiumClientConfig appiumClientConfig) { super(service, ensurePlatformAndAutomationNames( capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); } @@ -94,7 +95,8 @@ public SafariDriver(AppiumServiceBuilder builder, Capabilities capabilities) { capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } - public SafariDriver(AppiumServiceBuilder builder, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + public SafariDriver(AppiumServiceBuilder builder, Capabilities capabilities, + AppiumClientConfig appiumClientConfig) { super(builder, ensurePlatformAndAutomationNames( capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); } @@ -116,7 +118,8 @@ public SafariDriver(HttpClient.Factory httpClientFactory, Capabilities capabilit capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } - public SafariDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + public SafariDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities, + AppiumClientConfig appiumClientConfig) { super(httpClientFactory, ensurePlatformAndAutomationNames( capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); } diff --git a/src/main/java/io/appium/java_client/windows/WindowsDriver.java b/src/main/java/io/appium/java_client/windows/WindowsDriver.java index 49aecc2a8..b093c50b7 100644 --- a/src/main/java/io/appium/java_client/windows/WindowsDriver.java +++ b/src/main/java/io/appium/java_client/windows/WindowsDriver.java @@ -71,8 +71,10 @@ public WindowsDriver(AppiumDriverLocalService service, Capabilities capabilities super(service, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } - public WindowsDriver(AppiumDriverLocalService service, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(service, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + public WindowsDriver(AppiumDriverLocalService service, Capabilities capabilities, + AppiumClientConfig appiumClientConfig) { + super(service, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME), + appiumClientConfig); } public WindowsDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, @@ -91,8 +93,10 @@ public WindowsDriver(AppiumServiceBuilder builder, Capabilities capabilities) { super(builder, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } - public WindowsDriver(AppiumServiceBuilder builder, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(builder, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + public WindowsDriver(AppiumServiceBuilder builder, Capabilities capabilities, + AppiumClientConfig appiumClientConfig) { + super(builder, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME), + appiumClientConfig); } public WindowsDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, @@ -112,7 +116,8 @@ public WindowsDriver(HttpClient.Factory httpClientFactory, Capabilities capabili capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } - public WindowsDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + public WindowsDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities, + AppiumClientConfig appiumClientConfig) { super(httpClientFactory, ensurePlatformAndAutomationNames( capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); } @@ -161,7 +166,9 @@ public WindowsDriver(ClientConfig clientConfig, Capabilities capabilities) { * @param capabilities take a look at {@link Capabilities} * @param appiumClientConfig take a look at {@link AppiumClientConfig} * - */ public WindowsDriver(ClientConfig clientConfig, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + */ + public WindowsDriver(ClientConfig clientConfig, Capabilities capabilities, + AppiumClientConfig appiumClientConfig) { super(clientConfig, ensurePlatformAndAutomationNames( capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); } From 0125a9746bc2607b2acef0dfd374fc327fd24e8a Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Thu, 25 Aug 2022 01:43:12 -0700 Subject: [PATCH 10/66] update part of --- .../java_client/AppiumClientConfig.java | 7 +++++ .../remote/AppiumCommandExecutor.java | 26 +++++++++---------- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/src/main/java/io/appium/java_client/AppiumClientConfig.java b/src/main/java/io/appium/java_client/AppiumClientConfig.java index e7f88ffdc..61a4535fe 100644 --- a/src/main/java/io/appium/java_client/AppiumClientConfig.java +++ b/src/main/java/io/appium/java_client/AppiumClientConfig.java @@ -26,6 +26,13 @@ public class AppiumClientConfig { public AppiumClientConfig() { } + public static class DirectConnect { + public static String DIRECT_CONNECT_PROTOCOL = "directConnectProtocol"; + public static String DIRECT_CONNECT_PATH = "directConnectPath"; + public static String DIRECT_CONNECT_HOST = "directConnectHost"; + public static String DIRECT_CONNECT_PORT = "directConnectPort"; + } + /** * Return the instance of AppiumClientConfig with a default config. * @return the instance of AppiumClientConfig. diff --git a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java index 7e44b2b0c..d5f15ec8f 100644 --- a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java +++ b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java @@ -45,6 +45,7 @@ import org.openqa.selenium.remote.http.HttpResponse; import org.openqa.selenium.remote.service.DriverService; +import javax.annotation.Nullable; import java.io.IOException; import java.lang.reflect.Field; import java.net.ConnectException; @@ -186,7 +187,7 @@ protected HttpClient getClient() { return getPrivateFieldValue(HttpCommandExecutor.class, "client", HttpClient.class); } - protected void setClientWithURL(URL serverUrl) { + protected void overrideServerUrl(URL serverUrl) { HttpClient.Factory httpClientFactory = getPrivateFieldValue(HttpCommandExecutor.class, "httpClientFactory", HttpClient.Factory.class); setPrivateFieldValue(HttpCommandExecutor.class, "client", httpClientFactory.createClient(serverUrl)); @@ -212,9 +213,9 @@ private Response createSession(Command command) throws IOException { refreshAdditionalCommands(); setResponseCodec(dialect.getResponseCodec()); Response response = result.createResponse(); - - setDirectConnect(response); - + if (this.appiumClientConfig.isDirectConnectEnabled()) { + setDirectConnect(response); + } return response; } @@ -224,25 +225,24 @@ public void refreshAdditionalCommands() { @SuppressWarnings("unchecked") private void setDirectConnect(Response response) throws MalformedURLException { - if (!this.appiumClientConfig.isDirectConnectEnabled()) { - return; - } - Map responseValue = (Map) response.getValue(); - String directConnectProtocol = getDirectConnectValue(responseValue, "directConnectProtocol"); - String directConnectPath = getDirectConnectValue(responseValue, "directConnectPath"); - String directConnectHost = getDirectConnectValue(responseValue, "directConnectHost"); - String directConnectPort = getDirectConnectValue(responseValue, "directConnectPort"); + String directConnectProtocol = getDirectConnectValue(responseValue, AppiumClientConfig.DirectConnect.DIRECT_CONNECT_PROTOCOL); + String directConnectPath = getDirectConnectValue(responseValue, AppiumClientConfig.DirectConnect.DIRECT_CONNECT_PATH); + String directConnectHost = getDirectConnectValue(responseValue, AppiumClientConfig.DirectConnect.DIRECT_CONNECT_HOST); + String directConnectPort = getDirectConnectValue(responseValue, AppiumClientConfig.DirectConnect.DIRECT_CONNECT_PORT); if (directConnectProtocol == null || directConnectHost == null || directConnectPath == null || directConnectPort == null) { return; } - setClientWithURL(new URL(directConnectProtocol + "://" + directConnectHost + ":" + + // TODO: update the exception message + overrideServerUrl(new URL(directConnectProtocol + "://" + directConnectHost + ":" + directConnectPort + directConnectPath)); } + @Nullable private String getDirectConnectValue(Map responseValue, String key) { String directConnectPath = String.valueOf(responseValue.get("appium:" + key)); return directConnectPath == null ? String.valueOf(responseValue.get(key)) : directConnectPath; From 138fbd4eb64a65b9cdfe5d6768adfd19e5b23727 Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Thu, 25 Aug 2022 01:48:53 -0700 Subject: [PATCH 11/66] fix lint --- .../java_client/remote/AppiumCommandExecutor.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java index d5f15ec8f..766b18f66 100644 --- a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java +++ b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java @@ -227,10 +227,14 @@ public void refreshAdditionalCommands() { private void setDirectConnect(Response response) throws MalformedURLException { Map responseValue = (Map) response.getValue(); - String directConnectProtocol = getDirectConnectValue(responseValue, AppiumClientConfig.DirectConnect.DIRECT_CONNECT_PROTOCOL); - String directConnectPath = getDirectConnectValue(responseValue, AppiumClientConfig.DirectConnect.DIRECT_CONNECT_PATH); - String directConnectHost = getDirectConnectValue(responseValue, AppiumClientConfig.DirectConnect.DIRECT_CONNECT_HOST); - String directConnectPort = getDirectConnectValue(responseValue, AppiumClientConfig.DirectConnect.DIRECT_CONNECT_PORT); + String directConnectProtocol = getDirectConnectValue(responseValue, + AppiumClientConfig.DirectConnect.DIRECT_CONNECT_PROTOCOL); + String directConnectPath = getDirectConnectValue(responseValue, + AppiumClientConfig.DirectConnect.DIRECT_CONNECT_PATH); + String directConnectHost = getDirectConnectValue(responseValue, + AppiumClientConfig.DirectConnect.DIRECT_CONNECT_HOST); + String directConnectPort = getDirectConnectValue(responseValue, + AppiumClientConfig.DirectConnect.DIRECT_CONNECT_PORT); if (directConnectProtocol == null || directConnectHost == null || directConnectPath == null || directConnectPort == null) { From 03833d789e4875a8a27e9a9ecb3db016d97c06bd Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Sat, 27 Aug 2022 01:10:14 -0700 Subject: [PATCH 12/66] create a new client with given config and factory --- .../remote/AppiumCommandExecutor.java | 32 +++++++++++++++---- 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java index 766b18f66..0db581eee 100644 --- a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java +++ b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java @@ -63,8 +63,15 @@ public class AppiumCommandExecutor extends HttpCommandExecutor { private final Optional serviceOptional; + private final HttpClient.Factory httpClientFactory; + + private final ClientConfig clientConfig; + private final AppiumClientConfig appiumClientConfig; + private static ClientConfig getAppiumDefaultClientConfig() { + return ClientConfig.defaultConfig().readTimeout(DEFAULT_READ_TIMEOUT); + } private AppiumCommandExecutor(Map additionalCommands, DriverService service, URL addressOfRemoteServer, HttpClient.Factory httpClientFactory, @@ -72,15 +79,18 @@ private AppiumCommandExecutor(Map additionalCommands, Drive AppiumClientConfig appiumClientConfig) { super(additionalCommands, ofNullable(clientConfig).orElse( - ClientConfig.defaultConfig() + AppiumCommandExecutor.getAppiumDefaultClientConfig() .baseUrl(Require.nonNull("Server URL", ofNullable(service) .map(DriverService::getUrl) .orElse(addressOfRemoteServer))) - .readTimeout(DEFAULT_READ_TIMEOUT) + ), ofNullable(httpClientFactory).orElseGet(HttpCommandExecutor::getDefaultClientFactory) ); serviceOptional = ofNullable(service); + + this.clientConfig = clientConfig; + this.httpClientFactory = httpClientFactory; this.appiumClientConfig = appiumClientConfig; } @@ -187,10 +197,17 @@ protected HttpClient getClient() { return getPrivateFieldValue(HttpCommandExecutor.class, "client", HttpClient.class); } + /** + * Override the http client in the HttpCommandExecutor class with a new http client instance with the given URL. + * Use the same http client factory and client config if the constructor got them. + * + * @param serverUrl to set the URL as the new client's base url. + */ protected void overrideServerUrl(URL serverUrl) { - HttpClient.Factory httpClientFactory = getPrivateFieldValue(HttpCommandExecutor.class, - "httpClientFactory", HttpClient.Factory.class); - setPrivateFieldValue(HttpCommandExecutor.class, "client", httpClientFactory.createClient(serverUrl)); + setPrivateFieldValue(HttpCommandExecutor.class, "client", + ofNullable(this.httpClientFactory).orElseGet(HttpCommandExecutor::getDefaultClientFactory). + createClient(ofNullable(this.clientConfig).orElse( + AppiumCommandExecutor.getAppiumDefaultClientConfig()).baseUrl(serverUrl))); } private Response createSession(Command command) throws IOException { @@ -241,7 +258,10 @@ private void setDirectConnect(Response response) throws MalformedURLException { return; } - // TODO: update the exception message + if (!directConnectProtocol.contentEquals("https")) { + // TODO: add error handling + return; + } overrideServerUrl(new URL(directConnectProtocol + "://" + directConnectHost + ":" + directConnectPort + directConnectPath)); } From 2a89299a5321f8843774b3a7e76ee6018fd18b6c Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Sat, 27 Aug 2022 01:41:49 -0700 Subject: [PATCH 13/66] add constructor --- .../io/appium/java_client/AppiumDriver.java | 68 +++++++++++-------- .../remote/AppiumCommandExecutor.java | 27 +++++--- 2 files changed, 57 insertions(+), 38 deletions(-) diff --git a/src/main/java/io/appium/java_client/AppiumDriver.java b/src/main/java/io/appium/java_client/AppiumDriver.java index 4836680f3..e8b99ed65 100644 --- a/src/main/java/io/appium/java_client/AppiumDriver.java +++ b/src/main/java/io/appium/java_client/AppiumDriver.java @@ -45,6 +45,7 @@ import org.openqa.selenium.remote.http.HttpClient; import org.openqa.selenium.remote.http.HttpMethod; +import javax.annotation.Nullable; import java.lang.reflect.Field; import java.net.URL; import java.util.Arrays; @@ -84,96 +85,105 @@ public AppiumDriver(HttpCommandExecutor executor, Capabilities capabilities) { this.remoteAddress = executor.getAddressOfRemoteServer(); } + private AppiumDriver( + @Nullable URL remoteAddress, + @Nullable AppiumDriverLocalService service, + @Nullable ClientConfig clientConfig, + @Nullable HttpClient.Factory httpClientFactory, + @Nullable AppiumClientConfig appiumClientConfig, + @Nullable Capabilities capabilities) { + + this( + new AppiumCommandExecutor( + MobileCommand.commandRepository, + service, + remoteAddress, + httpClientFactory, + clientConfig, + appiumClientConfig), + capabilities + ); + } + public AppiumDriver(ClientConfig clientConfig, Capabilities capabilities) { - this(new AppiumCommandExecutor(MobileCommand.commandRepository, clientConfig), capabilities); + this(null, null, clientConfig, null, null, capabilities); } public AppiumDriver(ClientConfig clientConfig, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(new AppiumCommandExecutor(MobileCommand.commandRepository, clientConfig, appiumClientConfig), - capabilities); + this(null, null, clientConfig, null, appiumClientConfig, capabilities); } public AppiumDriver(URL remoteAddress, Capabilities capabilities) { - this(new AppiumCommandExecutor(MobileCommand.commandRepository, remoteAddress), - capabilities); + this(remoteAddress, null, null, null, null, capabilities); } public AppiumDriver(URL remoteAddress, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(new AppiumCommandExecutor(MobileCommand.commandRepository, remoteAddress, appiumClientConfig), - capabilities); + this(remoteAddress, null, null, null, appiumClientConfig, capabilities); } public AppiumDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - this(new AppiumCommandExecutor(MobileCommand.commandRepository, remoteAddress, - httpClientFactory), capabilities); + this(remoteAddress, null, null, httpClientFactory, null, capabilities); } public AppiumDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(new AppiumCommandExecutor(MobileCommand.commandRepository, remoteAddress, - httpClientFactory, appiumClientConfig), capabilities); + this(remoteAddress, null, null, httpClientFactory, appiumClientConfig, capabilities); } public AppiumDriver(AppiumDriverLocalService service, Capabilities capabilities) { - this(new AppiumCommandExecutor(MobileCommand.commandRepository, service), - capabilities); + this(null, service, null, null, null, capabilities); } public AppiumDriver(AppiumDriverLocalService service, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(new AppiumCommandExecutor(MobileCommand.commandRepository, service, appiumClientConfig), - capabilities); + this(null, service, null, null, appiumClientConfig, capabilities); } public AppiumDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - this(new AppiumCommandExecutor(MobileCommand.commandRepository, service, httpClientFactory), - capabilities); + this(null, service, null, httpClientFactory, null, capabilities); } public AppiumDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(new AppiumCommandExecutor(MobileCommand.commandRepository, service, - httpClientFactory, appiumClientConfig), capabilities); + this(null, service, null, httpClientFactory, appiumClientConfig, capabilities); } public AppiumDriver(AppiumServiceBuilder builder, Capabilities capabilities) { - this(builder.build(), capabilities); + this(null, builder.build(), null, null, null, capabilities); } public AppiumDriver(AppiumServiceBuilder builder, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(builder.build(), capabilities, appiumClientConfig); + this(null, builder.build(), null, null, appiumClientConfig, capabilities); } public AppiumDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - this(builder.build(), httpClientFactory, capabilities); + this(null, builder.build(), null, httpClientFactory, null, capabilities); } public AppiumDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(builder.build(), httpClientFactory, capabilities, appiumClientConfig); + this(null, builder.build(), null, httpClientFactory, appiumClientConfig, capabilities); } public AppiumDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities) { - this(AppiumDriverLocalService.buildDefaultService(), httpClientFactory, - capabilities); + this(null, null, null, httpClientFactory, null, capabilities); } public AppiumDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(AppiumDriverLocalService.buildDefaultService(), httpClientFactory, - capabilities, appiumClientConfig); + this(null, null, null, httpClientFactory, appiumClientConfig, capabilities); } public AppiumDriver(Capabilities capabilities) { - this(AppiumDriverLocalService.buildDefaultService(), capabilities); + this(null, null, null, null, null, capabilities); } public AppiumDriver(Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(AppiumDriverLocalService.buildDefaultService(), capabilities, appiumClientConfig); + this(null, null, null, null, appiumClientConfig, capabilities); } /** diff --git a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java index 0db581eee..a172761b4 100644 --- a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java +++ b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java @@ -45,6 +45,7 @@ import org.openqa.selenium.remote.http.HttpResponse; import org.openqa.selenium.remote.service.DriverService; +import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.io.IOException; import java.lang.reflect.Field; @@ -53,6 +54,7 @@ import java.net.URL; import java.time.Duration; import java.util.Map; +import java.util.Objects; import java.util.Optional; import java.util.UUID; @@ -72,17 +74,23 @@ public class AppiumCommandExecutor extends HttpCommandExecutor { private static ClientConfig getAppiumDefaultClientConfig() { return ClientConfig.defaultConfig().readTimeout(DEFAULT_READ_TIMEOUT); } - private AppiumCommandExecutor(Map additionalCommands, DriverService service, - URL addressOfRemoteServer, - HttpClient.Factory httpClientFactory, - ClientConfig clientConfig, - AppiumClientConfig appiumClientConfig) { + public AppiumCommandExecutor( + @Nonnull Map additionalCommands, + @Nullable DriverService service, + @Nullable URL addressOfRemoteServer, + @Nullable HttpClient.Factory httpClientFactory, + @Nullable ClientConfig clientConfig, + @Nullable AppiumClientConfig appiumClientConfig) { + super(additionalCommands, ofNullable(clientConfig).orElse( AppiumCommandExecutor.getAppiumDefaultClientConfig() - .baseUrl(Require.nonNull("Server URL", ofNullable(service) - .map(DriverService::getUrl) - .orElse(addressOfRemoteServer))) + .baseUrl(Require.nonNull( + "Server URL", + Objects.requireNonNull(ofNullable(service) + .map(DriverService::getUrl) + .orElse(addressOfRemoteServer)) + )) ), ofNullable(httpClientFactory).orElseGet(HttpCommandExecutor::getDefaultClientFactory) @@ -113,7 +121,8 @@ public AppiumCommandExecutor(Map additionalCommands, } public AppiumCommandExecutor(Map additionalCommands, - URL addressOfRemoteServer, HttpClient.Factory httpClientFactory, + URL addressOfRemoteServer, + HttpClient.Factory httpClientFactory, AppiumClientConfig appiumClientConfig) { this(additionalCommands, null, checkNotNull(addressOfRemoteServer), httpClientFactory, null, appiumClientConfig); From 97e8b62eaed3973c3570229c7e2dd048e5fa1652 Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Sat, 27 Aug 2022 01:54:25 -0700 Subject: [PATCH 14/66] refer to this --- .../io/appium/java_client/AppiumDriver.java | 2 +- .../java_client/android/AndroidDriver.java | 56 +++++++++++++------ 2 files changed, 39 insertions(+), 19 deletions(-) diff --git a/src/main/java/io/appium/java_client/AppiumDriver.java b/src/main/java/io/appium/java_client/AppiumDriver.java index e8b99ed65..c1f8d164d 100644 --- a/src/main/java/io/appium/java_client/AppiumDriver.java +++ b/src/main/java/io/appium/java_client/AppiumDriver.java @@ -85,7 +85,7 @@ public AppiumDriver(HttpCommandExecutor executor, Capabilities capabilities) { this.remoteAddress = executor.getAddressOfRemoteServer(); } - private AppiumDriver( + protected AppiumDriver( @Nullable URL remoteAddress, @Nullable AppiumDriverLocalService service, @Nullable ClientConfig clientConfig, diff --git a/src/main/java/io/appium/java_client/android/AndroidDriver.java b/src/main/java/io/appium/java_client/android/AndroidDriver.java index c1333e3fd..3700aca35 100644 --- a/src/main/java/io/appium/java_client/android/AndroidDriver.java +++ b/src/main/java/io/appium/java_client/android/AndroidDriver.java @@ -55,6 +55,8 @@ import org.openqa.selenium.remote.http.ClientConfig; import org.openqa.selenium.remote.http.HttpClient; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; import java.net.URL; import java.util.Collections; import java.util.Map; @@ -96,6 +98,23 @@ public class AndroidDriver extends AppiumDriver implements private StringWebSocketClient logcatClient; + private AndroidDriver( + @Nullable URL remoteAddress, + @Nullable AppiumDriverLocalService service, + @Nullable ClientConfig clientConfig, + @Nullable HttpClient.Factory httpClientFactory, + @Nullable AppiumClientConfig appiumClientConfig, + @Nullable Capabilities capabilities) { + super( + remoteAddress, + service, + clientConfig, + httpClientFactory, + appiumClientConfig, + capabilities + ); + } + /** * Creates a new instance based on command {@code executor} and {@code capabilities}. * @@ -115,7 +134,7 @@ public AndroidDriver(HttpCommandExecutor executor, Capabilities capabilities) { * @param capabilities take a look at {@link Capabilities} */ public AndroidDriver(URL remoteAddress, Capabilities capabilities) { - super(remoteAddress, ensurePlatformName(capabilities, ANDROID_PLATFORM)); + this(remoteAddress, null, null, null, null, capabilities); } /** @@ -126,7 +145,7 @@ public AndroidDriver(URL remoteAddress, Capabilities capabilities) { * @param appiumClientConfig take a look at {@link AppiumClientConfig} */ public AndroidDriver(URL remoteAddress, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(remoteAddress, ensurePlatformName(capabilities, ANDROID_PLATFORM), appiumClientConfig); + this(remoteAddress, null, null, null, appiumClientConfig, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } /** @@ -138,7 +157,7 @@ public AndroidDriver(URL remoteAddress, Capabilities capabilities, AppiumClientC */ public AndroidDriver( URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(remoteAddress, httpClientFactory, ensurePlatformName(capabilities, ANDROID_PLATFORM)); + this(remoteAddress, null, null, httpClientFactory, null, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } /** @@ -152,7 +171,7 @@ public AndroidDriver( public AndroidDriver( URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(remoteAddress, httpClientFactory, ensurePlatformName(capabilities, ANDROID_PLATFORM), appiumClientConfig); + this(remoteAddress, null, null, httpClientFactory, appiumClientConfig, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } /** @@ -162,7 +181,7 @@ public AndroidDriver( * @param capabilities take a look at {@link Capabilities} */ public AndroidDriver(AppiumDriverLocalService service, Capabilities capabilities) { - super(service, ensurePlatformName(capabilities, ANDROID_PLATFORM)); + this(null, service, null, null, null, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } /** @@ -174,7 +193,7 @@ public AndroidDriver(AppiumDriverLocalService service, Capabilities capabilities */ public AndroidDriver(AppiumDriverLocalService service, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(service, ensurePlatformName(capabilities, ANDROID_PLATFORM), appiumClientConfig); + this(null, service, null, null, appiumClientConfig, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } /** @@ -186,7 +205,7 @@ public AndroidDriver(AppiumDriverLocalService service, Capabilities capabilities */ public AndroidDriver( AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(service, httpClientFactory, ensurePlatformName(capabilities, ANDROID_PLATFORM)); + this(null, service, null, httpClientFactory, null, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } /** @@ -200,7 +219,7 @@ public AndroidDriver( public AndroidDriver( AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(service, httpClientFactory, ensurePlatformName(capabilities, ANDROID_PLATFORM), appiumClientConfig); + this(null, service, null, httpClientFactory, appiumClientConfig, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } /** @@ -210,7 +229,8 @@ public AndroidDriver( * @param capabilities take a look at {@link Capabilities} */ public AndroidDriver(AppiumServiceBuilder builder, Capabilities capabilities) { - super(builder, ensurePlatformName(capabilities, ANDROID_PLATFORM)); + this(null, builder.build(), null, null, null, ensurePlatformName(capabilities, ANDROID_PLATFORM)); + } /** @@ -222,7 +242,7 @@ public AndroidDriver(AppiumServiceBuilder builder, Capabilities capabilities) { */ public AndroidDriver(AppiumServiceBuilder builder, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(builder, ensurePlatformName(capabilities, ANDROID_PLATFORM), appiumClientConfig); + this(null, builder.build(), null, null, appiumClientConfig, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } /** @@ -234,7 +254,7 @@ public AndroidDriver(AppiumServiceBuilder builder, Capabilities capabilities, */ public AndroidDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(builder, httpClientFactory, ensurePlatformName(capabilities, ANDROID_PLATFORM)); + this(null, builder.build(), null, httpClientFactory, null, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } /** @@ -247,7 +267,7 @@ public AndroidDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClient */ public AndroidDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(builder, httpClientFactory, ensurePlatformName(capabilities, ANDROID_PLATFORM), appiumClientConfig); + this(null, builder.build(), null, httpClientFactory, appiumClientConfig, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } /** @@ -257,7 +277,7 @@ public AndroidDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClient * @param capabilities take a look at {@link Capabilities} */ public AndroidDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(httpClientFactory, ensurePlatformName(capabilities, ANDROID_PLATFORM)); + this(null, null, null, httpClientFactory, null, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } /** @@ -269,7 +289,7 @@ public AndroidDriver(HttpClient.Factory httpClientFactory, Capabilities capabili */ public AndroidDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(httpClientFactory, ensurePlatformName(capabilities, ANDROID_PLATFORM), appiumClientConfig); + this(null, null, null, httpClientFactory, appiumClientConfig, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } /** @@ -292,7 +312,7 @@ public AndroidDriver(HttpClient.Factory httpClientFactory, Capabilities capabili * */ public AndroidDriver(ClientConfig clientConfig, Capabilities capabilities) { - super(clientConfig, ensurePlatformName(capabilities, ANDROID_PLATFORM)); + this(null, null, clientConfig, null, null, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } /** @@ -318,7 +338,7 @@ public AndroidDriver(ClientConfig clientConfig, Capabilities capabilities) { */ public AndroidDriver(ClientConfig clientConfig, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(clientConfig, ensurePlatformName(capabilities, ANDROID_PLATFORM), appiumClientConfig); + this(null, null, clientConfig, null, appiumClientConfig, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } /** @@ -327,7 +347,7 @@ public AndroidDriver(ClientConfig clientConfig, Capabilities capabilities, * @param capabilities take a look at {@link Capabilities} */ public AndroidDriver(Capabilities capabilities) { - super(ensurePlatformName(capabilities, ANDROID_PLATFORM)); + this(null, null, null, null, null, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } /** @@ -337,7 +357,7 @@ public AndroidDriver(Capabilities capabilities) { * @param appiumClientConfig take a look at {@link AppiumClientConfig} */ public AndroidDriver(Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(ensurePlatformName(capabilities, ANDROID_PLATFORM), appiumClientConfig); + this(null, null, null, null, appiumClientConfig, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } /** From 821c89d14502ae1555ab92653e2dd422202f562f Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Sat, 27 Aug 2022 02:00:23 -0700 Subject: [PATCH 15/66] update ios --- .../java_client/android/AndroidDriver.java | 2 +- .../io/appium/java_client/ios/IOSDriver.java | 55 +++++++++++++------ 2 files changed, 38 insertions(+), 19 deletions(-) diff --git a/src/main/java/io/appium/java_client/android/AndroidDriver.java b/src/main/java/io/appium/java_client/android/AndroidDriver.java index 3700aca35..cbc3d43e3 100644 --- a/src/main/java/io/appium/java_client/android/AndroidDriver.java +++ b/src/main/java/io/appium/java_client/android/AndroidDriver.java @@ -134,7 +134,7 @@ public AndroidDriver(HttpCommandExecutor executor, Capabilities capabilities) { * @param capabilities take a look at {@link Capabilities} */ public AndroidDriver(URL remoteAddress, Capabilities capabilities) { - this(remoteAddress, null, null, null, null, capabilities); + this(remoteAddress, null, null, null, null, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } /** diff --git a/src/main/java/io/appium/java_client/ios/IOSDriver.java b/src/main/java/io/appium/java_client/ios/IOSDriver.java index 62b4e5213..57de8d95f 100644 --- a/src/main/java/io/appium/java_client/ios/IOSDriver.java +++ b/src/main/java/io/appium/java_client/ios/IOSDriver.java @@ -52,6 +52,7 @@ import org.openqa.selenium.remote.http.ClientConfig; import org.openqa.selenium.remote.http.HttpClient; +import javax.annotation.Nullable; import java.net.URL; import java.util.Collections; import java.util.Map; @@ -97,6 +98,23 @@ public IOSDriver(HttpCommandExecutor executor, Capabilities capabilities) { super(executor, ensurePlatformName(capabilities, PLATFORM_NAME)); } + private IOSDriver( + @Nullable URL remoteAddress, + @Nullable AppiumDriverLocalService service, + @Nullable ClientConfig clientConfig, + @Nullable HttpClient.Factory httpClientFactory, + @Nullable AppiumClientConfig appiumClientConfig, + @Nullable Capabilities capabilities) { + super( + remoteAddress, + service, + clientConfig, + httpClientFactory, + appiumClientConfig, + capabilities + ); + } + /** * Creates a new instance based on Appium server URL and {@code capabilities}. * @@ -104,7 +122,7 @@ public IOSDriver(HttpCommandExecutor executor, Capabilities capabilities) { * @param capabilities take a look at {@link Capabilities} */ public IOSDriver(URL remoteAddress, Capabilities capabilities) { - super(remoteAddress, ensurePlatformName(capabilities, PLATFORM_NAME)); + this(remoteAddress, null, null, null, null, ensurePlatformName(capabilities, PLATFORM_NAME)); } /** @@ -115,7 +133,7 @@ public IOSDriver(URL remoteAddress, Capabilities capabilities) { * @param appiumClientConfig take a look at {@link AppiumClientConfig} */ public IOSDriver(URL remoteAddress, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(remoteAddress, ensurePlatformName(capabilities, PLATFORM_NAME), appiumClientConfig); + this(remoteAddress, null, null, null, appiumClientConfig, ensurePlatformName(capabilities, PLATFORM_NAME)); } /** @@ -127,7 +145,7 @@ public IOSDriver(URL remoteAddress, Capabilities capabilities, AppiumClientConfi */ public IOSDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(remoteAddress, httpClientFactory, ensurePlatformName(capabilities, PLATFORM_NAME)); + this(remoteAddress, null, null, httpClientFactory, null, ensurePlatformName(capabilities, PLATFORM_NAME)); } /** @@ -140,7 +158,7 @@ public IOSDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, */ public IOSDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(remoteAddress, httpClientFactory, ensurePlatformName(capabilities, PLATFORM_NAME), appiumClientConfig); + this(remoteAddress, null, null, httpClientFactory, appiumClientConfig, ensurePlatformName(capabilities, PLATFORM_NAME)); } /** @@ -150,7 +168,7 @@ public IOSDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, * @param capabilities take a look at {@link Capabilities} */ public IOSDriver(AppiumDriverLocalService service, Capabilities capabilities) { - super(service, ensurePlatformName(capabilities, PLATFORM_NAME)); + this(null, service, null, null, null, ensurePlatformName(capabilities, PLATFORM_NAME)); } /** @@ -162,7 +180,8 @@ public IOSDriver(AppiumDriverLocalService service, Capabilities capabilities) { */ public IOSDriver(AppiumDriverLocalService service, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(service, ensurePlatformName(capabilities, PLATFORM_NAME), appiumClientConfig); + this(null, service, null, null, appiumClientConfig, ensurePlatformName(capabilities, PLATFORM_NAME)); + } /** @@ -174,7 +193,7 @@ public IOSDriver(AppiumDriverLocalService service, Capabilities capabilities, */ public IOSDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(service, httpClientFactory, ensurePlatformName(capabilities, PLATFORM_NAME)); + this(null, service, null, httpClientFactory, null, ensurePlatformName(capabilities, PLATFORM_NAME)); } /** @@ -187,7 +206,7 @@ public IOSDriver(AppiumDriverLocalService service, HttpClient.Factory httpClient */ public IOSDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(service, httpClientFactory, ensurePlatformName(capabilities, PLATFORM_NAME), appiumClientConfig); + this(null, service, null, httpClientFactory, appiumClientConfig, ensurePlatformName(capabilities, PLATFORM_NAME)); } /** @@ -197,7 +216,7 @@ public IOSDriver(AppiumDriverLocalService service, HttpClient.Factory httpClient * @param capabilities take a look at {@link Capabilities} */ public IOSDriver(AppiumServiceBuilder builder, Capabilities capabilities) { - super(builder, ensurePlatformName(capabilities, PLATFORM_NAME)); + this(null, builder.build(), null, null, null, ensurePlatformName(capabilities, PLATFORM_NAME)); } /** @@ -208,7 +227,7 @@ public IOSDriver(AppiumServiceBuilder builder, Capabilities capabilities) { * @param appiumClientConfig take a look at {@link AppiumClientConfig} */ public IOSDriver(AppiumServiceBuilder builder, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(builder, ensurePlatformName(capabilities, PLATFORM_NAME), appiumClientConfig); + this(null, builder.build(), null, null, appiumClientConfig, ensurePlatformName(capabilities, PLATFORM_NAME)); } /** @@ -220,7 +239,7 @@ public IOSDriver(AppiumServiceBuilder builder, Capabilities capabilities, Appium */ public IOSDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(builder, httpClientFactory, ensurePlatformName(capabilities, PLATFORM_NAME)); + this(null, builder.build(), null, httpClientFactory, null, ensurePlatformName(capabilities, PLATFORM_NAME)); } /** @@ -233,7 +252,7 @@ public IOSDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFact */ public IOSDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(builder, httpClientFactory, ensurePlatformName(capabilities, PLATFORM_NAME), appiumClientConfig); + this(null, builder.build(), null, httpClientFactory, appiumClientConfig, ensurePlatformName(capabilities, PLATFORM_NAME)); } /** @@ -243,7 +262,7 @@ public IOSDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFact * @param capabilities take a look at {@link Capabilities} */ public IOSDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(httpClientFactory, ensurePlatformName(capabilities, PLATFORM_NAME)); + this(null, null, null, httpClientFactory, null, ensurePlatformName(capabilities, PLATFORM_NAME)); } /** @@ -255,7 +274,7 @@ public IOSDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities */ public IOSDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(httpClientFactory, ensurePlatformName(capabilities, PLATFORM_NAME), appiumClientConfig); + this(null, null, null, httpClientFactory, appiumClientConfig, ensurePlatformName(capabilities, PLATFORM_NAME)); } /** @@ -278,7 +297,7 @@ public IOSDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities * */ public IOSDriver(ClientConfig clientConfig, Capabilities capabilities) { - super(clientConfig, ensurePlatformName(capabilities, PLATFORM_NAME)); + this(null, null, clientConfig, null, null, ensurePlatformName(capabilities, PLATFORM_NAME)); } @@ -304,7 +323,7 @@ public IOSDriver(ClientConfig clientConfig, Capabilities capabilities) { * */ public IOSDriver(ClientConfig clientConfig, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(clientConfig, ensurePlatformName(capabilities, PLATFORM_NAME), appiumClientConfig); + this(null, null, clientConfig, null, appiumClientConfig, ensurePlatformName(capabilities, PLATFORM_NAME)); } /** @@ -313,7 +332,7 @@ public IOSDriver(ClientConfig clientConfig, Capabilities capabilities, AppiumCli * @param capabilities take a look at {@link Capabilities} */ public IOSDriver(Capabilities capabilities) { - super(ensurePlatformName(capabilities, PLATFORM_NAME)); + this(null, null, null, null, null, ensurePlatformName(capabilities, PLATFORM_NAME)); } /** @@ -323,7 +342,7 @@ public IOSDriver(Capabilities capabilities) { * @param appiumClientConfig take a look at {@link AppiumClientConfig} */ public IOSDriver(Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(ensurePlatformName(capabilities, PLATFORM_NAME), appiumClientConfig); + this(null, null, null, null, appiumClientConfig, ensurePlatformName(capabilities, PLATFORM_NAME)); } @Override public TargetLocator switchTo() { From 08a4d0149f721f1a90127c84c3f13759a3b1e4ba Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Sat, 27 Aug 2022 02:29:18 -0700 Subject: [PATCH 16/66] upadte others as well --- .../io/appium/java_client/AppiumDriver.java | 81 ----------------- .../java_client/android/AndroidDriver.java | 54 ++++++++---- .../appium/java_client/gecko/GeckoDriver.java | 73 +++++++++++---- .../io/appium/java_client/ios/IOSDriver.java | 54 ++++++++---- .../io/appium/java_client/mac/Mac2Driver.java | 87 +++++++++++------- .../remote/AppiumCommandExecutor.java | 18 +++- .../java_client/safari/SafariDriver.java | 88 ++++++++++++------- .../java_client/windows/WindowsDriver.java | 86 +++++++++++------- 8 files changed, 303 insertions(+), 238 deletions(-) diff --git a/src/main/java/io/appium/java_client/AppiumDriver.java b/src/main/java/io/appium/java_client/AppiumDriver.java index c1f8d164d..1ab8b1504 100644 --- a/src/main/java/io/appium/java_client/AppiumDriver.java +++ b/src/main/java/io/appium/java_client/AppiumDriver.java @@ -105,87 +105,6 @@ protected AppiumDriver( ); } - public AppiumDriver(ClientConfig clientConfig, Capabilities capabilities) { - this(null, null, clientConfig, null, null, capabilities); - } - - public AppiumDriver(ClientConfig clientConfig, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, null, clientConfig, null, appiumClientConfig, capabilities); - } - - public AppiumDriver(URL remoteAddress, Capabilities capabilities) { - this(remoteAddress, null, null, null, null, capabilities); - } - - public AppiumDriver(URL remoteAddress, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(remoteAddress, null, null, null, appiumClientConfig, capabilities); - } - - public AppiumDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, - Capabilities capabilities) { - this(remoteAddress, null, null, httpClientFactory, null, capabilities); - } - - public AppiumDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, - Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(remoteAddress, null, null, httpClientFactory, appiumClientConfig, capabilities); - } - - public AppiumDriver(AppiumDriverLocalService service, Capabilities capabilities) { - this(null, service, null, null, null, capabilities); - } - - public AppiumDriver(AppiumDriverLocalService service, Capabilities capabilities, - AppiumClientConfig appiumClientConfig) { - this(null, service, null, null, appiumClientConfig, capabilities); - } - - public AppiumDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, - Capabilities capabilities) { - this(null, service, null, httpClientFactory, null, capabilities); - } - - public AppiumDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, - Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, service, null, httpClientFactory, appiumClientConfig, capabilities); - } - - public AppiumDriver(AppiumServiceBuilder builder, Capabilities capabilities) { - this(null, builder.build(), null, null, null, capabilities); - } - - public AppiumDriver(AppiumServiceBuilder builder, Capabilities capabilities, - AppiumClientConfig appiumClientConfig) { - this(null, builder.build(), null, null, appiumClientConfig, capabilities); - } - - public AppiumDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, - Capabilities capabilities) { - this(null, builder.build(), null, httpClientFactory, null, capabilities); - } - - public AppiumDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, - Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, builder.build(), null, httpClientFactory, appiumClientConfig, capabilities); - } - - public AppiumDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities) { - this(null, null, null, httpClientFactory, null, capabilities); - } - - public AppiumDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities, - AppiumClientConfig appiumClientConfig) { - this(null, null, null, httpClientFactory, appiumClientConfig, capabilities); - } - - public AppiumDriver(Capabilities capabilities) { - this(null, null, null, null, null, capabilities); - } - - public AppiumDriver(Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, null, null, null, appiumClientConfig, capabilities); - } - /** * Changes platform name if it is not set and returns merged capabilities. * diff --git a/src/main/java/io/appium/java_client/android/AndroidDriver.java b/src/main/java/io/appium/java_client/android/AndroidDriver.java index cbc3d43e3..41c8e9b6b 100644 --- a/src/main/java/io/appium/java_client/android/AndroidDriver.java +++ b/src/main/java/io/appium/java_client/android/AndroidDriver.java @@ -134,7 +134,8 @@ public AndroidDriver(HttpCommandExecutor executor, Capabilities capabilities) { * @param capabilities take a look at {@link Capabilities} */ public AndroidDriver(URL remoteAddress, Capabilities capabilities) { - this(remoteAddress, null, null, null, null, ensurePlatformName(capabilities, ANDROID_PLATFORM)); + this(remoteAddress, null, null, null, null, + ensurePlatformName(capabilities, ANDROID_PLATFORM)); } /** @@ -145,7 +146,8 @@ public AndroidDriver(URL remoteAddress, Capabilities capabilities) { * @param appiumClientConfig take a look at {@link AppiumClientConfig} */ public AndroidDriver(URL remoteAddress, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(remoteAddress, null, null, null, appiumClientConfig, ensurePlatformName(capabilities, ANDROID_PLATFORM)); + this(remoteAddress, null, null, null, appiumClientConfig, + ensurePlatformName(capabilities, ANDROID_PLATFORM)); } /** @@ -157,7 +159,8 @@ public AndroidDriver(URL remoteAddress, Capabilities capabilities, AppiumClientC */ public AndroidDriver( URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - this(remoteAddress, null, null, httpClientFactory, null, ensurePlatformName(capabilities, ANDROID_PLATFORM)); + this(remoteAddress, null, null, httpClientFactory, null, + ensurePlatformName(capabilities, ANDROID_PLATFORM)); } /** @@ -171,7 +174,8 @@ public AndroidDriver( public AndroidDriver( URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(remoteAddress, null, null, httpClientFactory, appiumClientConfig, ensurePlatformName(capabilities, ANDROID_PLATFORM)); + this(remoteAddress, null, null, httpClientFactory, appiumClientConfig, + ensurePlatformName(capabilities, ANDROID_PLATFORM)); } /** @@ -181,7 +185,8 @@ public AndroidDriver( * @param capabilities take a look at {@link Capabilities} */ public AndroidDriver(AppiumDriverLocalService service, Capabilities capabilities) { - this(null, service, null, null, null, ensurePlatformName(capabilities, ANDROID_PLATFORM)); + this(null, service, null, null, null, + ensurePlatformName(capabilities, ANDROID_PLATFORM)); } /** @@ -193,7 +198,8 @@ public AndroidDriver(AppiumDriverLocalService service, Capabilities capabilities */ public AndroidDriver(AppiumDriverLocalService service, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, service, null, null, appiumClientConfig, ensurePlatformName(capabilities, ANDROID_PLATFORM)); + this(null, service, null, null, appiumClientConfig, + ensurePlatformName(capabilities, ANDROID_PLATFORM)); } /** @@ -205,7 +211,8 @@ public AndroidDriver(AppiumDriverLocalService service, Capabilities capabilities */ public AndroidDriver( AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - this(null, service, null, httpClientFactory, null, ensurePlatformName(capabilities, ANDROID_PLATFORM)); + this(null, service, null, httpClientFactory, null, + ensurePlatformName(capabilities, ANDROID_PLATFORM)); } /** @@ -219,7 +226,8 @@ public AndroidDriver( public AndroidDriver( AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, service, null, httpClientFactory, appiumClientConfig, ensurePlatformName(capabilities, ANDROID_PLATFORM)); + this(null, service, null, httpClientFactory, appiumClientConfig, + ensurePlatformName(capabilities, ANDROID_PLATFORM)); } /** @@ -229,7 +237,8 @@ public AndroidDriver( * @param capabilities take a look at {@link Capabilities} */ public AndroidDriver(AppiumServiceBuilder builder, Capabilities capabilities) { - this(null, builder.build(), null, null, null, ensurePlatformName(capabilities, ANDROID_PLATFORM)); + this(null, builder.build(), null, null, null, + ensurePlatformName(capabilities, ANDROID_PLATFORM)); } @@ -242,7 +251,8 @@ public AndroidDriver(AppiumServiceBuilder builder, Capabilities capabilities) { */ public AndroidDriver(AppiumServiceBuilder builder, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, builder.build(), null, null, appiumClientConfig, ensurePlatformName(capabilities, ANDROID_PLATFORM)); + this(null, builder.build(), null, null, appiumClientConfig, + ensurePlatformName(capabilities, ANDROID_PLATFORM)); } /** @@ -254,7 +264,8 @@ public AndroidDriver(AppiumServiceBuilder builder, Capabilities capabilities, */ public AndroidDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - this(null, builder.build(), null, httpClientFactory, null, ensurePlatformName(capabilities, ANDROID_PLATFORM)); + this(null, builder.build(), null, httpClientFactory, null, + ensurePlatformName(capabilities, ANDROID_PLATFORM)); } /** @@ -267,7 +278,8 @@ public AndroidDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClient */ public AndroidDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, builder.build(), null, httpClientFactory, appiumClientConfig, ensurePlatformName(capabilities, ANDROID_PLATFORM)); + this(null, builder.build(), null, httpClientFactory, appiumClientConfig, + ensurePlatformName(capabilities, ANDROID_PLATFORM)); } /** @@ -277,7 +289,8 @@ public AndroidDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClient * @param capabilities take a look at {@link Capabilities} */ public AndroidDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities) { - this(null, null, null, httpClientFactory, null, ensurePlatformName(capabilities, ANDROID_PLATFORM)); + this(null, null, null, httpClientFactory, null, + ensurePlatformName(capabilities, ANDROID_PLATFORM)); } /** @@ -289,7 +302,8 @@ public AndroidDriver(HttpClient.Factory httpClientFactory, Capabilities capabili */ public AndroidDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, null, null, httpClientFactory, appiumClientConfig, ensurePlatformName(capabilities, ANDROID_PLATFORM)); + this(null, null, null, httpClientFactory, appiumClientConfig, + ensurePlatformName(capabilities, ANDROID_PLATFORM)); } /** @@ -312,7 +326,8 @@ public AndroidDriver(HttpClient.Factory httpClientFactory, Capabilities capabili * */ public AndroidDriver(ClientConfig clientConfig, Capabilities capabilities) { - this(null, null, clientConfig, null, null, ensurePlatformName(capabilities, ANDROID_PLATFORM)); + this(null, null, clientConfig, null, null, + ensurePlatformName(capabilities, ANDROID_PLATFORM)); } /** @@ -338,7 +353,8 @@ public AndroidDriver(ClientConfig clientConfig, Capabilities capabilities) { */ public AndroidDriver(ClientConfig clientConfig, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, null, clientConfig, null, appiumClientConfig, ensurePlatformName(capabilities, ANDROID_PLATFORM)); + this(null, null, clientConfig, null, appiumClientConfig, + ensurePlatformName(capabilities, ANDROID_PLATFORM)); } /** @@ -347,7 +363,8 @@ public AndroidDriver(ClientConfig clientConfig, Capabilities capabilities, * @param capabilities take a look at {@link Capabilities} */ public AndroidDriver(Capabilities capabilities) { - this(null, null, null, null, null, ensurePlatformName(capabilities, ANDROID_PLATFORM)); + this(null, null, null, null, null, + ensurePlatformName(capabilities, ANDROID_PLATFORM)); } /** @@ -357,7 +374,8 @@ public AndroidDriver(Capabilities capabilities) { * @param appiumClientConfig take a look at {@link AppiumClientConfig} */ public AndroidDriver(Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, null, null, null, appiumClientConfig, ensurePlatformName(capabilities, ANDROID_PLATFORM)); + this(null, null, null, null, appiumClientConfig, + ensurePlatformName(capabilities, ANDROID_PLATFORM)); } /** diff --git a/src/main/java/io/appium/java_client/gecko/GeckoDriver.java b/src/main/java/io/appium/java_client/gecko/GeckoDriver.java index 0c51c9169..917f3bdf9 100644 --- a/src/main/java/io/appium/java_client/gecko/GeckoDriver.java +++ b/src/main/java/io/appium/java_client/gecko/GeckoDriver.java @@ -26,6 +26,7 @@ import org.openqa.selenium.remote.http.ClientConfig; import org.openqa.selenium.remote.http.HttpClient; +import javax.annotation.Nullable; import java.net.URL; /** @@ -41,72 +42,102 @@ public class GeckoDriver extends AppiumDriver { private static final String AUTOMATION_NAME = AutomationName.GECKO; + private GeckoDriver( + @Nullable URL remoteAddress, + @Nullable AppiumDriverLocalService service, + @Nullable ClientConfig clientConfig, + @Nullable HttpClient.Factory httpClientFactory, + @Nullable AppiumClientConfig appiumClientConfig, + @Nullable Capabilities capabilities) { + super( + remoteAddress, + service, + clientConfig, + httpClientFactory, + appiumClientConfig, + capabilities + ); + } + public GeckoDriver(HttpCommandExecutor executor, Capabilities capabilities) { super(executor, ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(URL remoteAddress, Capabilities capabilities) { - super(remoteAddress, ensureAutomationName(capabilities, AUTOMATION_NAME)); + this(remoteAddress, null, null, null, null, + ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(URL remoteAddress, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(remoteAddress, ensureAutomationName(capabilities, AUTOMATION_NAME), appiumClientConfig); + this(remoteAddress, null, null, null, appiumClientConfig, + ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(remoteAddress, httpClientFactory, ensureAutomationName(capabilities, AUTOMATION_NAME)); + this(remoteAddress, null, null, httpClientFactory, null, + ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(remoteAddress, httpClientFactory, ensureAutomationName(capabilities, AUTOMATION_NAME), - appiumClientConfig); + this(remoteAddress, null, null, httpClientFactory, appiumClientConfig, + ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(AppiumDriverLocalService service, Capabilities capabilities) { - super(service, ensureAutomationName(capabilities, AUTOMATION_NAME)); + this(null, service, null, null, null, + ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(AppiumDriverLocalService service, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(service, ensureAutomationName(capabilities, AUTOMATION_NAME), appiumClientConfig); + this(null, service, null, null, appiumClientConfig, + ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(service, httpClientFactory, ensureAutomationName(capabilities, AUTOMATION_NAME)); + this(null, service, null, httpClientFactory, null, + ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(service, httpClientFactory, ensureAutomationName(capabilities, AUTOMATION_NAME), appiumClientConfig); + this(null, service, null, httpClientFactory, appiumClientConfig, + ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(AppiumServiceBuilder builder, Capabilities capabilities) { - super(builder, ensureAutomationName(capabilities, AUTOMATION_NAME)); + this(null, builder.build(), null, null, null, + ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(AppiumServiceBuilder builder, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(builder, ensureAutomationName(capabilities, AUTOMATION_NAME), appiumClientConfig); + this(null, builder.build(), null, null, appiumClientConfig, + ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(builder, httpClientFactory, ensureAutomationName(capabilities, AUTOMATION_NAME)); + this(null, builder.build(), null, httpClientFactory, null, + ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(builder, httpClientFactory, ensureAutomationName(capabilities, AUTOMATION_NAME), appiumClientConfig); + this(null, builder.build(), null, httpClientFactory, appiumClientConfig, + ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(httpClientFactory, ensureAutomationName(capabilities, AUTOMATION_NAME)); + this(null, null, null, httpClientFactory, null, + ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(httpClientFactory, ensureAutomationName(capabilities, AUTOMATION_NAME), appiumClientConfig); + this(null, null, null, httpClientFactory, appiumClientConfig, + ensureAutomationName(capabilities, AUTOMATION_NAME)); } /** @@ -129,7 +160,8 @@ public GeckoDriver(HttpClient.Factory httpClientFactory, Capabilities capabiliti * */ public GeckoDriver(ClientConfig clientConfig, Capabilities capabilities) { - super(clientConfig, ensureAutomationName(capabilities, AUTOMATION_NAME)); + this(null, null, clientConfig, null, null, + ensureAutomationName(capabilities, AUTOMATION_NAME)); } /** @@ -154,14 +186,17 @@ public GeckoDriver(ClientConfig clientConfig, Capabilities capabilities) { * */ public GeckoDriver(ClientConfig clientConfig, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(clientConfig, ensureAutomationName(capabilities, AUTOMATION_NAME), appiumClientConfig); + this(null, null, clientConfig, null, appiumClientConfig, + ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(Capabilities capabilities) { - super(ensureAutomationName(capabilities, AUTOMATION_NAME)); + this(null, null, null, null, null, + ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(ensureAutomationName(capabilities, AUTOMATION_NAME), appiumClientConfig); + this(null, null, null, null, appiumClientConfig, + ensureAutomationName(capabilities, AUTOMATION_NAME)); } } diff --git a/src/main/java/io/appium/java_client/ios/IOSDriver.java b/src/main/java/io/appium/java_client/ios/IOSDriver.java index 57de8d95f..ebc81a7d8 100644 --- a/src/main/java/io/appium/java_client/ios/IOSDriver.java +++ b/src/main/java/io/appium/java_client/ios/IOSDriver.java @@ -122,7 +122,8 @@ private IOSDriver( * @param capabilities take a look at {@link Capabilities} */ public IOSDriver(URL remoteAddress, Capabilities capabilities) { - this(remoteAddress, null, null, null, null, ensurePlatformName(capabilities, PLATFORM_NAME)); + this(remoteAddress, null, null, null, null, + ensurePlatformName(capabilities, PLATFORM_NAME)); } /** @@ -133,7 +134,8 @@ public IOSDriver(URL remoteAddress, Capabilities capabilities) { * @param appiumClientConfig take a look at {@link AppiumClientConfig} */ public IOSDriver(URL remoteAddress, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(remoteAddress, null, null, null, appiumClientConfig, ensurePlatformName(capabilities, PLATFORM_NAME)); + this(remoteAddress, null, null, null, appiumClientConfig, + ensurePlatformName(capabilities, PLATFORM_NAME)); } /** @@ -145,7 +147,8 @@ public IOSDriver(URL remoteAddress, Capabilities capabilities, AppiumClientConfi */ public IOSDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - this(remoteAddress, null, null, httpClientFactory, null, ensurePlatformName(capabilities, PLATFORM_NAME)); + this(remoteAddress, null, null, httpClientFactory, null, + ensurePlatformName(capabilities, PLATFORM_NAME)); } /** @@ -158,7 +161,8 @@ public IOSDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, */ public IOSDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(remoteAddress, null, null, httpClientFactory, appiumClientConfig, ensurePlatformName(capabilities, PLATFORM_NAME)); + this(remoteAddress, null, null, httpClientFactory, appiumClientConfig, + ensurePlatformName(capabilities, PLATFORM_NAME)); } /** @@ -168,7 +172,8 @@ public IOSDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, * @param capabilities take a look at {@link Capabilities} */ public IOSDriver(AppiumDriverLocalService service, Capabilities capabilities) { - this(null, service, null, null, null, ensurePlatformName(capabilities, PLATFORM_NAME)); + this(null, service, null, null, null, + ensurePlatformName(capabilities, PLATFORM_NAME)); } /** @@ -180,7 +185,8 @@ public IOSDriver(AppiumDriverLocalService service, Capabilities capabilities) { */ public IOSDriver(AppiumDriverLocalService service, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, service, null, null, appiumClientConfig, ensurePlatformName(capabilities, PLATFORM_NAME)); + this(null, service, null, null, appiumClientConfig, + ensurePlatformName(capabilities, PLATFORM_NAME)); } @@ -193,7 +199,8 @@ public IOSDriver(AppiumDriverLocalService service, Capabilities capabilities, */ public IOSDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - this(null, service, null, httpClientFactory, null, ensurePlatformName(capabilities, PLATFORM_NAME)); + this(null, service, null, httpClientFactory, null, + ensurePlatformName(capabilities, PLATFORM_NAME)); } /** @@ -206,7 +213,8 @@ public IOSDriver(AppiumDriverLocalService service, HttpClient.Factory httpClient */ public IOSDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, service, null, httpClientFactory, appiumClientConfig, ensurePlatformName(capabilities, PLATFORM_NAME)); + this(null, service, null, httpClientFactory, appiumClientConfig, + ensurePlatformName(capabilities, PLATFORM_NAME)); } /** @@ -216,7 +224,8 @@ public IOSDriver(AppiumDriverLocalService service, HttpClient.Factory httpClient * @param capabilities take a look at {@link Capabilities} */ public IOSDriver(AppiumServiceBuilder builder, Capabilities capabilities) { - this(null, builder.build(), null, null, null, ensurePlatformName(capabilities, PLATFORM_NAME)); + this(null, builder.build(), null, null, null, + ensurePlatformName(capabilities, PLATFORM_NAME)); } /** @@ -227,7 +236,8 @@ public IOSDriver(AppiumServiceBuilder builder, Capabilities capabilities) { * @param appiumClientConfig take a look at {@link AppiumClientConfig} */ public IOSDriver(AppiumServiceBuilder builder, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, builder.build(), null, null, appiumClientConfig, ensurePlatformName(capabilities, PLATFORM_NAME)); + this(null, builder.build(), null, null, appiumClientConfig, + ensurePlatformName(capabilities, PLATFORM_NAME)); } /** @@ -239,7 +249,8 @@ public IOSDriver(AppiumServiceBuilder builder, Capabilities capabilities, Appium */ public IOSDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - this(null, builder.build(), null, httpClientFactory, null, ensurePlatformName(capabilities, PLATFORM_NAME)); + this(null, builder.build(), null, httpClientFactory, null, + ensurePlatformName(capabilities, PLATFORM_NAME)); } /** @@ -252,7 +263,8 @@ public IOSDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFact */ public IOSDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, builder.build(), null, httpClientFactory, appiumClientConfig, ensurePlatformName(capabilities, PLATFORM_NAME)); + this(null, builder.build(), null, httpClientFactory, appiumClientConfig, + ensurePlatformName(capabilities, PLATFORM_NAME)); } /** @@ -262,7 +274,8 @@ public IOSDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFact * @param capabilities take a look at {@link Capabilities} */ public IOSDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities) { - this(null, null, null, httpClientFactory, null, ensurePlatformName(capabilities, PLATFORM_NAME)); + this(null, null, null, httpClientFactory, null, + ensurePlatformName(capabilities, PLATFORM_NAME)); } /** @@ -274,7 +287,8 @@ public IOSDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities */ public IOSDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, null, null, httpClientFactory, appiumClientConfig, ensurePlatformName(capabilities, PLATFORM_NAME)); + this(null, null, null, httpClientFactory, appiumClientConfig, + ensurePlatformName(capabilities, PLATFORM_NAME)); } /** @@ -297,7 +311,8 @@ public IOSDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities * */ public IOSDriver(ClientConfig clientConfig, Capabilities capabilities) { - this(null, null, clientConfig, null, null, ensurePlatformName(capabilities, PLATFORM_NAME)); + this(null, null, clientConfig, null, null, + ensurePlatformName(capabilities, PLATFORM_NAME)); } @@ -323,7 +338,8 @@ public IOSDriver(ClientConfig clientConfig, Capabilities capabilities) { * */ public IOSDriver(ClientConfig clientConfig, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, null, clientConfig, null, appiumClientConfig, ensurePlatformName(capabilities, PLATFORM_NAME)); + this(null, null, clientConfig, null, appiumClientConfig, + ensurePlatformName(capabilities, PLATFORM_NAME)); } /** @@ -332,7 +348,8 @@ public IOSDriver(ClientConfig clientConfig, Capabilities capabilities, AppiumCli * @param capabilities take a look at {@link Capabilities} */ public IOSDriver(Capabilities capabilities) { - this(null, null, null, null, null, ensurePlatformName(capabilities, PLATFORM_NAME)); + this(null, null, null, null, null, + ensurePlatformName(capabilities, PLATFORM_NAME)); } /** @@ -342,7 +359,8 @@ public IOSDriver(Capabilities capabilities) { * @param appiumClientConfig take a look at {@link AppiumClientConfig} */ public IOSDriver(Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, null, null, null, appiumClientConfig, ensurePlatformName(capabilities, PLATFORM_NAME)); + this(null, null, null, null, appiumClientConfig, + ensurePlatformName(capabilities, PLATFORM_NAME)); } @Override public TargetLocator switchTo() { diff --git a/src/main/java/io/appium/java_client/mac/Mac2Driver.java b/src/main/java/io/appium/java_client/mac/Mac2Driver.java index 1f3ba4e88..35e2c6e17 100644 --- a/src/main/java/io/appium/java_client/mac/Mac2Driver.java +++ b/src/main/java/io/appium/java_client/mac/Mac2Driver.java @@ -29,6 +29,7 @@ import org.openqa.selenium.remote.http.ClientConfig; import org.openqa.selenium.remote.http.HttpClient; +import javax.annotation.Nullable; import java.net.URL; /** @@ -46,84 +47,102 @@ public class Mac2Driver extends AppiumDriver implements private static final String PLATFORM_NAME = Platform.MAC.name(); private static final String AUTOMATION_NAME = AutomationName.MAC2; + private Mac2Driver( + @Nullable URL remoteAddress, + @Nullable AppiumDriverLocalService service, + @Nullable ClientConfig clientConfig, + @Nullable HttpClient.Factory httpClientFactory, + @Nullable AppiumClientConfig appiumClientConfig, + @Nullable Capabilities capabilities) { + super( + remoteAddress, + service, + clientConfig, + httpClientFactory, + appiumClientConfig, + capabilities + ); + } + public Mac2Driver(HttpCommandExecutor executor, Capabilities capabilities) { super(executor, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(URL remoteAddress, Capabilities capabilities) { - super(remoteAddress, ensurePlatformAndAutomationNames( - capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + this(remoteAddress, null, null, null, null, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(URL remoteAddress, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(remoteAddress, ensurePlatformAndAutomationNames( - capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + this(remoteAddress, null, null, null, appiumClientConfig, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(remoteAddress, httpClientFactory, ensurePlatformAndAutomationNames( - capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + this(remoteAddress, null, null, httpClientFactory, null, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(remoteAddress, httpClientFactory, ensurePlatformAndAutomationNames( - capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + this(remoteAddress, null, null, httpClientFactory, appiumClientConfig, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(AppiumDriverLocalService service, Capabilities capabilities) { - super(service, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + this(null, service, null, null, null, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(AppiumDriverLocalService service, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(service, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME), - appiumClientConfig); + this(null, service, null, null, appiumClientConfig, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(service, httpClientFactory, ensurePlatformAndAutomationNames( - capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + this(null, service, null, httpClientFactory, null, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(service, httpClientFactory, ensurePlatformAndAutomationNames( - capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + this(null, service, null, httpClientFactory, null, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(AppiumServiceBuilder builder, Capabilities capabilities) { - super(builder, ensurePlatformAndAutomationNames( - capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + this(null, builder.build(), null, null, null, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(AppiumServiceBuilder builder, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(builder, ensurePlatformAndAutomationNames( - capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + this(null, builder.build(), null, null, appiumClientConfig, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(builder, httpClientFactory, ensurePlatformAndAutomationNames( - capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + this(null, builder.build(), null, httpClientFactory, null, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(builder, httpClientFactory, ensurePlatformAndAutomationNames( - capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + this(null, builder.build(), null, httpClientFactory, appiumClientConfig, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(httpClientFactory, ensurePlatformAndAutomationNames( - capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + this(null, null, null, httpClientFactory, null, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(httpClientFactory, ensurePlatformAndAutomationNames( - capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + this(null, null, null, httpClientFactory, appiumClientConfig, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } /** @@ -146,8 +165,8 @@ public Mac2Driver(HttpClient.Factory httpClientFactory, Capabilities capabilitie * */ public Mac2Driver(ClientConfig clientConfig, Capabilities capabilities) { - super(clientConfig, ensurePlatformAndAutomationNames( - capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + this(null, null, clientConfig, null, null, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } /** @@ -172,15 +191,17 @@ public Mac2Driver(ClientConfig clientConfig, Capabilities capabilities) { * */ public Mac2Driver(ClientConfig clientConfig, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(clientConfig, ensurePlatformAndAutomationNames( - capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + this(null, null, clientConfig, null, appiumClientConfig, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(Capabilities capabilities) { - super(ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + this(null, null, null, null, null, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + this(null, null, null, null, appiumClientConfig, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } } diff --git a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java index a172761b4..f3e45cc67 100644 --- a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java +++ b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java @@ -25,6 +25,7 @@ import com.google.common.base.Throwables; import io.appium.java_client.AppiumClientConfig; +import io.appium.java_client.service.local.AppiumServiceBuilder; import org.openqa.selenium.SessionNotCreatedException; import org.openqa.selenium.WebDriverException; import org.openqa.selenium.internal.Require; @@ -74,6 +75,17 @@ public class AppiumCommandExecutor extends HttpCommandExecutor { private static ClientConfig getAppiumDefaultClientConfig() { return ClientConfig.defaultConfig().readTimeout(DEFAULT_READ_TIMEOUT); } + + /** + * Create an AppiumCommandExecutor instance. + * + * @param additionalCommands is the map of Appium commands + * @param service take a look at {@link DriverService} + * @param addressOfRemoteServer is the address of remotely/locally started Appium server + * @param httpClientFactory take a look at {@link HttpClient.Factory} + * @param clientConfig take a look at {@link ClientConfig} + * @param appiumClientConfig take a look at {@link AppiumClientConfig} + */ public AppiumCommandExecutor( @Nonnull Map additionalCommands, @Nullable DriverService service, @@ -214,9 +226,9 @@ protected HttpClient getClient() { */ protected void overrideServerUrl(URL serverUrl) { setPrivateFieldValue(HttpCommandExecutor.class, "client", - ofNullable(this.httpClientFactory).orElseGet(HttpCommandExecutor::getDefaultClientFactory). - createClient(ofNullable(this.clientConfig).orElse( - AppiumCommandExecutor.getAppiumDefaultClientConfig()).baseUrl(serverUrl))); + ofNullable(this.httpClientFactory).orElseGet(HttpCommandExecutor::getDefaultClientFactory) + .createClient(ofNullable(this.clientConfig).orElse( + AppiumCommandExecutor.getAppiumDefaultClientConfig()).baseUrl(serverUrl))); } private Response createSession(Command command) throws IOException { diff --git a/src/main/java/io/appium/java_client/safari/SafariDriver.java b/src/main/java/io/appium/java_client/safari/SafariDriver.java index af3263201..83823cf9a 100644 --- a/src/main/java/io/appium/java_client/safari/SafariDriver.java +++ b/src/main/java/io/appium/java_client/safari/SafariDriver.java @@ -27,6 +27,7 @@ import org.openqa.selenium.remote.http.ClientConfig; import org.openqa.selenium.remote.http.HttpClient; +import javax.annotation.Nullable; import java.net.URL; /** @@ -42,86 +43,103 @@ public class SafariDriver extends AppiumDriver { private static final String PLATFORM_NAME = Platform.IOS.toString(); private static final String AUTOMATION_NAME = AutomationName.SAFARI; + private SafariDriver( + @Nullable URL remoteAddress, + @Nullable AppiumDriverLocalService service, + @Nullable ClientConfig clientConfig, + @Nullable HttpClient.Factory httpClientFactory, + @Nullable AppiumClientConfig appiumClientConfig, + @Nullable Capabilities capabilities) { + super( + remoteAddress, + service, + clientConfig, + httpClientFactory, + appiumClientConfig, + capabilities + ); + } + public SafariDriver(HttpCommandExecutor executor, Capabilities capabilities) { super(executor, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(URL remoteAddress, Capabilities capabilities) { - super(remoteAddress, ensurePlatformAndAutomationNames( - capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + this(remoteAddress, null, null, null, null, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(URL remoteAddress, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(remoteAddress, ensurePlatformAndAutomationNames( - capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + this(remoteAddress, null, null, null, appiumClientConfig, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(remoteAddress, httpClientFactory, ensurePlatformAndAutomationNames( - capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + this(remoteAddress, null, null, httpClientFactory, null, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(remoteAddress, httpClientFactory, ensurePlatformAndAutomationNames( - capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + this(remoteAddress, null, null, httpClientFactory, appiumClientConfig, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(AppiumDriverLocalService service, Capabilities capabilities) { - super(service, ensurePlatformAndAutomationNames( - capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + this(null, service, null, null, null, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(AppiumDriverLocalService service, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(service, ensurePlatformAndAutomationNames( - capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + this(null, service, null, null, appiumClientConfig, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(service, httpClientFactory, ensurePlatformAndAutomationNames( - capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + this(null, service, null, httpClientFactory, null, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(service, httpClientFactory, ensurePlatformAndAutomationNames( - capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + this(null, service, null, httpClientFactory, appiumClientConfig, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(AppiumServiceBuilder builder, Capabilities capabilities) { - super(builder, ensurePlatformAndAutomationNames( - capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + this(null, builder.build(), null, null, null, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(AppiumServiceBuilder builder, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(builder, ensurePlatformAndAutomationNames( - capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + this(null, builder.build(), null, null, appiumClientConfig, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(builder, httpClientFactory, ensurePlatformAndAutomationNames( - capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + this(null, builder.build(), null, httpClientFactory, null, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(builder, httpClientFactory, ensurePlatformAndAutomationNames( - capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + this(null, builder.build(), null, httpClientFactory, appiumClientConfig, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(httpClientFactory, ensurePlatformAndAutomationNames( - capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + this(null, null, null, httpClientFactory, null, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(httpClientFactory, ensurePlatformAndAutomationNames( - capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + this(null, null, null, httpClientFactory, appiumClientConfig, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } /** @@ -144,20 +162,22 @@ public SafariDriver(HttpClient.Factory httpClientFactory, Capabilities capabilit * */ public SafariDriver(ClientConfig clientConfig, Capabilities capabilities) { - super(clientConfig, ensurePlatformAndAutomationNames( - capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + this(null, null, clientConfig, null, null, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(ClientConfig clientConfig, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(clientConfig, ensurePlatformAndAutomationNames( - capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + this(null, null, clientConfig, null, appiumClientConfig, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(Capabilities capabilities) { - super(ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + this(null, null, null, null, null, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + this(null, null, null, null, appiumClientConfig, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } } diff --git a/src/main/java/io/appium/java_client/windows/WindowsDriver.java b/src/main/java/io/appium/java_client/windows/WindowsDriver.java index b093c50b7..6402e4d39 100644 --- a/src/main/java/io/appium/java_client/windows/WindowsDriver.java +++ b/src/main/java/io/appium/java_client/windows/WindowsDriver.java @@ -32,6 +32,7 @@ import org.openqa.selenium.remote.http.ClientConfig; import org.openqa.selenium.remote.http.HttpClient; +import javax.annotation.Nullable; import java.net.URL; public class WindowsDriver extends AppiumDriver implements @@ -42,84 +43,103 @@ public class WindowsDriver extends AppiumDriver implements private static final String PLATFORM_NAME = Platform.WINDOWS.name(); private static final String AUTOMATION_NAME = AutomationName.WINDOWS; + private WindowsDriver( + @Nullable URL remoteAddress, + @Nullable AppiumDriverLocalService service, + @Nullable ClientConfig clientConfig, + @Nullable HttpClient.Factory httpClientFactory, + @Nullable AppiumClientConfig appiumClientConfig, + @Nullable Capabilities capabilities) { + super( + remoteAddress, + service, + clientConfig, + httpClientFactory, + appiumClientConfig, + capabilities + ); + } + public WindowsDriver(HttpCommandExecutor executor, Capabilities capabilities) { super(executor, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(URL remoteAddress, Capabilities capabilities) { - super(remoteAddress, ensurePlatformAndAutomationNames( - capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + this(remoteAddress, null, null, null, null, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(URL remoteAddress, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(remoteAddress, ensurePlatformAndAutomationNames( - capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + this(remoteAddress, null, null, null, appiumClientConfig, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(remoteAddress, httpClientFactory, ensurePlatformAndAutomationNames( - capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + this(remoteAddress, null, null, httpClientFactory, null, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(remoteAddress, httpClientFactory, ensurePlatformAndAutomationNames( - capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + this(remoteAddress, null, null, httpClientFactory, appiumClientConfig, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(AppiumDriverLocalService service, Capabilities capabilities) { - super(service, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + this(null, service, null, null, null, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(AppiumDriverLocalService service, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(service, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME), - appiumClientConfig); + this(null, service, null, null, appiumClientConfig, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(service, httpClientFactory, ensurePlatformAndAutomationNames( - capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + this(null, service, null, httpClientFactory, null, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(service, httpClientFactory, ensurePlatformAndAutomationNames( - capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + this(null, service, null, httpClientFactory, appiumClientConfig, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(AppiumServiceBuilder builder, Capabilities capabilities) { - super(builder, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + this(null, builder.build(), null, null, null, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(AppiumServiceBuilder builder, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(builder, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME), - appiumClientConfig); + this(null, builder.build(), null, null, appiumClientConfig, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(builder, httpClientFactory, ensurePlatformAndAutomationNames( - capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + this(null, builder.build(), null, httpClientFactory, null, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(builder, httpClientFactory, ensurePlatformAndAutomationNames( - capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + this(null, builder.build(), null, httpClientFactory, appiumClientConfig, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(httpClientFactory, ensurePlatformAndAutomationNames( - capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + this(null, null, null, httpClientFactory, null, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(httpClientFactory, ensurePlatformAndAutomationNames( - capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + this(null, null, null, httpClientFactory, appiumClientConfig, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } /** @@ -142,8 +162,8 @@ public WindowsDriver(HttpClient.Factory httpClientFactory, Capabilities capabili * */ public WindowsDriver(ClientConfig clientConfig, Capabilities capabilities) { - super(clientConfig, ensurePlatformAndAutomationNames( - capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + this(null, null, clientConfig, null, null, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } /** @@ -169,16 +189,18 @@ public WindowsDriver(ClientConfig clientConfig, Capabilities capabilities) { */ public WindowsDriver(ClientConfig clientConfig, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(clientConfig, ensurePlatformAndAutomationNames( - capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + this(null, null, clientConfig, null, appiumClientConfig, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(Capabilities capabilities) { - super(ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + this(null, null, null, null, null, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME), appiumClientConfig); + this(null, null, null, null, appiumClientConfig, + ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } /** From 0afaf50551c76945160f770223220d18571d089e Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Sat, 27 Aug 2022 09:48:27 -0700 Subject: [PATCH 17/66] refer to super --- .../java_client/android/AndroidDriver.java | 53 ++++++------------ .../appium/java_client/gecko/GeckoDriver.java | 53 ++++++------------ .../io/appium/java_client/ios/IOSDriver.java | 53 ++++++------------ .../io/appium/java_client/mac/Mac2Driver.java | 53 ++++++------------ .../java_client/safari/SafariDriver.java | 53 ++++++------------ .../java_client/windows/WindowsDriver.java | 55 +++++++------------ 6 files changed, 109 insertions(+), 211 deletions(-) diff --git a/src/main/java/io/appium/java_client/android/AndroidDriver.java b/src/main/java/io/appium/java_client/android/AndroidDriver.java index 41c8e9b6b..984fca3d1 100644 --- a/src/main/java/io/appium/java_client/android/AndroidDriver.java +++ b/src/main/java/io/appium/java_client/android/AndroidDriver.java @@ -98,23 +98,6 @@ public class AndroidDriver extends AppiumDriver implements private StringWebSocketClient logcatClient; - private AndroidDriver( - @Nullable URL remoteAddress, - @Nullable AppiumDriverLocalService service, - @Nullable ClientConfig clientConfig, - @Nullable HttpClient.Factory httpClientFactory, - @Nullable AppiumClientConfig appiumClientConfig, - @Nullable Capabilities capabilities) { - super( - remoteAddress, - service, - clientConfig, - httpClientFactory, - appiumClientConfig, - capabilities - ); - } - /** * Creates a new instance based on command {@code executor} and {@code capabilities}. * @@ -134,7 +117,7 @@ public AndroidDriver(HttpCommandExecutor executor, Capabilities capabilities) { * @param capabilities take a look at {@link Capabilities} */ public AndroidDriver(URL remoteAddress, Capabilities capabilities) { - this(remoteAddress, null, null, null, null, + super(remoteAddress, null, null, null, null, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } @@ -146,7 +129,7 @@ public AndroidDriver(URL remoteAddress, Capabilities capabilities) { * @param appiumClientConfig take a look at {@link AppiumClientConfig} */ public AndroidDriver(URL remoteAddress, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(remoteAddress, null, null, null, appiumClientConfig, + super(remoteAddress, null, null, null, appiumClientConfig, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } @@ -159,7 +142,7 @@ public AndroidDriver(URL remoteAddress, Capabilities capabilities, AppiumClientC */ public AndroidDriver( URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - this(remoteAddress, null, null, httpClientFactory, null, + super(remoteAddress, null, null, httpClientFactory, null, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } @@ -174,7 +157,7 @@ public AndroidDriver( public AndroidDriver( URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(remoteAddress, null, null, httpClientFactory, appiumClientConfig, + super(remoteAddress, null, null, httpClientFactory, appiumClientConfig, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } @@ -185,7 +168,7 @@ public AndroidDriver( * @param capabilities take a look at {@link Capabilities} */ public AndroidDriver(AppiumDriverLocalService service, Capabilities capabilities) { - this(null, service, null, null, null, + super(null, service, null, null, null, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } @@ -198,7 +181,7 @@ public AndroidDriver(AppiumDriverLocalService service, Capabilities capabilities */ public AndroidDriver(AppiumDriverLocalService service, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, service, null, null, appiumClientConfig, + super(null, service, null, null, appiumClientConfig, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } @@ -211,7 +194,7 @@ public AndroidDriver(AppiumDriverLocalService service, Capabilities capabilities */ public AndroidDriver( AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - this(null, service, null, httpClientFactory, null, + super(null, service, null, httpClientFactory, null, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } @@ -226,7 +209,7 @@ public AndroidDriver( public AndroidDriver( AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, service, null, httpClientFactory, appiumClientConfig, + super(null, service, null, httpClientFactory, appiumClientConfig, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } @@ -237,7 +220,7 @@ public AndroidDriver( * @param capabilities take a look at {@link Capabilities} */ public AndroidDriver(AppiumServiceBuilder builder, Capabilities capabilities) { - this(null, builder.build(), null, null, null, + super(null, builder.build(), null, null, null, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } @@ -251,7 +234,7 @@ public AndroidDriver(AppiumServiceBuilder builder, Capabilities capabilities) { */ public AndroidDriver(AppiumServiceBuilder builder, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, builder.build(), null, null, appiumClientConfig, + super(null, builder.build(), null, null, appiumClientConfig, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } @@ -264,7 +247,7 @@ public AndroidDriver(AppiumServiceBuilder builder, Capabilities capabilities, */ public AndroidDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - this(null, builder.build(), null, httpClientFactory, null, + super(null, builder.build(), null, httpClientFactory, null, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } @@ -278,7 +261,7 @@ public AndroidDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClient */ public AndroidDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, builder.build(), null, httpClientFactory, appiumClientConfig, + super(null, builder.build(), null, httpClientFactory, appiumClientConfig, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } @@ -289,7 +272,7 @@ public AndroidDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClient * @param capabilities take a look at {@link Capabilities} */ public AndroidDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities) { - this(null, null, null, httpClientFactory, null, + super(null, null, null, httpClientFactory, null, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } @@ -302,7 +285,7 @@ public AndroidDriver(HttpClient.Factory httpClientFactory, Capabilities capabili */ public AndroidDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, null, null, httpClientFactory, appiumClientConfig, + super(null, null, null, httpClientFactory, appiumClientConfig, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } @@ -326,7 +309,7 @@ public AndroidDriver(HttpClient.Factory httpClientFactory, Capabilities capabili * */ public AndroidDriver(ClientConfig clientConfig, Capabilities capabilities) { - this(null, null, clientConfig, null, null, + super(null, null, clientConfig, null, null, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } @@ -353,7 +336,7 @@ public AndroidDriver(ClientConfig clientConfig, Capabilities capabilities) { */ public AndroidDriver(ClientConfig clientConfig, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, null, clientConfig, null, appiumClientConfig, + super(null, null, clientConfig, null, appiumClientConfig, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } @@ -363,7 +346,7 @@ public AndroidDriver(ClientConfig clientConfig, Capabilities capabilities, * @param capabilities take a look at {@link Capabilities} */ public AndroidDriver(Capabilities capabilities) { - this(null, null, null, null, null, + super(null, null, null, null, null, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } @@ -374,7 +357,7 @@ public AndroidDriver(Capabilities capabilities) { * @param appiumClientConfig take a look at {@link AppiumClientConfig} */ public AndroidDriver(Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, null, null, null, appiumClientConfig, + super(null, null, null, null, appiumClientConfig, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } diff --git a/src/main/java/io/appium/java_client/gecko/GeckoDriver.java b/src/main/java/io/appium/java_client/gecko/GeckoDriver.java index 917f3bdf9..719737a6d 100644 --- a/src/main/java/io/appium/java_client/gecko/GeckoDriver.java +++ b/src/main/java/io/appium/java_client/gecko/GeckoDriver.java @@ -42,101 +42,84 @@ public class GeckoDriver extends AppiumDriver { private static final String AUTOMATION_NAME = AutomationName.GECKO; - private GeckoDriver( - @Nullable URL remoteAddress, - @Nullable AppiumDriverLocalService service, - @Nullable ClientConfig clientConfig, - @Nullable HttpClient.Factory httpClientFactory, - @Nullable AppiumClientConfig appiumClientConfig, - @Nullable Capabilities capabilities) { - super( - remoteAddress, - service, - clientConfig, - httpClientFactory, - appiumClientConfig, - capabilities - ); - } - public GeckoDriver(HttpCommandExecutor executor, Capabilities capabilities) { super(executor, ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(URL remoteAddress, Capabilities capabilities) { - this(remoteAddress, null, null, null, null, + super(remoteAddress, null, null, null, null, ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(URL remoteAddress, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(remoteAddress, null, null, null, appiumClientConfig, + super(remoteAddress, null, null, null, appiumClientConfig, ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - this(remoteAddress, null, null, httpClientFactory, null, + super(remoteAddress, null, null, httpClientFactory, null, ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(remoteAddress, null, null, httpClientFactory, appiumClientConfig, + super(remoteAddress, null, null, httpClientFactory, appiumClientConfig, ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(AppiumDriverLocalService service, Capabilities capabilities) { - this(null, service, null, null, null, + super(null, service, null, null, null, ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(AppiumDriverLocalService service, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, service, null, null, appiumClientConfig, + super(null, service, null, null, appiumClientConfig, ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - this(null, service, null, httpClientFactory, null, + super(null, service, null, httpClientFactory, null, ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, service, null, httpClientFactory, appiumClientConfig, + super(null, service, null, httpClientFactory, appiumClientConfig, ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(AppiumServiceBuilder builder, Capabilities capabilities) { - this(null, builder.build(), null, null, null, + super(null, builder.build(), null, null, null, ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(AppiumServiceBuilder builder, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, builder.build(), null, null, appiumClientConfig, + super(null, builder.build(), null, null, appiumClientConfig, ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - this(null, builder.build(), null, httpClientFactory, null, + super(null, builder.build(), null, httpClientFactory, null, ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, builder.build(), null, httpClientFactory, appiumClientConfig, + super(null, builder.build(), null, httpClientFactory, appiumClientConfig, ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities) { - this(null, null, null, httpClientFactory, null, + super(null, null, null, httpClientFactory, null, ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, null, null, httpClientFactory, appiumClientConfig, + super(null, null, null, httpClientFactory, appiumClientConfig, ensureAutomationName(capabilities, AUTOMATION_NAME)); } @@ -160,7 +143,7 @@ public GeckoDriver(HttpClient.Factory httpClientFactory, Capabilities capabiliti * */ public GeckoDriver(ClientConfig clientConfig, Capabilities capabilities) { - this(null, null, clientConfig, null, null, + super(null, null, clientConfig, null, null, ensureAutomationName(capabilities, AUTOMATION_NAME)); } @@ -186,17 +169,17 @@ public GeckoDriver(ClientConfig clientConfig, Capabilities capabilities) { * */ public GeckoDriver(ClientConfig clientConfig, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, null, clientConfig, null, appiumClientConfig, + super(null, null, clientConfig, null, appiumClientConfig, ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(Capabilities capabilities) { - this(null, null, null, null, null, + super(null, null, null, null, null, ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, null, null, null, appiumClientConfig, + super(null, null, null, null, appiumClientConfig, ensureAutomationName(capabilities, AUTOMATION_NAME)); } } diff --git a/src/main/java/io/appium/java_client/ios/IOSDriver.java b/src/main/java/io/appium/java_client/ios/IOSDriver.java index ebc81a7d8..3486742c6 100644 --- a/src/main/java/io/appium/java_client/ios/IOSDriver.java +++ b/src/main/java/io/appium/java_client/ios/IOSDriver.java @@ -98,23 +98,6 @@ public IOSDriver(HttpCommandExecutor executor, Capabilities capabilities) { super(executor, ensurePlatformName(capabilities, PLATFORM_NAME)); } - private IOSDriver( - @Nullable URL remoteAddress, - @Nullable AppiumDriverLocalService service, - @Nullable ClientConfig clientConfig, - @Nullable HttpClient.Factory httpClientFactory, - @Nullable AppiumClientConfig appiumClientConfig, - @Nullable Capabilities capabilities) { - super( - remoteAddress, - service, - clientConfig, - httpClientFactory, - appiumClientConfig, - capabilities - ); - } - /** * Creates a new instance based on Appium server URL and {@code capabilities}. * @@ -122,7 +105,7 @@ private IOSDriver( * @param capabilities take a look at {@link Capabilities} */ public IOSDriver(URL remoteAddress, Capabilities capabilities) { - this(remoteAddress, null, null, null, null, + super(remoteAddress, null, null, null, null, ensurePlatformName(capabilities, PLATFORM_NAME)); } @@ -134,7 +117,7 @@ public IOSDriver(URL remoteAddress, Capabilities capabilities) { * @param appiumClientConfig take a look at {@link AppiumClientConfig} */ public IOSDriver(URL remoteAddress, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(remoteAddress, null, null, null, appiumClientConfig, + super(remoteAddress, null, null, null, appiumClientConfig, ensurePlatformName(capabilities, PLATFORM_NAME)); } @@ -147,7 +130,7 @@ public IOSDriver(URL remoteAddress, Capabilities capabilities, AppiumClientConfi */ public IOSDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - this(remoteAddress, null, null, httpClientFactory, null, + super(remoteAddress, null, null, httpClientFactory, null, ensurePlatformName(capabilities, PLATFORM_NAME)); } @@ -161,7 +144,7 @@ public IOSDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, */ public IOSDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(remoteAddress, null, null, httpClientFactory, appiumClientConfig, + super(remoteAddress, null, null, httpClientFactory, appiumClientConfig, ensurePlatformName(capabilities, PLATFORM_NAME)); } @@ -172,7 +155,7 @@ public IOSDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, * @param capabilities take a look at {@link Capabilities} */ public IOSDriver(AppiumDriverLocalService service, Capabilities capabilities) { - this(null, service, null, null, null, + super(null, service, null, null, null, ensurePlatformName(capabilities, PLATFORM_NAME)); } @@ -185,7 +168,7 @@ public IOSDriver(AppiumDriverLocalService service, Capabilities capabilities) { */ public IOSDriver(AppiumDriverLocalService service, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, service, null, null, appiumClientConfig, + super(null, service, null, null, appiumClientConfig, ensurePlatformName(capabilities, PLATFORM_NAME)); } @@ -199,7 +182,7 @@ public IOSDriver(AppiumDriverLocalService service, Capabilities capabilities, */ public IOSDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - this(null, service, null, httpClientFactory, null, + super(null, service, null, httpClientFactory, null, ensurePlatformName(capabilities, PLATFORM_NAME)); } @@ -213,7 +196,7 @@ public IOSDriver(AppiumDriverLocalService service, HttpClient.Factory httpClient */ public IOSDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, service, null, httpClientFactory, appiumClientConfig, + super(null, service, null, httpClientFactory, appiumClientConfig, ensurePlatformName(capabilities, PLATFORM_NAME)); } @@ -224,7 +207,7 @@ public IOSDriver(AppiumDriverLocalService service, HttpClient.Factory httpClient * @param capabilities take a look at {@link Capabilities} */ public IOSDriver(AppiumServiceBuilder builder, Capabilities capabilities) { - this(null, builder.build(), null, null, null, + super(null, builder.build(), null, null, null, ensurePlatformName(capabilities, PLATFORM_NAME)); } @@ -236,7 +219,7 @@ public IOSDriver(AppiumServiceBuilder builder, Capabilities capabilities) { * @param appiumClientConfig take a look at {@link AppiumClientConfig} */ public IOSDriver(AppiumServiceBuilder builder, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, builder.build(), null, null, appiumClientConfig, + super(null, builder.build(), null, null, appiumClientConfig, ensurePlatformName(capabilities, PLATFORM_NAME)); } @@ -249,7 +232,7 @@ public IOSDriver(AppiumServiceBuilder builder, Capabilities capabilities, Appium */ public IOSDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - this(null, builder.build(), null, httpClientFactory, null, + super(null, builder.build(), null, httpClientFactory, null, ensurePlatformName(capabilities, PLATFORM_NAME)); } @@ -263,7 +246,7 @@ public IOSDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFact */ public IOSDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, builder.build(), null, httpClientFactory, appiumClientConfig, + super(null, builder.build(), null, httpClientFactory, appiumClientConfig, ensurePlatformName(capabilities, PLATFORM_NAME)); } @@ -274,7 +257,7 @@ public IOSDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFact * @param capabilities take a look at {@link Capabilities} */ public IOSDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities) { - this(null, null, null, httpClientFactory, null, + super(null, null, null, httpClientFactory, null, ensurePlatformName(capabilities, PLATFORM_NAME)); } @@ -287,7 +270,7 @@ public IOSDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities */ public IOSDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, null, null, httpClientFactory, appiumClientConfig, + super(null, null, null, httpClientFactory, appiumClientConfig, ensurePlatformName(capabilities, PLATFORM_NAME)); } @@ -311,7 +294,7 @@ public IOSDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities * */ public IOSDriver(ClientConfig clientConfig, Capabilities capabilities) { - this(null, null, clientConfig, null, null, + super(null, null, clientConfig, null, null, ensurePlatformName(capabilities, PLATFORM_NAME)); } @@ -338,7 +321,7 @@ public IOSDriver(ClientConfig clientConfig, Capabilities capabilities) { * */ public IOSDriver(ClientConfig clientConfig, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, null, clientConfig, null, appiumClientConfig, + super(null, null, clientConfig, null, appiumClientConfig, ensurePlatformName(capabilities, PLATFORM_NAME)); } @@ -348,7 +331,7 @@ public IOSDriver(ClientConfig clientConfig, Capabilities capabilities, AppiumCli * @param capabilities take a look at {@link Capabilities} */ public IOSDriver(Capabilities capabilities) { - this(null, null, null, null, null, + super(null, null, null, null, null, ensurePlatformName(capabilities, PLATFORM_NAME)); } @@ -359,7 +342,7 @@ public IOSDriver(Capabilities capabilities) { * @param appiumClientConfig take a look at {@link AppiumClientConfig} */ public IOSDriver(Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, null, null, null, appiumClientConfig, + super(null, null, null, null, appiumClientConfig, ensurePlatformName(capabilities, PLATFORM_NAME)); } diff --git a/src/main/java/io/appium/java_client/mac/Mac2Driver.java b/src/main/java/io/appium/java_client/mac/Mac2Driver.java index 35e2c6e17..b3e5e47c4 100644 --- a/src/main/java/io/appium/java_client/mac/Mac2Driver.java +++ b/src/main/java/io/appium/java_client/mac/Mac2Driver.java @@ -47,101 +47,84 @@ public class Mac2Driver extends AppiumDriver implements private static final String PLATFORM_NAME = Platform.MAC.name(); private static final String AUTOMATION_NAME = AutomationName.MAC2; - private Mac2Driver( - @Nullable URL remoteAddress, - @Nullable AppiumDriverLocalService service, - @Nullable ClientConfig clientConfig, - @Nullable HttpClient.Factory httpClientFactory, - @Nullable AppiumClientConfig appiumClientConfig, - @Nullable Capabilities capabilities) { - super( - remoteAddress, - service, - clientConfig, - httpClientFactory, - appiumClientConfig, - capabilities - ); - } - public Mac2Driver(HttpCommandExecutor executor, Capabilities capabilities) { super(executor, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(URL remoteAddress, Capabilities capabilities) { - this(remoteAddress, null, null, null, null, + super(remoteAddress, null, null, null, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(URL remoteAddress, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(remoteAddress, null, null, null, appiumClientConfig, + super(remoteAddress, null, null, null, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - this(remoteAddress, null, null, httpClientFactory, null, + super(remoteAddress, null, null, httpClientFactory, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(remoteAddress, null, null, httpClientFactory, appiumClientConfig, + super(remoteAddress, null, null, httpClientFactory, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(AppiumDriverLocalService service, Capabilities capabilities) { - this(null, service, null, null, null, + super(null, service, null, null, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(AppiumDriverLocalService service, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, service, null, null, appiumClientConfig, + super(null, service, null, null, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - this(null, service, null, httpClientFactory, null, + super(null, service, null, httpClientFactory, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, service, null, httpClientFactory, null, + super(null, service, null, httpClientFactory, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(AppiumServiceBuilder builder, Capabilities capabilities) { - this(null, builder.build(), null, null, null, + super(null, builder.build(), null, null, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(AppiumServiceBuilder builder, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, builder.build(), null, null, appiumClientConfig, + super(null, builder.build(), null, null, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - this(null, builder.build(), null, httpClientFactory, null, + super(null, builder.build(), null, httpClientFactory, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, builder.build(), null, httpClientFactory, appiumClientConfig, + super(null, builder.build(), null, httpClientFactory, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(HttpClient.Factory httpClientFactory, Capabilities capabilities) { - this(null, null, null, httpClientFactory, null, + super(null, null, null, httpClientFactory, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, null, null, httpClientFactory, appiumClientConfig, + super(null, null, null, httpClientFactory, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } @@ -165,7 +148,7 @@ public Mac2Driver(HttpClient.Factory httpClientFactory, Capabilities capabilitie * */ public Mac2Driver(ClientConfig clientConfig, Capabilities capabilities) { - this(null, null, clientConfig, null, null, + super(null, null, clientConfig, null, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } @@ -191,17 +174,17 @@ public Mac2Driver(ClientConfig clientConfig, Capabilities capabilities) { * */ public Mac2Driver(ClientConfig clientConfig, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, null, clientConfig, null, appiumClientConfig, + super(null, null, clientConfig, null, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(Capabilities capabilities) { - this(null, null, null, null, null, + super(null, null, null, null, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, null, null, null, appiumClientConfig, + super(null, null, null, null, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } } diff --git a/src/main/java/io/appium/java_client/safari/SafariDriver.java b/src/main/java/io/appium/java_client/safari/SafariDriver.java index 83823cf9a..2d1fba2d6 100644 --- a/src/main/java/io/appium/java_client/safari/SafariDriver.java +++ b/src/main/java/io/appium/java_client/safari/SafariDriver.java @@ -43,102 +43,85 @@ public class SafariDriver extends AppiumDriver { private static final String PLATFORM_NAME = Platform.IOS.toString(); private static final String AUTOMATION_NAME = AutomationName.SAFARI; - private SafariDriver( - @Nullable URL remoteAddress, - @Nullable AppiumDriverLocalService service, - @Nullable ClientConfig clientConfig, - @Nullable HttpClient.Factory httpClientFactory, - @Nullable AppiumClientConfig appiumClientConfig, - @Nullable Capabilities capabilities) { - super( - remoteAddress, - service, - clientConfig, - httpClientFactory, - appiumClientConfig, - capabilities - ); - } - public SafariDriver(HttpCommandExecutor executor, Capabilities capabilities) { super(executor, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(URL remoteAddress, Capabilities capabilities) { - this(remoteAddress, null, null, null, null, + super(remoteAddress, null, null, null, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(URL remoteAddress, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(remoteAddress, null, null, null, appiumClientConfig, + super(remoteAddress, null, null, null, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - this(remoteAddress, null, null, httpClientFactory, null, + super(remoteAddress, null, null, httpClientFactory, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(remoteAddress, null, null, httpClientFactory, appiumClientConfig, + super(remoteAddress, null, null, httpClientFactory, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(AppiumDriverLocalService service, Capabilities capabilities) { - this(null, service, null, null, null, + super(null, service, null, null, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(AppiumDriverLocalService service, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, service, null, null, appiumClientConfig, + super(null, service, null, null, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - this(null, service, null, httpClientFactory, null, + super(null, service, null, httpClientFactory, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, service, null, httpClientFactory, appiumClientConfig, + super(null, service, null, httpClientFactory, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(AppiumServiceBuilder builder, Capabilities capabilities) { - this(null, builder.build(), null, null, null, + super(null, builder.build(), null, null, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(AppiumServiceBuilder builder, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, builder.build(), null, null, appiumClientConfig, + super(null, builder.build(), null, null, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - this(null, builder.build(), null, httpClientFactory, null, + super(null, builder.build(), null, httpClientFactory, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, builder.build(), null, httpClientFactory, appiumClientConfig, + super(null, builder.build(), null, httpClientFactory, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities) { - this(null, null, null, httpClientFactory, null, + super(null, null, null, httpClientFactory, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, null, null, httpClientFactory, appiumClientConfig, + super(null, null, null, httpClientFactory, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } @@ -162,22 +145,22 @@ public SafariDriver(HttpClient.Factory httpClientFactory, Capabilities capabilit * */ public SafariDriver(ClientConfig clientConfig, Capabilities capabilities) { - this(null, null, clientConfig, null, null, + super(null, null, clientConfig, null, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(ClientConfig clientConfig, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, null, clientConfig, null, appiumClientConfig, + super(null, null, clientConfig, null, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(Capabilities capabilities) { - this(null, null, null, null, null, + super(null, null, null, null, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, null, null, null, appiumClientConfig, + super(null, null, null, null, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } } diff --git a/src/main/java/io/appium/java_client/windows/WindowsDriver.java b/src/main/java/io/appium/java_client/windows/WindowsDriver.java index 6402e4d39..461de523e 100644 --- a/src/main/java/io/appium/java_client/windows/WindowsDriver.java +++ b/src/main/java/io/appium/java_client/windows/WindowsDriver.java @@ -42,103 +42,86 @@ public class WindowsDriver extends AppiumDriver implements CanRecordScreen { private static final String PLATFORM_NAME = Platform.WINDOWS.name(); private static final String AUTOMATION_NAME = AutomationName.WINDOWS; - - private WindowsDriver( - @Nullable URL remoteAddress, - @Nullable AppiumDriverLocalService service, - @Nullable ClientConfig clientConfig, - @Nullable HttpClient.Factory httpClientFactory, - @Nullable AppiumClientConfig appiumClientConfig, - @Nullable Capabilities capabilities) { - super( - remoteAddress, - service, - clientConfig, - httpClientFactory, - appiumClientConfig, - capabilities - ); - } - + public WindowsDriver(HttpCommandExecutor executor, Capabilities capabilities) { super(executor, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(URL remoteAddress, Capabilities capabilities) { - this(remoteAddress, null, null, null, null, + super(remoteAddress, null, null, null, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(URL remoteAddress, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(remoteAddress, null, null, null, appiumClientConfig, + super(remoteAddress, null, null, null, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - this(remoteAddress, null, null, httpClientFactory, null, + super(remoteAddress, null, null, httpClientFactory, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(remoteAddress, null, null, httpClientFactory, appiumClientConfig, + super(remoteAddress, null, null, httpClientFactory, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(AppiumDriverLocalService service, Capabilities capabilities) { - this(null, service, null, null, null, + super(null, service, null, null, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(AppiumDriverLocalService service, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, service, null, null, appiumClientConfig, + super(null, service, null, null, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - this(null, service, null, httpClientFactory, null, + super(null, service, null, httpClientFactory, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, service, null, httpClientFactory, appiumClientConfig, + super(null, service, null, httpClientFactory, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(AppiumServiceBuilder builder, Capabilities capabilities) { - this(null, builder.build(), null, null, null, + super(null, builder.build(), null, null, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(AppiumServiceBuilder builder, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, builder.build(), null, null, appiumClientConfig, + super(null, builder.build(), null, null, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - this(null, builder.build(), null, httpClientFactory, null, + super(null, builder.build(), null, httpClientFactory, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, builder.build(), null, httpClientFactory, appiumClientConfig, + super(null, builder.build(), null, httpClientFactory, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities) { - this(null, null, null, httpClientFactory, null, + super(null, null, null, httpClientFactory, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, null, null, httpClientFactory, appiumClientConfig, + super(null, null, null, httpClientFactory, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } @@ -162,7 +145,7 @@ public WindowsDriver(HttpClient.Factory httpClientFactory, Capabilities capabili * */ public WindowsDriver(ClientConfig clientConfig, Capabilities capabilities) { - this(null, null, clientConfig, null, null, + super(null, null, clientConfig, null, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } @@ -189,17 +172,17 @@ public WindowsDriver(ClientConfig clientConfig, Capabilities capabilities) { */ public WindowsDriver(ClientConfig clientConfig, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, null, clientConfig, null, appiumClientConfig, + super(null, null, clientConfig, null, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(Capabilities capabilities) { - this(null, null, null, null, null, + super(null, null, null, null, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - this(null, null, null, null, appiumClientConfig, + super(null, null, null, null, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } From e6ea9692236931a1a7fdddbefd8a8a37b3594155 Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Sat, 27 Aug 2022 10:21:11 -0700 Subject: [PATCH 18/66] raise an exception --- .../remote/AppiumCommandExecutor.java | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java index f3e45cc67..d7da008e6 100644 --- a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java +++ b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java @@ -18,6 +18,7 @@ import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Throwables.throwIfUnchecked; +import static io.appium.java_client.internal.CapabilityHelpers.APPIUM_PREFIX; import static java.util.Optional.ofNullable; import static org.openqa.selenium.remote.DriverCommand.NEW_SESSION; @@ -25,7 +26,7 @@ import com.google.common.base.Throwables; import io.appium.java_client.AppiumClientConfig; -import io.appium.java_client.service.local.AppiumServiceBuilder; +import org.openqa.selenium.InvalidArgumentException; import org.openqa.selenium.SessionNotCreatedException; import org.openqa.selenium.WebDriverException; import org.openqa.selenium.internal.Require; @@ -262,7 +263,7 @@ public void refreshAdditionalCommands() { } @SuppressWarnings("unchecked") - private void setDirectConnect(Response response) throws MalformedURLException { + private void setDirectConnect(Response response) throws WebDriverException { Map responseValue = (Map) response.getValue(); String directConnectProtocol = getDirectConnectValue(responseValue, @@ -280,16 +281,25 @@ private void setDirectConnect(Response response) throws MalformedURLException { } if (!directConnectProtocol.contentEquals("https")) { - // TODO: add error handling - return; + throw new WebDriverException( + String.format("The protocol must be https. %s was given.", directConnectProtocol)); } - overrideServerUrl(new URL(directConnectProtocol + "://" + directConnectHost + ":" - + directConnectPort + directConnectPath)); + + URL newUrl; + String newUrlCandidate = String.format("%s://%s:%s%s", + directConnectProtocol, directConnectHost, directConnectPort, directConnectPath); + try { + newUrl = new URL(newUrlCandidate); + } catch (MalformedURLException e) { + throw new WebDriverException(String.format("directConnect generated invalid URL as %s", newUrlCandidate)); + } + + overrideServerUrl(newUrl); } @Nullable private String getDirectConnectValue(Map responseValue, String key) { - String directConnectPath = String.valueOf(responseValue.get("appium:" + key)); + String directConnectPath = String.valueOf(responseValue.get(APPIUM_PREFIX + key)); return directConnectPath == null ? String.valueOf(responseValue.get(key)) : directConnectPath; } From 9ee52cbc993018ce861873e9057e9372f3eee8c5 Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Sat, 27 Aug 2022 22:42:43 -0700 Subject: [PATCH 19/66] keep clientconfig as part of appiumclientconfig --- .../java_client/AppiumClientConfig.java | 26 ++++++- .../io/appium/java_client/AppiumDriver.java | 2 - .../java_client/android/AndroidDriver.java | 76 +++++-------------- .../appium/java_client/gecko/GeckoDriver.java | 69 +++++------------ .../io/appium/java_client/ios/IOSDriver.java | 76 +++++-------------- .../io/appium/java_client/mac/Mac2Driver.java | 69 +++++------------ .../remote/AppiumCommandExecutor.java | 48 ++++-------- .../java_client/safari/SafariDriver.java | 49 +++++------- .../java_client/windows/WindowsDriver.java | 70 +++++------------ 9 files changed, 161 insertions(+), 324 deletions(-) diff --git a/src/main/java/io/appium/java_client/AppiumClientConfig.java b/src/main/java/io/appium/java_client/AppiumClientConfig.java index 61a4535fe..f4d6df4a1 100644 --- a/src/main/java/io/appium/java_client/AppiumClientConfig.java +++ b/src/main/java/io/appium/java_client/AppiumClientConfig.java @@ -16,14 +16,24 @@ package io.appium.java_client; +import org.openqa.selenium.remote.http.ClientConfig; + +import java.time.Duration; + /** * Manage Appium Client configurations. */ public class AppiumClientConfig { - private boolean directConnect = false; + private boolean directConnect; + + private ClientConfig clientConfig; + + private static final Duration DEFAULT_READ_TIMEOUT = Duration.ofMinutes(10); public AppiumClientConfig() { + this.clientConfig = ClientConfig.defaultConfig().readTimeout(DEFAULT_READ_TIMEOUT); + this.directConnect = false; } public static class DirectConnect { @@ -62,4 +72,18 @@ public AppiumClientConfig directConnect(boolean directConnect) { public boolean isDirectConnectEnabled() { return this.directConnect; } + + /** + * Set the given {@link ClientConfig} for the HTTP client instance. + * @param clientConfig to keep it in AppiumClientConfig instance + * @return A self reference + */ + public AppiumClientConfig setHttpClientConfig(ClientConfig clientConfig) { + this.clientConfig = clientConfig; + return this; + } + + public ClientConfig getHttpClientConfig() { + return this.clientConfig; + } } diff --git a/src/main/java/io/appium/java_client/AppiumDriver.java b/src/main/java/io/appium/java_client/AppiumDriver.java index 1ab8b1504..77933d15f 100644 --- a/src/main/java/io/appium/java_client/AppiumDriver.java +++ b/src/main/java/io/appium/java_client/AppiumDriver.java @@ -88,7 +88,6 @@ public AppiumDriver(HttpCommandExecutor executor, Capabilities capabilities) { protected AppiumDriver( @Nullable URL remoteAddress, @Nullable AppiumDriverLocalService service, - @Nullable ClientConfig clientConfig, @Nullable HttpClient.Factory httpClientFactory, @Nullable AppiumClientConfig appiumClientConfig, @Nullable Capabilities capabilities) { @@ -99,7 +98,6 @@ protected AppiumDriver( service, remoteAddress, httpClientFactory, - clientConfig, appiumClientConfig), capabilities ); diff --git a/src/main/java/io/appium/java_client/android/AndroidDriver.java b/src/main/java/io/appium/java_client/android/AndroidDriver.java index 984fca3d1..136e2d1a8 100644 --- a/src/main/java/io/appium/java_client/android/AndroidDriver.java +++ b/src/main/java/io/appium/java_client/android/AndroidDriver.java @@ -117,7 +117,7 @@ public AndroidDriver(HttpCommandExecutor executor, Capabilities capabilities) { * @param capabilities take a look at {@link Capabilities} */ public AndroidDriver(URL remoteAddress, Capabilities capabilities) { - super(remoteAddress, null, null, null, null, + super(remoteAddress, null, null, null, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } @@ -129,7 +129,7 @@ public AndroidDriver(URL remoteAddress, Capabilities capabilities) { * @param appiumClientConfig take a look at {@link AppiumClientConfig} */ public AndroidDriver(URL remoteAddress, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(remoteAddress, null, null, null, appiumClientConfig, + super(remoteAddress, null, null, appiumClientConfig, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } @@ -142,7 +142,7 @@ public AndroidDriver(URL remoteAddress, Capabilities capabilities, AppiumClientC */ public AndroidDriver( URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(remoteAddress, null, null, httpClientFactory, null, + super(remoteAddress, null, httpClientFactory, null, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } @@ -157,7 +157,7 @@ public AndroidDriver( public AndroidDriver( URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(remoteAddress, null, null, httpClientFactory, appiumClientConfig, + super(remoteAddress, null, httpClientFactory, appiumClientConfig, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } @@ -168,7 +168,7 @@ public AndroidDriver( * @param capabilities take a look at {@link Capabilities} */ public AndroidDriver(AppiumDriverLocalService service, Capabilities capabilities) { - super(null, service, null, null, null, + super(null, service, null, null, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } @@ -181,7 +181,7 @@ public AndroidDriver(AppiumDriverLocalService service, Capabilities capabilities */ public AndroidDriver(AppiumDriverLocalService service, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, service, null, null, appiumClientConfig, + super(null, service, null, appiumClientConfig, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } @@ -194,7 +194,7 @@ public AndroidDriver(AppiumDriverLocalService service, Capabilities capabilities */ public AndroidDriver( AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(null, service, null, httpClientFactory, null, + super(null, service, httpClientFactory, null, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } @@ -209,7 +209,7 @@ public AndroidDriver( public AndroidDriver( AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, service, null, httpClientFactory, appiumClientConfig, + super(null, service, httpClientFactory, appiumClientConfig, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } @@ -220,7 +220,7 @@ public AndroidDriver( * @param capabilities take a look at {@link Capabilities} */ public AndroidDriver(AppiumServiceBuilder builder, Capabilities capabilities) { - super(null, builder.build(), null, null, null, + super(null, builder.build(), null, null, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } @@ -234,7 +234,7 @@ public AndroidDriver(AppiumServiceBuilder builder, Capabilities capabilities) { */ public AndroidDriver(AppiumServiceBuilder builder, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, builder.build(), null, null, appiumClientConfig, + super(null, builder.build(), null, appiumClientConfig, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } @@ -247,7 +247,7 @@ public AndroidDriver(AppiumServiceBuilder builder, Capabilities capabilities, */ public AndroidDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(null, builder.build(), null, httpClientFactory, null, + super(null, builder.build(), httpClientFactory, null, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } @@ -261,7 +261,7 @@ public AndroidDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClient */ public AndroidDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, builder.build(), null, httpClientFactory, appiumClientConfig, + super(null, builder.build(), httpClientFactory, appiumClientConfig, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } @@ -272,7 +272,7 @@ public AndroidDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClient * @param capabilities take a look at {@link Capabilities} */ public AndroidDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(null, null, null, httpClientFactory, null, + super(null, null, httpClientFactory, null, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } @@ -285,7 +285,7 @@ public AndroidDriver(HttpClient.Factory httpClientFactory, Capabilities capabili */ public AndroidDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, null, null, httpClientFactory, appiumClientConfig, + super(null, null, httpClientFactory, appiumClientConfig, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } @@ -299,44 +299,19 @@ public AndroidDriver(HttpClient.Factory httpClientFactory, Capabilities capabili * ClientConfig clientConfig = ClientConfig.defaultConfig() * .baseUri(URI.create("WebDriver URL")) * .readTimeout(Duration.ofMinutes(5)); + * AppiumClientConfig appiumClientConfig = AppiumClientConfig.defaultConfig() + * .setHttpClientConfig(clientConfig).directConnect(true); * UiAutomator2Options options = new UiAutomator2Options(); - * AndroidDriver driver = new AndroidDriver(clientConfig, options); + * AndroidDriver driver = new AndroidDriver(options, clientConfig); * * * - * @param clientConfig take a look at {@link ClientConfig} - * @param capabilities take a look at {@link Capabilities} - * - */ - public AndroidDriver(ClientConfig clientConfig, Capabilities capabilities) { - super(null, null, clientConfig, null, null, - ensurePlatformName(capabilities, ANDROID_PLATFORM)); - } - - /** - * Creates a new instance based on the given ClientConfig and {@code capabilities}. - * The HTTP client is default client generated by {@link HttpCommandExecutor#getDefaultClientFactory}. - * For example: - * - *
-     *
-     * ClientConfig clientConfig = ClientConfig.defaultConfig()
-     *     .baseUri(URI.create("WebDriver URL"))
-     *     .readTimeout(Duration.ofMinutes(5));
-     * AppiumClientConfig appiumClientConfig = AppiumClientConfig.defaultConfig().directConnect(true);
-     * UiAutomator2Options options = new UiAutomator2Options();
-     * AndroidDriver driver = new AndroidDriver(clientConfig, options);
-     *
-     * 
- * - * @param clientConfig take a look at {@link ClientConfig} * @param capabilities take a look at {@link Capabilities} * @param appiumClientConfig take a look at {@link AppiumClientConfig} * */ - public AndroidDriver(ClientConfig clientConfig, Capabilities capabilities, - AppiumClientConfig appiumClientConfig) { - super(null, null, clientConfig, null, appiumClientConfig, + public AndroidDriver(Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(null, null, null, appiumClientConfig, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } @@ -346,18 +321,7 @@ public AndroidDriver(ClientConfig clientConfig, Capabilities capabilities, * @param capabilities take a look at {@link Capabilities} */ public AndroidDriver(Capabilities capabilities) { - super(null, null, null, null, null, - ensurePlatformName(capabilities, ANDROID_PLATFORM)); - } - - /** - * Creates a new instance based on {@code capabilities}. - * - * @param capabilities take a look at {@link Capabilities} - * @param appiumClientConfig take a look at {@link AppiumClientConfig} - */ - public AndroidDriver(Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, null, null, null, appiumClientConfig, + super(null, null, null, null, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } diff --git a/src/main/java/io/appium/java_client/gecko/GeckoDriver.java b/src/main/java/io/appium/java_client/gecko/GeckoDriver.java index 719737a6d..7c02a1a66 100644 --- a/src/main/java/io/appium/java_client/gecko/GeckoDriver.java +++ b/src/main/java/io/appium/java_client/gecko/GeckoDriver.java @@ -47,79 +47,79 @@ public GeckoDriver(HttpCommandExecutor executor, Capabilities capabilities) { } public GeckoDriver(URL remoteAddress, Capabilities capabilities) { - super(remoteAddress, null, null, null, null, + super(remoteAddress, null, null, null, ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(URL remoteAddress, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(remoteAddress, null, null, null, appiumClientConfig, + super(remoteAddress, null, null, appiumClientConfig, ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(remoteAddress, null, null, httpClientFactory, null, + super(remoteAddress, null, httpClientFactory, null, ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(remoteAddress, null, null, httpClientFactory, appiumClientConfig, + super(remoteAddress, null, httpClientFactory, appiumClientConfig, ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(AppiumDriverLocalService service, Capabilities capabilities) { - super(null, service, null, null, null, + super(null, service, null, null, ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(AppiumDriverLocalService service, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, service, null, null, appiumClientConfig, + super(null, service, null, appiumClientConfig, ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(null, service, null, httpClientFactory, null, + super(null, service, httpClientFactory, null, ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, service, null, httpClientFactory, appiumClientConfig, + super(null, service, httpClientFactory, appiumClientConfig, ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(AppiumServiceBuilder builder, Capabilities capabilities) { - super(null, builder.build(), null, null, null, + super(null, builder.build(), null, null, ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(AppiumServiceBuilder builder, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, builder.build(), null, null, appiumClientConfig, + super(null, builder.build(), null, appiumClientConfig, ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(null, builder.build(), null, httpClientFactory, null, + super(null, builder.build(), httpClientFactory, null, ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, builder.build(), null, httpClientFactory, appiumClientConfig, + super(null, builder.build(), httpClientFactory, appiumClientConfig, ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(null, null, null, httpClientFactory, null, + super(null, null, httpClientFactory, null, ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, null, null, httpClientFactory, appiumClientConfig, + super(null, null, httpClientFactory, appiumClientConfig, ensureAutomationName(capabilities, AUTOMATION_NAME)); } @@ -133,53 +133,24 @@ public GeckoDriver(HttpClient.Factory httpClientFactory, Capabilities capabiliti * ClientConfig clientConfig = ClientConfig.defaultConfig() * .baseUri(URI.create("WebDriver URL")) * .readTimeout(Duration.ofMinutes(5)); + * AppiumClientConfig appiumClientConfig = AppiumClientConfig.defaultConfig() + * .setHttpClientConfig(clientConfig).directConnect(true); * GeckoOptions options = new GeckoOptions(); - * GeckoDriver driver = new GeckoDriver(clientConfig, options); + * GeckoDriver driver = new GeckoDriver(options, appiumClientConfig); * * * - * @param clientConfig take a look at {@link ClientConfig} - * @param capabilities take a look at {@link Capabilities} - * - */ - public GeckoDriver(ClientConfig clientConfig, Capabilities capabilities) { - super(null, null, clientConfig, null, null, - ensureAutomationName(capabilities, AUTOMATION_NAME)); - } - - /** - * Creates a new instance based on the given ClientConfig and {@code capabilities}. - * The HTTP client is default client generated by {@link HttpCommandExecutor#getDefaultClientFactory}. - * For example: - * - *
-     *
-     * ClientConfig clientConfig = ClientConfig.defaultConfig()
-     *     .baseUri(URI.create("WebDriver URL"))
-     *     .readTimeout(Duration.ofMinutes(5));
-     * AppiumClientConfig appiumClientConfig = AppiumClientConfig.defaultConfig().directConnect(false);
-     * GeckoOptions options = new GeckoOptions();
-     * GeckoDriver driver = new GeckoDriver(clientConfig, options, appiumClientConfig);
-     *
-     * 
- * - * @param clientConfig take a look at {@link ClientConfig} * @param capabilities take a look at {@link Capabilities} * @param appiumClientConfig take a look at {@link AppiumClientConfig} * */ - public GeckoDriver(ClientConfig clientConfig, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, null, clientConfig, null, appiumClientConfig, + public GeckoDriver(Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(null, null, null, appiumClientConfig, ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(Capabilities capabilities) { - super(null, null, null, null, null, - ensureAutomationName(capabilities, AUTOMATION_NAME)); - } - - public GeckoDriver(Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, null, null, null, appiumClientConfig, + super(null, null, null, null, ensureAutomationName(capabilities, AUTOMATION_NAME)); } } diff --git a/src/main/java/io/appium/java_client/ios/IOSDriver.java b/src/main/java/io/appium/java_client/ios/IOSDriver.java index 3486742c6..203ef59fd 100644 --- a/src/main/java/io/appium/java_client/ios/IOSDriver.java +++ b/src/main/java/io/appium/java_client/ios/IOSDriver.java @@ -105,7 +105,7 @@ public IOSDriver(HttpCommandExecutor executor, Capabilities capabilities) { * @param capabilities take a look at {@link Capabilities} */ public IOSDriver(URL remoteAddress, Capabilities capabilities) { - super(remoteAddress, null, null, null, null, + super(remoteAddress, null, null, null, ensurePlatformName(capabilities, PLATFORM_NAME)); } @@ -117,7 +117,7 @@ public IOSDriver(URL remoteAddress, Capabilities capabilities) { * @param appiumClientConfig take a look at {@link AppiumClientConfig} */ public IOSDriver(URL remoteAddress, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(remoteAddress, null, null, null, appiumClientConfig, + super(remoteAddress, null, null, appiumClientConfig, ensurePlatformName(capabilities, PLATFORM_NAME)); } @@ -130,7 +130,7 @@ public IOSDriver(URL remoteAddress, Capabilities capabilities, AppiumClientConfi */ public IOSDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(remoteAddress, null, null, httpClientFactory, null, + super(remoteAddress, null, httpClientFactory, null, ensurePlatformName(capabilities, PLATFORM_NAME)); } @@ -144,7 +144,7 @@ public IOSDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, */ public IOSDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(remoteAddress, null, null, httpClientFactory, appiumClientConfig, + super(remoteAddress, null, httpClientFactory, appiumClientConfig, ensurePlatformName(capabilities, PLATFORM_NAME)); } @@ -155,7 +155,7 @@ public IOSDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, * @param capabilities take a look at {@link Capabilities} */ public IOSDriver(AppiumDriverLocalService service, Capabilities capabilities) { - super(null, service, null, null, null, + super(null, service, null, null, ensurePlatformName(capabilities, PLATFORM_NAME)); } @@ -168,7 +168,7 @@ public IOSDriver(AppiumDriverLocalService service, Capabilities capabilities) { */ public IOSDriver(AppiumDriverLocalService service, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, service, null, null, appiumClientConfig, + super(null, service, null, appiumClientConfig, ensurePlatformName(capabilities, PLATFORM_NAME)); } @@ -182,7 +182,7 @@ public IOSDriver(AppiumDriverLocalService service, Capabilities capabilities, */ public IOSDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(null, service, null, httpClientFactory, null, + super(null, service, httpClientFactory, null, ensurePlatformName(capabilities, PLATFORM_NAME)); } @@ -196,7 +196,7 @@ public IOSDriver(AppiumDriverLocalService service, HttpClient.Factory httpClient */ public IOSDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, service, null, httpClientFactory, appiumClientConfig, + super(null, service, httpClientFactory, appiumClientConfig, ensurePlatformName(capabilities, PLATFORM_NAME)); } @@ -207,7 +207,7 @@ public IOSDriver(AppiumDriverLocalService service, HttpClient.Factory httpClient * @param capabilities take a look at {@link Capabilities} */ public IOSDriver(AppiumServiceBuilder builder, Capabilities capabilities) { - super(null, builder.build(), null, null, null, + super(null, builder.build(), null, null, ensurePlatformName(capabilities, PLATFORM_NAME)); } @@ -219,7 +219,7 @@ public IOSDriver(AppiumServiceBuilder builder, Capabilities capabilities) { * @param appiumClientConfig take a look at {@link AppiumClientConfig} */ public IOSDriver(AppiumServiceBuilder builder, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, builder.build(), null, null, appiumClientConfig, + super(null, builder.build(), null, appiumClientConfig, ensurePlatformName(capabilities, PLATFORM_NAME)); } @@ -232,7 +232,7 @@ public IOSDriver(AppiumServiceBuilder builder, Capabilities capabilities, Appium */ public IOSDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(null, builder.build(), null, httpClientFactory, null, + super(null, builder.build(), httpClientFactory, null, ensurePlatformName(capabilities, PLATFORM_NAME)); } @@ -246,7 +246,7 @@ public IOSDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFact */ public IOSDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, builder.build(), null, httpClientFactory, appiumClientConfig, + super(null, builder.build(), httpClientFactory, appiumClientConfig, ensurePlatformName(capabilities, PLATFORM_NAME)); } @@ -257,7 +257,7 @@ public IOSDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFact * @param capabilities take a look at {@link Capabilities} */ public IOSDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(null, null, null, httpClientFactory, null, + super(null, null, httpClientFactory, null, ensurePlatformName(capabilities, PLATFORM_NAME)); } @@ -270,7 +270,7 @@ public IOSDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities */ public IOSDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, null, null, httpClientFactory, appiumClientConfig, + super(null, null, httpClientFactory, appiumClientConfig, ensurePlatformName(capabilities, PLATFORM_NAME)); } @@ -284,44 +284,19 @@ public IOSDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities * ClientConfig clientConfig = ClientConfig.defaultConfig() * .baseUri(URI.create("WebDriver URL")) * .readTimeout(Duration.ofMinutes(5)); + * AppiumClientConfig appiumClientConfig = AppiumClientConfig.defaultConfig() + * .setHttpClientConfig(clientConfig).directConnect(true); * XCUITestOptions options = new XCUITestOptions(); - * IOSDriver driver = new IOSDriver(clientConfig, options); + * IOSDriver driver = new IOSDriver(options, appiumClientConfig); * * * - * @param clientConfig take a look at {@link ClientConfig} - * @param capabilities take a look at {@link Capabilities} - * - */ - public IOSDriver(ClientConfig clientConfig, Capabilities capabilities) { - super(null, null, clientConfig, null, null, - ensurePlatformName(capabilities, PLATFORM_NAME)); - } - - - /** - * Creates a new instance based on the given ClientConfig and {@code capabilities}. - * The HTTP client is default client generated by {@link HttpCommandExecutor#getDefaultClientFactory}. - * For example: - * - *
-     *
-     * ClientConfig clientConfig = ClientConfig.defaultConfig()
-     *     .baseUri(URI.create("WebDriver URL"))
-     *     .readTimeout(Duration.ofMinutes(5));
-     * AppiumClientConfig appiumClientConfig = AppiumClientConfig.defaultConfig().directConnect(true)
-     * XCUITestOptions options = new XCUITestOptions();
-     * IOSDriver driver = new IOSDriver(clientConfig, options, appiumClientConfig);
-     *
-     * 
- * - * @param clientConfig take a look at {@link ClientConfig} * @param capabilities take a look at {@link Capabilities} * @param appiumClientConfig take a look at {@link AppiumClientConfig} * */ - public IOSDriver(ClientConfig clientConfig, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, null, clientConfig, null, appiumClientConfig, + public IOSDriver(Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(null, null, null, appiumClientConfig, ensurePlatformName(capabilities, PLATFORM_NAME)); } @@ -331,18 +306,7 @@ public IOSDriver(ClientConfig clientConfig, Capabilities capabilities, AppiumCli * @param capabilities take a look at {@link Capabilities} */ public IOSDriver(Capabilities capabilities) { - super(null, null, null, null, null, - ensurePlatformName(capabilities, PLATFORM_NAME)); - } - - /** - * Creates a new instance based on {@code capabilities}. - * - * @param capabilities take a look at {@link Capabilities} - * @param appiumClientConfig take a look at {@link AppiumClientConfig} - */ - public IOSDriver(Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, null, null, null, appiumClientConfig, + super(null, null, null, null, ensurePlatformName(capabilities, PLATFORM_NAME)); } diff --git a/src/main/java/io/appium/java_client/mac/Mac2Driver.java b/src/main/java/io/appium/java_client/mac/Mac2Driver.java index b3e5e47c4..e7720b615 100644 --- a/src/main/java/io/appium/java_client/mac/Mac2Driver.java +++ b/src/main/java/io/appium/java_client/mac/Mac2Driver.java @@ -52,79 +52,79 @@ public Mac2Driver(HttpCommandExecutor executor, Capabilities capabilities) { } public Mac2Driver(URL remoteAddress, Capabilities capabilities) { - super(remoteAddress, null, null, null, null, + super(remoteAddress, null, null, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(URL remoteAddress, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(remoteAddress, null, null, null, appiumClientConfig, + super(remoteAddress, null, null, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(remoteAddress, null, null, httpClientFactory, null, + super(remoteAddress, null, httpClientFactory, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(remoteAddress, null, null, httpClientFactory, appiumClientConfig, + super(remoteAddress, null, httpClientFactory, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(AppiumDriverLocalService service, Capabilities capabilities) { - super(null, service, null, null, null, + super(null, service, null, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(AppiumDriverLocalService service, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, service, null, null, appiumClientConfig, + super(null, service, null, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(null, service, null, httpClientFactory, null, + super(null, service, httpClientFactory, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, service, null, httpClientFactory, null, + super(null, service, httpClientFactory, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(AppiumServiceBuilder builder, Capabilities capabilities) { - super(null, builder.build(), null, null, null, + super(null, builder.build(), null, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(AppiumServiceBuilder builder, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, builder.build(), null, null, appiumClientConfig, + super(null, builder.build(), null, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(null, builder.build(), null, httpClientFactory, null, + super(null, builder.build(), httpClientFactory, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, builder.build(), null, httpClientFactory, appiumClientConfig, + super(null, builder.build(), httpClientFactory, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(null, null, null, httpClientFactory, null, + super(null, null, httpClientFactory, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, null, null, httpClientFactory, appiumClientConfig, + super(null, null, httpClientFactory, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } @@ -138,53 +138,24 @@ public Mac2Driver(HttpClient.Factory httpClientFactory, Capabilities capabilitie * ClientConfig clientConfig = ClientConfig.defaultConfig() * .baseUri(URI.create("WebDriver URL")) * .readTimeout(Duration.ofMinutes(5)); + * AppiumClientConfig appiumClientConfig = AppiumClientConfig.defaultConfig() + * .setHttpClientConfig(clientConfig).directConnect(true); * Mac2Options options = new Mac2Options(); - * Mac2Driver driver = new Mac2Driver(clientConfig, options); + * Mac2Driver driver = new Mac2Driver(options, appiumClientConfig); * * * - * @param clientConfig take a look at {@link ClientConfig} - * @param capabilities take a look at {@link Capabilities} - * - */ - public Mac2Driver(ClientConfig clientConfig, Capabilities capabilities) { - super(null, null, clientConfig, null, null, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); - } - - /** - * Creates a new instance based on the given ClientConfig and {@code capabilities}. - * The HTTP client is default client generated by {@link HttpCommandExecutor#getDefaultClientFactory}. - * For example: - * - *
-     *
-     * ClientConfig clientConfig = ClientConfig.defaultConfig()
-     *     .baseUri(URI.create("WebDriver URL"))
-     *     .readTimeout(Duration.ofMinutes(5));
-     * AppiumClientConfig appiumClientConfig = AppiumClientConfig.defaultConfig().directConnect(true);
-     * Mac2Options options = new Mac2Options();
-     * Mac2Driver driver = new Mac2Driver(clientConfig, options, appiumClientConfig);
-     *
-     * 
- * - * @param clientConfig take a look at {@link ClientConfig} * @param capabilities take a look at {@link Capabilities} * @param appiumClientConfig take a look at {@link AppiumClientConfig} * */ - public Mac2Driver(ClientConfig clientConfig, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, null, clientConfig, null, appiumClientConfig, + public Mac2Driver(Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(null, null, null, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(Capabilities capabilities) { - super(null, null, null, null, null, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); - } - - public Mac2Driver(Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, null, null, null, appiumClientConfig, + super(null, null, null, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } } diff --git a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java index d7da008e6..16695c892 100644 --- a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java +++ b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java @@ -26,7 +26,6 @@ import com.google.common.base.Throwables; import io.appium.java_client.AppiumClientConfig; -import org.openqa.selenium.InvalidArgumentException; import org.openqa.selenium.SessionNotCreatedException; import org.openqa.selenium.WebDriverException; import org.openqa.selenium.internal.Require; @@ -41,7 +40,6 @@ import org.openqa.selenium.remote.Response; import org.openqa.selenium.remote.ResponseCodec; import org.openqa.selenium.remote.codec.w3c.W3CHttpCommandCodec; -import org.openqa.selenium.remote.http.ClientConfig; import org.openqa.selenium.remote.http.HttpClient; import org.openqa.selenium.remote.http.HttpRequest; import org.openqa.selenium.remote.http.HttpResponse; @@ -69,13 +67,8 @@ public class AppiumCommandExecutor extends HttpCommandExecutor { private final HttpClient.Factory httpClientFactory; - private final ClientConfig clientConfig; - private final AppiumClientConfig appiumClientConfig; - private static ClientConfig getAppiumDefaultClientConfig() { - return ClientConfig.defaultConfig().readTimeout(DEFAULT_READ_TIMEOUT); - } /** * Create an AppiumCommandExecutor instance. @@ -84,7 +77,6 @@ private static ClientConfig getAppiumDefaultClientConfig() { * @param service take a look at {@link DriverService} * @param addressOfRemoteServer is the address of remotely/locally started Appium server * @param httpClientFactory take a look at {@link HttpClient.Factory} - * @param clientConfig take a look at {@link ClientConfig} * @param appiumClientConfig take a look at {@link AppiumClientConfig} */ public AppiumCommandExecutor( @@ -92,44 +84,41 @@ public AppiumCommandExecutor( @Nullable DriverService service, @Nullable URL addressOfRemoteServer, @Nullable HttpClient.Factory httpClientFactory, - @Nullable ClientConfig clientConfig, @Nullable AppiumClientConfig appiumClientConfig) { super(additionalCommands, - ofNullable(clientConfig).orElse( - AppiumCommandExecutor.getAppiumDefaultClientConfig() - .baseUrl(Require.nonNull( - "Server URL", - Objects.requireNonNull(ofNullable(service) - .map(DriverService::getUrl) - .orElse(addressOfRemoteServer)) - )) + appiumClientConfig.getHttpClientConfig() + .baseUrl(Require.nonNull( + "Server URL", + Objects.requireNonNull(ofNullable(service) + .map(DriverService::getUrl) + .orElse(addressOfRemoteServer)) + ) ), ofNullable(httpClientFactory).orElseGet(HttpCommandExecutor::getDefaultClientFactory) ); serviceOptional = ofNullable(service); - this.clientConfig = clientConfig; this.httpClientFactory = httpClientFactory; this.appiumClientConfig = appiumClientConfig; } public AppiumCommandExecutor(Map additionalCommands, DriverService service, HttpClient.Factory httpClientFactory) { - this(additionalCommands, checkNotNull(service), null, httpClientFactory, null, + this(additionalCommands, checkNotNull(service), null, httpClientFactory, AppiumClientConfig.defaultConfig()); } public AppiumCommandExecutor(Map additionalCommands, DriverService service, HttpClient.Factory httpClientFactory, AppiumClientConfig appiumClientConfig) { - this(additionalCommands, checkNotNull(service), null, httpClientFactory, null, + this(additionalCommands, checkNotNull(service), null, httpClientFactory, appiumClientConfig); } public AppiumCommandExecutor(Map additionalCommands, URL addressOfRemoteServer, HttpClient.Factory httpClientFactory) { - this(additionalCommands, null, checkNotNull(addressOfRemoteServer), httpClientFactory, null, + this(additionalCommands, null, checkNotNull(addressOfRemoteServer), httpClientFactory, AppiumClientConfig.defaultConfig()); } @@ -137,19 +126,13 @@ public AppiumCommandExecutor(Map additionalCommands, URL addressOfRemoteServer, HttpClient.Factory httpClientFactory, AppiumClientConfig appiumClientConfig) { - this(additionalCommands, null, checkNotNull(addressOfRemoteServer), httpClientFactory, null, + this(additionalCommands, null, checkNotNull(addressOfRemoteServer), httpClientFactory, appiumClientConfig); } - public AppiumCommandExecutor(Map additionalCommands, ClientConfig clientConfig) { - this(additionalCommands, null, checkNotNull(clientConfig.baseUrl()), null, clientConfig, - AppiumClientConfig.defaultConfig()); - } - - public AppiumCommandExecutor(Map additionalCommands, ClientConfig clientConfig, - AppiumClientConfig appiumClientConfig) { - this(additionalCommands, null, checkNotNull(clientConfig.baseUrl()), null, clientConfig, - appiumClientConfig); + public AppiumCommandExecutor(Map additionalCommands, AppiumClientConfig appiumClientConfig) { + this(additionalCommands, null, checkNotNull(appiumClientConfig.getHttpClientConfig().baseUrl()), + null, appiumClientConfig); } public AppiumCommandExecutor(Map additionalCommands, @@ -228,8 +211,7 @@ protected HttpClient getClient() { protected void overrideServerUrl(URL serverUrl) { setPrivateFieldValue(HttpCommandExecutor.class, "client", ofNullable(this.httpClientFactory).orElseGet(HttpCommandExecutor::getDefaultClientFactory) - .createClient(ofNullable(this.clientConfig).orElse( - AppiumCommandExecutor.getAppiumDefaultClientConfig()).baseUrl(serverUrl))); + .createClient(this.appiumClientConfig.getHttpClientConfig().baseUrl(serverUrl))); } private Response createSession(Command command) throws IOException { diff --git a/src/main/java/io/appium/java_client/safari/SafariDriver.java b/src/main/java/io/appium/java_client/safari/SafariDriver.java index 2d1fba2d6..04f4b6a03 100644 --- a/src/main/java/io/appium/java_client/safari/SafariDriver.java +++ b/src/main/java/io/appium/java_client/safari/SafariDriver.java @@ -48,80 +48,80 @@ public SafariDriver(HttpCommandExecutor executor, Capabilities capabilities) { } public SafariDriver(URL remoteAddress, Capabilities capabilities) { - super(remoteAddress, null, null, null, null, + super(remoteAddress, null, null, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(URL remoteAddress, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(remoteAddress, null, null, null, appiumClientConfig, + super(remoteAddress, null, null, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(remoteAddress, null, null, httpClientFactory, null, + super(remoteAddress, null, httpClientFactory, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(remoteAddress, null, null, httpClientFactory, appiumClientConfig, + super(remoteAddress, null, httpClientFactory, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(AppiumDriverLocalService service, Capabilities capabilities) { - super(null, service, null, null, null, + super(null, service, null, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(AppiumDriverLocalService service, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, service, null, null, appiumClientConfig, + super(null, service, null, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(null, service, null, httpClientFactory, null, + super(null, service, httpClientFactory, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, service, null, httpClientFactory, appiumClientConfig, + super(null, service, httpClientFactory, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(AppiumServiceBuilder builder, Capabilities capabilities) { - super(null, builder.build(), null, null, null, + super(null, builder.build(), null, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(AppiumServiceBuilder builder, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, builder.build(), null, null, appiumClientConfig, + super(null, builder.build(), null, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(null, builder.build(), null, httpClientFactory, null, + super(null, builder.build(), httpClientFactory, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, builder.build(), null, httpClientFactory, appiumClientConfig, + super(null, builder.build(), httpClientFactory, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(null, null, null, httpClientFactory, null, + super(null, null, httpClientFactory, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, null, null, httpClientFactory, appiumClientConfig, + super(null, null, httpClientFactory, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } @@ -135,32 +135,25 @@ public SafariDriver(HttpClient.Factory httpClientFactory, Capabilities capabilit * ClientConfig clientConfig = ClientConfig.defaultConfig() * .baseUri(URI.create("WebDriver URL")) * .readTimeout(Duration.ofMinutes(5)); + * AppiumClientConfig appiumClientConfig = AppiumClientConfig.defaultConfig() + * .setHttpClientConfig(clientConfig).directConnect(true); * SafariOptions options = new SafariOptions(); - * SafariDriver driver = new SafariDriver(clientConfig, options); + * SafariDriver driver = new SafariDriver(options, appiumClientConfig); * * * - * @param clientConfig take a look at {@link ClientConfig} * @param capabilities take a look at {@link Capabilities} + * @param appiumClientConfig take a look at {@link AppiumClientConfig} * */ - public SafariDriver(ClientConfig clientConfig, Capabilities capabilities) { - super(null, null, clientConfig, null, null, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); - } - public SafariDriver(ClientConfig clientConfig, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, null, clientConfig, null, appiumClientConfig, + public SafariDriver(Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(null, null, null, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(Capabilities capabilities) { - super(null, null, null, null, null, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); - } - - public SafariDriver(Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, null, null, null, appiumClientConfig, + super(null, null, null, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } } diff --git a/src/main/java/io/appium/java_client/windows/WindowsDriver.java b/src/main/java/io/appium/java_client/windows/WindowsDriver.java index 461de523e..0c61b4d4b 100644 --- a/src/main/java/io/appium/java_client/windows/WindowsDriver.java +++ b/src/main/java/io/appium/java_client/windows/WindowsDriver.java @@ -48,80 +48,80 @@ public WindowsDriver(HttpCommandExecutor executor, Capabilities capabilities) { } public WindowsDriver(URL remoteAddress, Capabilities capabilities) { - super(remoteAddress, null, null, null, null, + super(remoteAddress, null, null, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(URL remoteAddress, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(remoteAddress, null, null, null, appiumClientConfig, + super(remoteAddress, null, null, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(remoteAddress, null, null, httpClientFactory, null, + super(remoteAddress, null, httpClientFactory, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(remoteAddress, null, null, httpClientFactory, appiumClientConfig, + super(remoteAddress, null, httpClientFactory, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(AppiumDriverLocalService service, Capabilities capabilities) { - super(null, service, null, null, null, + super(null, service, null, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(AppiumDriverLocalService service, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, service, null, null, appiumClientConfig, + super(null, service, null, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(null, service, null, httpClientFactory, null, + super(null, service, httpClientFactory, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, service, null, httpClientFactory, appiumClientConfig, + super(null, service, httpClientFactory, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(AppiumServiceBuilder builder, Capabilities capabilities) { - super(null, builder.build(), null, null, null, + super(null, builder.build(), null, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(AppiumServiceBuilder builder, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, builder.build(), null, null, appiumClientConfig, + super(null, builder.build(), null, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(null, builder.build(), null, httpClientFactory, null, + super(null, builder.build(), httpClientFactory, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, builder.build(), null, httpClientFactory, appiumClientConfig, + super(null, builder.build(), httpClientFactory, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(null, null, null, httpClientFactory, null, + super(null, null, httpClientFactory, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, null, null, httpClientFactory, appiumClientConfig, + super(null, null, httpClientFactory, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } @@ -135,54 +135,24 @@ public WindowsDriver(HttpClient.Factory httpClientFactory, Capabilities capabili * ClientConfig clientConfig = ClientConfig.defaultConfig() * .baseUri(URI.create("WebDriver URL")) * .readTimeout(Duration.ofMinutes(5)); + * AppiumClientConfig appiumClientConfig = AppiumClientConfig.defaultConfig() + * .setHttpClientConfig(clientConfig).directConnect(true); * WindowsOptions options = new WindowsOptions(); - * WindowsDriver driver = new WindowsDriver(clientConfig, options); + * WindowsDriver driver = new WindowsDriver(options, appiumClientConfig); * * * - * @param clientConfig take a look at {@link ClientConfig} - * @param capabilities take a look at {@link Capabilities} - * - */ - public WindowsDriver(ClientConfig clientConfig, Capabilities capabilities) { - super(null, null, clientConfig, null, null, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); - } - - /** - * Creates a new instance based on the given ClientConfig and {@code capabilities}. - * The HTTP client is default client generated by {@link HttpCommandExecutor#getDefaultClientFactory}. - * For example: - * - *
-     *
-     * ClientConfig clientConfig = ClientConfig.defaultConfig()
-     *     .baseUri(URI.create("WebDriver URL"))
-     *     .readTimeout(Duration.ofMinutes(5));
-     * AppiumClientConfig appiumClientConfig = AppiumClientConfig.defaultConfig().directConnect(true);
-     * WindowsOptions options = new WindowsOptions();
-     * WindowsDriver driver = new WindowsDriver(clientConfig, options, appiumClientConfig);
-     *
-     * 
- * - * @param clientConfig take a look at {@link ClientConfig} * @param capabilities take a look at {@link Capabilities} * @param appiumClientConfig take a look at {@link AppiumClientConfig} * */ - public WindowsDriver(ClientConfig clientConfig, Capabilities capabilities, - AppiumClientConfig appiumClientConfig) { - super(null, null, clientConfig, null, appiumClientConfig, + public WindowsDriver(Capabilities capabilities, AppiumClientConfig appiumClientConfig) { + super(null, null, null, appiumClientConfig, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(Capabilities capabilities) { - super(null, null, null, null, null, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); - } - - public WindowsDriver(Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, null, null, null, appiumClientConfig, + super(null, null, null, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } From 11c54b5db031bc7903e4483614e500d77a6a7ef0 Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Sat, 27 Aug 2022 22:45:53 -0700 Subject: [PATCH 20/66] tweak --- src/main/java/io/appium/java_client/AppiumDriver.java | 2 -- .../io/appium/java_client/remote/AppiumCommandExecutor.java | 3 ++- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/appium/java_client/AppiumDriver.java b/src/main/java/io/appium/java_client/AppiumDriver.java index 77933d15f..df90401ca 100644 --- a/src/main/java/io/appium/java_client/AppiumDriver.java +++ b/src/main/java/io/appium/java_client/AppiumDriver.java @@ -27,7 +27,6 @@ import io.appium.java_client.remote.MobileCapabilityType; import io.appium.java_client.remote.options.BaseOptions; import io.appium.java_client.service.local.AppiumDriverLocalService; -import io.appium.java_client.service.local.AppiumServiceBuilder; import org.openqa.selenium.Capabilities; import org.openqa.selenium.ImmutableCapabilities; import org.openqa.selenium.MutableCapabilities; @@ -41,7 +40,6 @@ import org.openqa.selenium.remote.RemoteWebDriver; import org.openqa.selenium.remote.Response; import org.openqa.selenium.remote.html5.RemoteLocationContext; -import org.openqa.selenium.remote.http.ClientConfig; import org.openqa.selenium.remote.http.HttpClient; import org.openqa.selenium.remote.http.HttpMethod; diff --git a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java index 16695c892..2ae4e3a86 100644 --- a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java +++ b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java @@ -87,7 +87,8 @@ public AppiumCommandExecutor( @Nullable AppiumClientConfig appiumClientConfig) { super(additionalCommands, - appiumClientConfig.getHttpClientConfig() + ofNullable(appiumClientConfig).orElse(AppiumClientConfig.defaultConfig()) + .getHttpClientConfig() .baseUrl(Require.nonNull( "Server URL", Objects.requireNonNull(ofNullable(service) From e7a751a1b72293aa48c7b1b58e075664d891ee8a Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Sat, 27 Aug 2022 23:12:41 -0700 Subject: [PATCH 21/66] tweak --- src/main/java/io/appium/java_client/android/AndroidDriver.java | 2 +- .../io/appium/java_client/remote/AppiumCommandExecutor.java | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/appium/java_client/android/AndroidDriver.java b/src/main/java/io/appium/java_client/android/AndroidDriver.java index 136e2d1a8..d6a378b05 100644 --- a/src/main/java/io/appium/java_client/android/AndroidDriver.java +++ b/src/main/java/io/appium/java_client/android/AndroidDriver.java @@ -302,7 +302,7 @@ public AndroidDriver(HttpClient.Factory httpClientFactory, Capabilities capabili * AppiumClientConfig appiumClientConfig = AppiumClientConfig.defaultConfig() * .setHttpClientConfig(clientConfig).directConnect(true); * UiAutomator2Options options = new UiAutomator2Options(); - * AndroidDriver driver = new AndroidDriver(options, clientConfig); + * AndroidDriver driver = new AndroidDriver(options, appiumClientConfig); * * * diff --git a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java index 2ae4e3a86..b6ae12f33 100644 --- a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java +++ b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java @@ -87,7 +87,8 @@ public AppiumCommandExecutor( @Nullable AppiumClientConfig appiumClientConfig) { super(additionalCommands, - ofNullable(appiumClientConfig).orElse(AppiumClientConfig.defaultConfig()) + ofNullable(appiumClientConfig) + .orElse(AppiumClientConfig.defaultConfig()) .getHttpClientConfig() .baseUrl(Require.nonNull( "Server URL", From 790857d24a3f5d09b52b945f1b65c245e3524070 Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Sat, 27 Aug 2022 23:48:20 -0700 Subject: [PATCH 22/66] modify address --- .../remote/AppiumCommandExecutor.java | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java index b6ae12f33..5e65e5ae0 100644 --- a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java +++ b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java @@ -82,7 +82,7 @@ public class AppiumCommandExecutor extends HttpCommandExecutor { public AppiumCommandExecutor( @Nonnull Map additionalCommands, @Nullable DriverService service, - @Nullable URL addressOfRemoteServer, + @Nonnull URL addressOfRemoteServer, @Nullable HttpClient.Factory httpClientFactory, @Nullable AppiumClientConfig appiumClientConfig) { @@ -90,14 +90,7 @@ public AppiumCommandExecutor( ofNullable(appiumClientConfig) .orElse(AppiumClientConfig.defaultConfig()) .getHttpClientConfig() - .baseUrl(Require.nonNull( - "Server URL", - Objects.requireNonNull(ofNullable(service) - .map(DriverService::getUrl) - .orElse(addressOfRemoteServer)) - ) - - ), + .baseUrl(addressOfRemoteServer), ofNullable(httpClientFactory).orElseGet(HttpCommandExecutor::getDefaultClientFactory) ); serviceOptional = ofNullable(service); @@ -108,13 +101,13 @@ public AppiumCommandExecutor( public AppiumCommandExecutor(Map additionalCommands, DriverService service, HttpClient.Factory httpClientFactory) { - this(additionalCommands, checkNotNull(service), null, httpClientFactory, + this(additionalCommands, checkNotNull(service), checkNotNull(service).getUrl(), httpClientFactory, AppiumClientConfig.defaultConfig()); } public AppiumCommandExecutor(Map additionalCommands, DriverService service, HttpClient.Factory httpClientFactory, AppiumClientConfig appiumClientConfig) { - this(additionalCommands, checkNotNull(service), null, httpClientFactory, + this(additionalCommands, checkNotNull(service), checkNotNull(service).getUrl(), httpClientFactory, appiumClientConfig); } @@ -139,13 +132,13 @@ public AppiumCommandExecutor(Map additionalCommands, Appium public AppiumCommandExecutor(Map additionalCommands, URL addressOfRemoteServer) { - this(additionalCommands, addressOfRemoteServer, HttpClient.Factory.createDefault(), + this(additionalCommands, checkNotNull(addressOfRemoteServer), HttpClient.Factory.createDefault(), AppiumClientConfig.defaultConfig()); } public AppiumCommandExecutor(Map additionalCommands, URL addressOfRemoteServer, AppiumClientConfig appiumClientConfig) { - this(additionalCommands, addressOfRemoteServer, HttpClient.Factory.createDefault(), appiumClientConfig); + this(additionalCommands, checkNotNull(addressOfRemoteServer), HttpClient.Factory.createDefault(), appiumClientConfig); } public AppiumCommandExecutor(Map additionalCommands, From fc96519b866c9fb702bb3f7184d950501ba69a12 Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Sat, 27 Aug 2022 23:49:29 -0700 Subject: [PATCH 23/66] fix typo --- .../io/appium/java_client/remote/AppiumCommandExecutor.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java index 5e65e5ae0..cbefaf406 100644 --- a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java +++ b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java @@ -138,7 +138,8 @@ public AppiumCommandExecutor(Map additionalCommands, public AppiumCommandExecutor(Map additionalCommands, URL addressOfRemoteServer, AppiumClientConfig appiumClientConfig) { - this(additionalCommands, checkNotNull(addressOfRemoteServer), HttpClient.Factory.createDefault(), appiumClientConfig); + this(additionalCommands, checkNotNull(addressOfRemoteServer), + HttpClient.Factory.createDefault(), appiumClientConfig); } public AppiumCommandExecutor(Map additionalCommands, From 1751304946d50ebbfe7da7eb63e26262f1ea86b0 Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Sun, 28 Aug 2022 00:20:16 -0700 Subject: [PATCH 24/66] tweak base url --- src/main/java/io/appium/java_client/AppiumDriver.java | 1 + .../appium/java_client/remote/AppiumCommandExecutor.java | 7 ++++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/appium/java_client/AppiumDriver.java b/src/main/java/io/appium/java_client/AppiumDriver.java index df90401ca..ccf2244d0 100644 --- a/src/main/java/io/appium/java_client/AppiumDriver.java +++ b/src/main/java/io/appium/java_client/AppiumDriver.java @@ -43,6 +43,7 @@ import org.openqa.selenium.remote.http.HttpClient; import org.openqa.selenium.remote.http.HttpMethod; +import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.lang.reflect.Field; import java.net.URL; diff --git a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java index cbefaf406..935b5eca6 100644 --- a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java +++ b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java @@ -82,15 +82,16 @@ public class AppiumCommandExecutor extends HttpCommandExecutor { public AppiumCommandExecutor( @Nonnull Map additionalCommands, @Nullable DriverService service, - @Nonnull URL addressOfRemoteServer, + @Nullable URL addressOfRemoteServer, @Nullable HttpClient.Factory httpClientFactory, @Nullable AppiumClientConfig appiumClientConfig) { - super(additionalCommands, ofNullable(appiumClientConfig) .orElse(AppiumClientConfig.defaultConfig()) .getHttpClientConfig() - .baseUrl(addressOfRemoteServer), + .baseUrl(Require.nonNull("Server URL", ofNullable(service) + .map(DriverService::getUrl) + .orElse(checkNotNull(addressOfRemoteServer)))), ofNullable(httpClientFactory).orElseGet(HttpCommandExecutor::getDefaultClientFactory) ); serviceOptional = ofNullable(service); From 160cf8e83b1c8457bc53ef0fb3fbcb21ba5e87d4 Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Sun, 28 Aug 2022 00:41:04 -0700 Subject: [PATCH 25/66] fix the default local service --- src/main/java/io/appium/java_client/android/AndroidDriver.java | 2 +- src/main/java/io/appium/java_client/gecko/GeckoDriver.java | 2 +- src/main/java/io/appium/java_client/ios/IOSDriver.java | 2 +- src/main/java/io/appium/java_client/mac/Mac2Driver.java | 2 +- src/main/java/io/appium/java_client/safari/SafariDriver.java | 2 +- src/main/java/io/appium/java_client/windows/WindowsDriver.java | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/io/appium/java_client/android/AndroidDriver.java b/src/main/java/io/appium/java_client/android/AndroidDriver.java index d6a378b05..01d215dad 100644 --- a/src/main/java/io/appium/java_client/android/AndroidDriver.java +++ b/src/main/java/io/appium/java_client/android/AndroidDriver.java @@ -321,7 +321,7 @@ public AndroidDriver(Capabilities capabilities, AppiumClientConfig appiumClientC * @param capabilities take a look at {@link Capabilities} */ public AndroidDriver(Capabilities capabilities) { - super(null, null, null, null, + super(null, AppiumDriverLocalService.buildDefaultService(), null, null, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } diff --git a/src/main/java/io/appium/java_client/gecko/GeckoDriver.java b/src/main/java/io/appium/java_client/gecko/GeckoDriver.java index 7c02a1a66..b70128520 100644 --- a/src/main/java/io/appium/java_client/gecko/GeckoDriver.java +++ b/src/main/java/io/appium/java_client/gecko/GeckoDriver.java @@ -150,7 +150,7 @@ public GeckoDriver(Capabilities capabilities, AppiumClientConfig appiumClientCon } public GeckoDriver(Capabilities capabilities) { - super(null, null, null, null, + super(null, AppiumDriverLocalService.buildDefaultService(), null, null, ensureAutomationName(capabilities, AUTOMATION_NAME)); } } diff --git a/src/main/java/io/appium/java_client/ios/IOSDriver.java b/src/main/java/io/appium/java_client/ios/IOSDriver.java index 203ef59fd..ae7d6bfcb 100644 --- a/src/main/java/io/appium/java_client/ios/IOSDriver.java +++ b/src/main/java/io/appium/java_client/ios/IOSDriver.java @@ -306,7 +306,7 @@ public IOSDriver(Capabilities capabilities, AppiumClientConfig appiumClientConfi * @param capabilities take a look at {@link Capabilities} */ public IOSDriver(Capabilities capabilities) { - super(null, null, null, null, + super(null, AppiumDriverLocalService.buildDefaultService(), null, null, ensurePlatformName(capabilities, PLATFORM_NAME)); } diff --git a/src/main/java/io/appium/java_client/mac/Mac2Driver.java b/src/main/java/io/appium/java_client/mac/Mac2Driver.java index e7720b615..1b75b742f 100644 --- a/src/main/java/io/appium/java_client/mac/Mac2Driver.java +++ b/src/main/java/io/appium/java_client/mac/Mac2Driver.java @@ -155,7 +155,7 @@ public Mac2Driver(Capabilities capabilities, AppiumClientConfig appiumClientConf } public Mac2Driver(Capabilities capabilities) { - super(null, null, null, null, + super(null, AppiumDriverLocalService.buildDefaultService(), null, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } } diff --git a/src/main/java/io/appium/java_client/safari/SafariDriver.java b/src/main/java/io/appium/java_client/safari/SafariDriver.java index 04f4b6a03..e1a1dddf7 100644 --- a/src/main/java/io/appium/java_client/safari/SafariDriver.java +++ b/src/main/java/io/appium/java_client/safari/SafariDriver.java @@ -153,7 +153,7 @@ public SafariDriver(Capabilities capabilities, AppiumClientConfig appiumClientCo } public SafariDriver(Capabilities capabilities) { - super(null, null, null, null, + super(null, AppiumDriverLocalService.buildDefaultService(), null, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } } diff --git a/src/main/java/io/appium/java_client/windows/WindowsDriver.java b/src/main/java/io/appium/java_client/windows/WindowsDriver.java index 0c61b4d4b..2fd8089ff 100644 --- a/src/main/java/io/appium/java_client/windows/WindowsDriver.java +++ b/src/main/java/io/appium/java_client/windows/WindowsDriver.java @@ -152,7 +152,7 @@ public WindowsDriver(Capabilities capabilities, AppiumClientConfig appiumClientC } public WindowsDriver(Capabilities capabilities) { - super(null, null, null, null, + super(null, AppiumDriverLocalService.buildDefaultService(), null, null, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } From 8862d75863139e54493c2c98127d4e386d2a0128 Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Sun, 28 Aug 2022 02:24:02 -0700 Subject: [PATCH 26/66] do not use orElse --- .../java_client/AppiumClientConfig.java | 7 ---- .../java_client/android/AndroidDriver.java | 3 -- .../remote/AppiumCommandExecutor.java | 33 ++++++++++--------- 3 files changed, 17 insertions(+), 26 deletions(-) diff --git a/src/main/java/io/appium/java_client/AppiumClientConfig.java b/src/main/java/io/appium/java_client/AppiumClientConfig.java index f4d6df4a1..3d343d6ad 100644 --- a/src/main/java/io/appium/java_client/AppiumClientConfig.java +++ b/src/main/java/io/appium/java_client/AppiumClientConfig.java @@ -36,13 +36,6 @@ public AppiumClientConfig() { this.directConnect = false; } - public static class DirectConnect { - public static String DIRECT_CONNECT_PROTOCOL = "directConnectProtocol"; - public static String DIRECT_CONNECT_PATH = "directConnectPath"; - public static String DIRECT_CONNECT_HOST = "directConnectHost"; - public static String DIRECT_CONNECT_PORT = "directConnectPort"; - } - /** * Return the instance of AppiumClientConfig with a default config. * @return the instance of AppiumClientConfig. diff --git a/src/main/java/io/appium/java_client/android/AndroidDriver.java b/src/main/java/io/appium/java_client/android/AndroidDriver.java index 01d215dad..0faf41d83 100644 --- a/src/main/java/io/appium/java_client/android/AndroidDriver.java +++ b/src/main/java/io/appium/java_client/android/AndroidDriver.java @@ -52,11 +52,8 @@ import org.openqa.selenium.Platform; import org.openqa.selenium.remote.HttpCommandExecutor; import org.openqa.selenium.remote.html5.RemoteLocationContext; -import org.openqa.selenium.remote.http.ClientConfig; import org.openqa.selenium.remote.http.HttpClient; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; import java.net.URL; import java.util.Collections; import java.util.Map; diff --git a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java index 935b5eca6..729c53c01 100644 --- a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java +++ b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java @@ -54,7 +54,6 @@ import java.net.URL; import java.time.Duration; import java.util.Map; -import java.util.Objects; import java.util.Optional; import java.util.UUID; @@ -70,6 +69,11 @@ public class AppiumCommandExecutor extends HttpCommandExecutor { private final AppiumClientConfig appiumClientConfig; + private final String DIRECT_CONNECT_PROTOCOL = "directConnectProtocol"; + private final String DIRECT_CONNECT_PATH = "directConnectPath"; + private final String DIRECT_CONNECT_HOST = "directConnectHost"; + private final String DIRECT_CONNECT_PORT = "directConnectPort"; + /** * Create an AppiumCommandExecutor instance. * @@ -87,11 +91,11 @@ public AppiumCommandExecutor( @Nullable AppiumClientConfig appiumClientConfig) { super(additionalCommands, ofNullable(appiumClientConfig) - .orElse(AppiumClientConfig.defaultConfig()) + .orElseGet(AppiumClientConfig::defaultConfig) .getHttpClientConfig() - .baseUrl(Require.nonNull("Server URL", ofNullable(service) - .map(DriverService::getUrl) - .orElse(checkNotNull(addressOfRemoteServer)))), + .baseUrl(Require.nonNull("Server URL", + // To fix annotation message + service != null ? service.getUrl() : checkNotNull(addressOfRemoteServer))), ofNullable(httpClientFactory).orElseGet(HttpCommandExecutor::getDefaultClientFactory) ); serviceOptional = ofNullable(service); @@ -242,17 +246,13 @@ public void refreshAdditionalCommands() { } @SuppressWarnings("unchecked") - private void setDirectConnect(Response response) throws WebDriverException { + private void setDirectConnect(Response response) throws SessionNotCreatedException { Map responseValue = (Map) response.getValue(); - String directConnectProtocol = getDirectConnectValue(responseValue, - AppiumClientConfig.DirectConnect.DIRECT_CONNECT_PROTOCOL); - String directConnectPath = getDirectConnectValue(responseValue, - AppiumClientConfig.DirectConnect.DIRECT_CONNECT_PATH); - String directConnectHost = getDirectConnectValue(responseValue, - AppiumClientConfig.DirectConnect.DIRECT_CONNECT_HOST); - String directConnectPort = getDirectConnectValue(responseValue, - AppiumClientConfig.DirectConnect.DIRECT_CONNECT_PORT); + String directConnectProtocol = getDirectConnectValue(responseValue, DIRECT_CONNECT_PROTOCOL); + String directConnectPath = getDirectConnectValue(responseValue, DIRECT_CONNECT_PATH); + String directConnectHost = getDirectConnectValue(responseValue, DIRECT_CONNECT_HOST); + String directConnectPort = getDirectConnectValue(responseValue, DIRECT_CONNECT_PORT); if (directConnectProtocol == null || directConnectHost == null || directConnectPath == null || directConnectPort == null) { @@ -260,7 +260,7 @@ private void setDirectConnect(Response response) throws WebDriverException { } if (!directConnectProtocol.contentEquals("https")) { - throw new WebDriverException( + throw new SessionNotCreatedException( String.format("The protocol must be https. %s was given.", directConnectProtocol)); } @@ -270,7 +270,8 @@ private void setDirectConnect(Response response) throws WebDriverException { try { newUrl = new URL(newUrlCandidate); } catch (MalformedURLException e) { - throw new WebDriverException(String.format("directConnect generated invalid URL as %s", newUrlCandidate)); + // TODO: tweak the description + throw new SessionNotCreatedException(String.format("directConnect generated invalid URL as %s", newUrlCandidate)); } overrideServerUrl(newUrl); From d9235030e35e0ac217d5938599ff36df44fee04a Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Sun, 28 Aug 2022 02:43:21 -0700 Subject: [PATCH 27/66] fixlint --- .../java_client/remote/AppiumCommandExecutor.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java index 729c53c01..5304fedb2 100644 --- a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java +++ b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java @@ -69,10 +69,10 @@ public class AppiumCommandExecutor extends HttpCommandExecutor { private final AppiumClientConfig appiumClientConfig; - private final String DIRECT_CONNECT_PROTOCOL = "directConnectProtocol"; - private final String DIRECT_CONNECT_PATH = "directConnectPath"; - private final String DIRECT_CONNECT_HOST = "directConnectHost"; - private final String DIRECT_CONNECT_PORT = "directConnectPort"; + private static final String DIRECT_CONNECT_PROTOCOL = "directConnectProtocol"; + private static final String DIRECT_CONNECT_PATH = "directConnectPath"; + private static final String DIRECT_CONNECT_HOST = "directConnectHost"; + private static final String DIRECT_CONNECT_PORT = "directConnectPort"; /** * Create an AppiumCommandExecutor instance. @@ -271,7 +271,8 @@ private void setDirectConnect(Response response) throws SessionNotCreatedExcepti newUrl = new URL(newUrlCandidate); } catch (MalformedURLException e) { // TODO: tweak the description - throw new SessionNotCreatedException(String.format("directConnect generated invalid URL as %s", newUrlCandidate)); + throw new SessionNotCreatedException(String.format("directConnect generated invalid URL as %s", + newUrlCandidate)); } overrideServerUrl(newUrl); From 139161b2d2702623ba69c8c9cb8950dc6805ba76 Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Sun, 28 Aug 2022 12:41:11 -0700 Subject: [PATCH 28/66] update null case --- src/main/java/io/appium/java_client/AppiumDriver.java | 6 +++++- .../appium/java_client/remote/AppiumCommandExecutor.java | 9 +++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/main/java/io/appium/java_client/AppiumDriver.java b/src/main/java/io/appium/java_client/AppiumDriver.java index ccf2244d0..be82dbbc0 100644 --- a/src/main/java/io/appium/java_client/AppiumDriver.java +++ b/src/main/java/io/appium/java_client/AppiumDriver.java @@ -16,9 +16,11 @@ package io.appium.java_client; +import static com.google.common.base.Preconditions.checkNotNull; import static io.appium.java_client.internal.CapabilityHelpers.APPIUM_PREFIX; import static io.appium.java_client.remote.MobileCapabilityType.AUTOMATION_NAME; import static io.appium.java_client.remote.MobileCapabilityType.PLATFORM_NAME; +import static java.util.Optional.ofNullable; import static org.apache.commons.lang3.StringUtils.isBlank; import io.appium.java_client.internal.CapabilityHelpers; @@ -32,6 +34,7 @@ import org.openqa.selenium.MutableCapabilities; import org.openqa.selenium.SessionNotCreatedException; import org.openqa.selenium.WebDriverException; +import org.openqa.selenium.internal.Require; import org.openqa.selenium.remote.CapabilityType; import org.openqa.selenium.remote.DriverCommand; import org.openqa.selenium.remote.ErrorHandler; @@ -97,7 +100,8 @@ protected AppiumDriver( service, remoteAddress, httpClientFactory, - appiumClientConfig), + ofNullable(appiumClientConfig) + .orElseGet(AppiumClientConfig::defaultConfig)), capabilities ); } diff --git a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java index 5304fedb2..355d49cff 100644 --- a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java +++ b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java @@ -60,7 +60,6 @@ public class AppiumCommandExecutor extends HttpCommandExecutor { // https://github.com/appium/appium-base-driver/pull/400 private static final String IDEMPOTENCY_KEY_HEADER = "X-Idempotency-Key"; - private static final Duration DEFAULT_READ_TIMEOUT = Duration.ofMinutes(10); private final Optional serviceOptional; @@ -88,11 +87,9 @@ public AppiumCommandExecutor( @Nullable DriverService service, @Nullable URL addressOfRemoteServer, @Nullable HttpClient.Factory httpClientFactory, - @Nullable AppiumClientConfig appiumClientConfig) { + @Nonnull AppiumClientConfig appiumClientConfig) { super(additionalCommands, - ofNullable(appiumClientConfig) - .orElseGet(AppiumClientConfig::defaultConfig) - .getHttpClientConfig() + appiumClientConfig.getHttpClientConfig() .baseUrl(Require.nonNull("Server URL", // To fix annotation message service != null ? service.getUrl() : checkNotNull(addressOfRemoteServer))), @@ -259,7 +256,7 @@ private void setDirectConnect(Response response) throws SessionNotCreatedExcepti return; } - if (!directConnectProtocol.contentEquals("https")) { + if (!directConnectProtocol.equals("https")) { throw new SessionNotCreatedException( String.format("The protocol must be https. %s was given.", directConnectProtocol)); } From 3b576aa0213edccd2c55f89cdb0235c2b90fa9a7 Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Mon, 29 Aug 2022 00:13:30 -0700 Subject: [PATCH 29/66] tweak a bit --- .../java/io/appium/java_client/AppiumClientConfig.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/io/appium/java_client/AppiumClientConfig.java b/src/main/java/io/appium/java_client/AppiumClientConfig.java index 3d343d6ad..dbe6e48aa 100644 --- a/src/main/java/io/appium/java_client/AppiumClientConfig.java +++ b/src/main/java/io/appium/java_client/AppiumClientConfig.java @@ -24,16 +24,15 @@ * Manage Appium Client configurations. */ +// TODO: extends ClientConfig public class AppiumClientConfig { - private boolean directConnect; + private boolean directConnect = false; - private ClientConfig clientConfig; + private ClientConfig clientConfig = ClientConfig.defaultConfig().readTimeout(DEFAULT_READ_TIMEOUT); private static final Duration DEFAULT_READ_TIMEOUT = Duration.ofMinutes(10); public AppiumClientConfig() { - this.clientConfig = ClientConfig.defaultConfig().readTimeout(DEFAULT_READ_TIMEOUT); - this.directConnect = false; } /** From ca93f6eff564ac76b2ad13ae68538ed0b1e349fe Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Thu, 29 Sep 2022 15:16:10 -0700 Subject: [PATCH 30/66] update to extend client config --- gradle.properties | 2 +- .../java_client/AddAppiumUserAgent.java | 35 +++++ .../java_client/AppiumClientConfig.java | 55 +++++--- .../io/appium/java_client/AppiumDriver.java | 61 +++++--- .../java_client/android/AndroidDriver.java | 132 +++--------------- .../appium/java_client/gecko/GeckoDriver.java | 73 ++-------- .../io/appium/java_client/ios/IOSDriver.java | 130 +++-------------- .../io/appium/java_client/mac/Mac2Driver.java | 81 +++-------- .../remote/AppiumCommandExecutor.java | 20 +-- .../java_client/safari/SafariDriver.java | 85 ++++------- .../java_client/windows/WindowsDriver.java | 84 +++-------- .../java_client/android/BaseAndroidTest.java | 2 +- .../events/stubs/EmptyWebDriver.java | 4 - .../widget/tests/AbstractStubWebDriver.java | 5 - 14 files changed, 242 insertions(+), 527 deletions(-) create mode 100644 src/main/java/io/appium/java_client/AddAppiumUserAgent.java diff --git a/gradle.properties b/gradle.properties index b11361057..9b086f575 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,4 +7,4 @@ signing.secretKeyRingFile=PathToYourKeyRingFile ossrhUsername=your-jira-id ossrhPassword=your-jira-password -selenium.version=4.4.0 +selenium.version=4.5.0 diff --git a/src/main/java/io/appium/java_client/AddAppiumUserAgent.java b/src/main/java/io/appium/java_client/AddAppiumUserAgent.java new file mode 100644 index 000000000..be1ee1045 --- /dev/null +++ b/src/main/java/io/appium/java_client/AddAppiumUserAgent.java @@ -0,0 +1,35 @@ +package io.appium.java_client; + +import org.openqa.selenium.BuildInfo; +import org.openqa.selenium.Platform; +import org.openqa.selenium.remote.http.Filter; +import org.openqa.selenium.remote.http.HttpHandler; + +import java.util.Locale; + +/** + * Manage Appium Client configurations. + */ + +public class AddAppiumUserAgent implements Filter { + + public static final String USER_AGENT = String.format( + "appium/%s (selenium/%s (java %s))", + "TODO: appium version", + new BuildInfo().getReleaseLabel(), + (Platform.getCurrent().family() == null ? + Platform.getCurrent().toString().toLowerCase(Locale.US) : + Platform.getCurrent().family().toString().toLowerCase(Locale.US))); + + @Override + public HttpHandler apply(HttpHandler next) { + + return req -> { + if (req.getHeader("User-Agent") == null) { + req.addHeader("User-Agent", USER_AGENT); + } + + return next.execute(req); + }; + } +} diff --git a/src/main/java/io/appium/java_client/AppiumClientConfig.java b/src/main/java/io/appium/java_client/AppiumClientConfig.java index dbe6e48aa..6e06a9fda 100644 --- a/src/main/java/io/appium/java_client/AppiumClientConfig.java +++ b/src/main/java/io/appium/java_client/AppiumClientConfig.java @@ -16,23 +16,30 @@ package io.appium.java_client; +import org.openqa.selenium.Credentials; import org.openqa.selenium.remote.http.ClientConfig; +import org.openqa.selenium.remote.http.Filter; +import java.net.Proxy; +import java.net.URI; import java.time.Duration; -/** - * Manage Appium Client configurations. - */ - -// TODO: extends ClientConfig -public class AppiumClientConfig { +public class AppiumClientConfig extends ClientConfig { private boolean directConnect = false; - private ClientConfig clientConfig = ClientConfig.defaultConfig().readTimeout(DEFAULT_READ_TIMEOUT); + // TODO: Update to use Appium Java UserAgent + private static final Filter DEFAULT_FILTER = new AddAppiumUserAgent(); private static final Duration DEFAULT_READ_TIMEOUT = Duration.ofMinutes(10); - public AppiumClientConfig() { + protected AppiumClientConfig( + URI baseUri, + Duration connectionTimeout, + Duration readTimeout, + Filter filters, + Proxy proxy, + Credentials credentials) { + super(baseUri, connectionTimeout, readTimeout, filters, proxy, credentials); } /** @@ -40,7 +47,23 @@ public AppiumClientConfig() { * @return the instance of AppiumClientConfig. */ public static AppiumClientConfig defaultConfig() { - return new AppiumClientConfig(); + return new AppiumClientConfig( + null, + Duration.ofSeconds(10), + DEFAULT_READ_TIMEOUT, + DEFAULT_FILTER, + null, + null); + } + + public static AppiumClientConfig configFromClientConfig(ClientConfig clientConfig) { + return new AppiumClientConfig( + clientConfig.baseUri(), + clientConfig.connectionTimeout(), + clientConfig.readTimeout(), + clientConfig.filter(), + clientConfig.proxy(), + clientConfig.credentials()); } /** @@ -64,18 +87,4 @@ public AppiumClientConfig directConnect(boolean directConnect) { public boolean isDirectConnectEnabled() { return this.directConnect; } - - /** - * Set the given {@link ClientConfig} for the HTTP client instance. - * @param clientConfig to keep it in AppiumClientConfig instance - * @return A self reference - */ - public AppiumClientConfig setHttpClientConfig(ClientConfig clientConfig) { - this.clientConfig = clientConfig; - return this; - } - - public ClientConfig getHttpClientConfig() { - return this.clientConfig; - } } diff --git a/src/main/java/io/appium/java_client/AppiumDriver.java b/src/main/java/io/appium/java_client/AppiumDriver.java index be82dbbc0..2328232db 100644 --- a/src/main/java/io/appium/java_client/AppiumDriver.java +++ b/src/main/java/io/appium/java_client/AppiumDriver.java @@ -29,6 +29,7 @@ import io.appium.java_client.remote.MobileCapabilityType; import io.appium.java_client.remote.options.BaseOptions; import io.appium.java_client.service.local.AppiumDriverLocalService; +import io.appium.java_client.service.local.AppiumServiceBuilder; import org.openqa.selenium.Capabilities; import org.openqa.selenium.ImmutableCapabilities; import org.openqa.selenium.MutableCapabilities; @@ -43,6 +44,7 @@ import org.openqa.selenium.remote.RemoteWebDriver; import org.openqa.selenium.remote.Response; import org.openqa.selenium.remote.html5.RemoteLocationContext; +import org.openqa.selenium.remote.http.ClientConfig; import org.openqa.selenium.remote.http.HttpClient; import org.openqa.selenium.remote.http.HttpMethod; @@ -87,23 +89,48 @@ public AppiumDriver(HttpCommandExecutor executor, Capabilities capabilities) { this.remoteAddress = executor.getAddressOfRemoteServer(); } - protected AppiumDriver( - @Nullable URL remoteAddress, - @Nullable AppiumDriverLocalService service, - @Nullable HttpClient.Factory httpClientFactory, - @Nullable AppiumClientConfig appiumClientConfig, - @Nullable Capabilities capabilities) { - - this( - new AppiumCommandExecutor( - MobileCommand.commandRepository, - service, - remoteAddress, - httpClientFactory, - ofNullable(appiumClientConfig) - .orElseGet(AppiumClientConfig::defaultConfig)), - capabilities - ); + public AppiumDriver(AppiumClientConfig clientConfig, Capabilities capabilities) { + this(new AppiumCommandExecutor(MobileCommand.commandRepository, clientConfig), capabilities); + } + + public AppiumDriver(URL remoteAddress, Capabilities capabilities) { + this(new AppiumCommandExecutor(MobileCommand.commandRepository, remoteAddress), + capabilities); + } + + public AppiumDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, + Capabilities capabilities) { + this(new AppiumCommandExecutor(MobileCommand.commandRepository, remoteAddress, + httpClientFactory), capabilities); + } + + public AppiumDriver(AppiumDriverLocalService service, Capabilities capabilities) { + this(new AppiumCommandExecutor(MobileCommand.commandRepository, service), + capabilities); + } + + public AppiumDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, + Capabilities capabilities) { + this(new AppiumCommandExecutor(MobileCommand.commandRepository, service, httpClientFactory), + capabilities); + } + + public AppiumDriver(AppiumServiceBuilder builder, Capabilities capabilities) { + this(builder.build(), capabilities); + } + + public AppiumDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, + Capabilities capabilities) { + this(builder.build(), httpClientFactory, capabilities); + } + + public AppiumDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities) { + this(AppiumDriverLocalService.buildDefaultService(), httpClientFactory, + capabilities); + } + + public AppiumDriver(Capabilities capabilities) { + this(AppiumDriverLocalService.buildDefaultService(), capabilities); } /** diff --git a/src/main/java/io/appium/java_client/android/AndroidDriver.java b/src/main/java/io/appium/java_client/android/AndroidDriver.java index 0faf41d83..70a7e4011 100644 --- a/src/main/java/io/appium/java_client/android/AndroidDriver.java +++ b/src/main/java/io/appium/java_client/android/AndroidDriver.java @@ -52,6 +52,7 @@ import org.openqa.selenium.Platform; import org.openqa.selenium.remote.HttpCommandExecutor; import org.openqa.selenium.remote.html5.RemoteLocationContext; +import org.openqa.selenium.remote.http.ClientConfig; import org.openqa.selenium.remote.http.HttpClient; import java.net.URL; @@ -114,20 +115,7 @@ public AndroidDriver(HttpCommandExecutor executor, Capabilities capabilities) { * @param capabilities take a look at {@link Capabilities} */ public AndroidDriver(URL remoteAddress, Capabilities capabilities) { - super(remoteAddress, null, null, null, - ensurePlatformName(capabilities, ANDROID_PLATFORM)); - } - - /** - * Creates a new instance based on Appium server URL and {@code capabilities}. - * - * @param remoteAddress is the address of remotely/locally started Appium server - * @param capabilities take a look at {@link Capabilities} - * @param appiumClientConfig take a look at {@link AppiumClientConfig} - */ - public AndroidDriver(URL remoteAddress, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(remoteAddress, null, null, appiumClientConfig, - ensurePlatformName(capabilities, ANDROID_PLATFORM)); + super(remoteAddress, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } /** @@ -139,23 +127,7 @@ public AndroidDriver(URL remoteAddress, Capabilities capabilities, AppiumClientC */ public AndroidDriver( URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(remoteAddress, null, httpClientFactory, null, - ensurePlatformName(capabilities, ANDROID_PLATFORM)); - } - - /** - * Creates a new instance based on Appium server URL, HTTP client factory and {@code capabilities}. - * - * @param remoteAddress is the address of remotely/locally started Appium server - * @param httpClientFactory take a look at {@link HttpClient.Factory} - * @param capabilities take a look at {@link Capabilities} - * @param appiumClientConfig take a look at {@link AppiumClientConfig} - */ - public AndroidDriver( - URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities, - AppiumClientConfig appiumClientConfig) { - super(remoteAddress, null, httpClientFactory, appiumClientConfig, - ensurePlatformName(capabilities, ANDROID_PLATFORM)); + super(remoteAddress, httpClientFactory, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } /** @@ -165,21 +137,7 @@ public AndroidDriver( * @param capabilities take a look at {@link Capabilities} */ public AndroidDriver(AppiumDriverLocalService service, Capabilities capabilities) { - super(null, service, null, null, - ensurePlatformName(capabilities, ANDROID_PLATFORM)); - } - - /** - * Creates a new instance based on Appium driver local service and {@code capabilities}. - * - * @param service take a look at {@link AppiumDriverLocalService} - * @param capabilities take a look at {@link Capabilities} - * @param appiumClientConfig take a look at {@link AppiumClientConfig} - */ - public AndroidDriver(AppiumDriverLocalService service, Capabilities capabilities, - AppiumClientConfig appiumClientConfig) { - super(null, service, null, appiumClientConfig, - ensurePlatformName(capabilities, ANDROID_PLATFORM)); + super(service, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } /** @@ -191,23 +149,7 @@ public AndroidDriver(AppiumDriverLocalService service, Capabilities capabilities */ public AndroidDriver( AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(null, service, httpClientFactory, null, - ensurePlatformName(capabilities, ANDROID_PLATFORM)); - } - - /** - * Creates a new instance based on Appium driver local service, HTTP client factory and {@code capabilities}. - * - * @param service take a look at {@link AppiumDriverLocalService} - * @param httpClientFactory take a look at {@link HttpClient.Factory} - * @param capabilities take a look at {@link Capabilities} - * @param appiumClientConfig take a look at {@link AppiumClientConfig} - */ - public AndroidDriver( - AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities, - AppiumClientConfig appiumClientConfig) { - super(null, service, httpClientFactory, appiumClientConfig, - ensurePlatformName(capabilities, ANDROID_PLATFORM)); + super(service, httpClientFactory, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } /** @@ -217,22 +159,7 @@ public AndroidDriver( * @param capabilities take a look at {@link Capabilities} */ public AndroidDriver(AppiumServiceBuilder builder, Capabilities capabilities) { - super(null, builder.build(), null, null, - ensurePlatformName(capabilities, ANDROID_PLATFORM)); - - } - - /** - * Creates a new instance based on Appium service builder and {@code capabilities}. - * - * @param builder take a look at {@link AppiumServiceBuilder} - * @param capabilities take a look at {@link Capabilities} - * @param appiumClientConfig take a look at {@link AppiumClientConfig} - */ - public AndroidDriver(AppiumServiceBuilder builder, Capabilities capabilities, - AppiumClientConfig appiumClientConfig) { - super(null, builder.build(), null, appiumClientConfig, - ensurePlatformName(capabilities, ANDROID_PLATFORM)); + super(builder, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } /** @@ -244,22 +171,7 @@ public AndroidDriver(AppiumServiceBuilder builder, Capabilities capabilities, */ public AndroidDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(null, builder.build(), httpClientFactory, null, - ensurePlatformName(capabilities, ANDROID_PLATFORM)); - } - - /** - * Creates a new instance based on Appium service builder, HTTP client factory and {@code capabilities}. - * - * @param builder take a look at {@link AppiumServiceBuilder} - * @param httpClientFactory take a look at {@link HttpClient.Factory} - * @param capabilities take a look at {@link Capabilities} - * @param appiumClientConfig take a look at {@link AppiumClientConfig} - */ - public AndroidDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, - Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, builder.build(), httpClientFactory, appiumClientConfig, - ensurePlatformName(capabilities, ANDROID_PLATFORM)); + super(builder, httpClientFactory, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } /** @@ -269,21 +181,7 @@ public AndroidDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClient * @param capabilities take a look at {@link Capabilities} */ public AndroidDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(null, null, httpClientFactory, null, - ensurePlatformName(capabilities, ANDROID_PLATFORM)); - } - - /** - * Creates a new instance based on HTTP client factory and {@code capabilities}. - * - * @param httpClientFactory take a look at {@link HttpClient.Factory} - * @param capabilities take a look at {@link Capabilities} - * @param appiumClientConfig take a look at {@link AppiumClientConfig} - */ - public AndroidDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities, - AppiumClientConfig appiumClientConfig) { - super(null, null, httpClientFactory, appiumClientConfig, - ensurePlatformName(capabilities, ANDROID_PLATFORM)); + super(httpClientFactory, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } /** @@ -303,13 +201,16 @@ public AndroidDriver(HttpClient.Factory httpClientFactory, Capabilities capabili * * * + * @param clientConfig take a look at {@link ClientConfig} * @param capabilities take a look at {@link Capabilities} - * @param appiumClientConfig take a look at {@link AppiumClientConfig} * */ - public AndroidDriver(Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, null, null, appiumClientConfig, - ensurePlatformName(capabilities, ANDROID_PLATFORM)); + public AndroidDriver(ClientConfig clientConfig, Capabilities capabilities) { + super(AppiumClientConfig.configFromClientConfig(clientConfig), ensurePlatformName(capabilities, ANDROID_PLATFORM)); + } + + public AndroidDriver(AppiumClientConfig appiumClientConfig, Capabilities capabilities) { + super(appiumClientConfig, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } /** @@ -318,8 +219,7 @@ public AndroidDriver(Capabilities capabilities, AppiumClientConfig appiumClientC * @param capabilities take a look at {@link Capabilities} */ public AndroidDriver(Capabilities capabilities) { - super(null, AppiumDriverLocalService.buildDefaultService(), null, null, - ensurePlatformName(capabilities, ANDROID_PLATFORM)); + super(ensurePlatformName(capabilities, ANDROID_PLATFORM)); } /** diff --git a/src/main/java/io/appium/java_client/gecko/GeckoDriver.java b/src/main/java/io/appium/java_client/gecko/GeckoDriver.java index b70128520..1287d9011 100644 --- a/src/main/java/io/appium/java_client/gecko/GeckoDriver.java +++ b/src/main/java/io/appium/java_client/gecko/GeckoDriver.java @@ -47,80 +47,33 @@ public GeckoDriver(HttpCommandExecutor executor, Capabilities capabilities) { } public GeckoDriver(URL remoteAddress, Capabilities capabilities) { - super(remoteAddress, null, null, null, - ensureAutomationName(capabilities, AUTOMATION_NAME)); - } - - public GeckoDriver(URL remoteAddress, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(remoteAddress, null, null, appiumClientConfig, - ensureAutomationName(capabilities, AUTOMATION_NAME)); + super(remoteAddress, ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(remoteAddress, null, httpClientFactory, null, - ensureAutomationName(capabilities, AUTOMATION_NAME)); - } - - public GeckoDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, - Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(remoteAddress, null, httpClientFactory, appiumClientConfig, - ensureAutomationName(capabilities, AUTOMATION_NAME)); + super(remoteAddress, httpClientFactory, ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(AppiumDriverLocalService service, Capabilities capabilities) { - super(null, service, null, null, - ensureAutomationName(capabilities, AUTOMATION_NAME)); - } - - public GeckoDriver(AppiumDriverLocalService service, Capabilities capabilities, - AppiumClientConfig appiumClientConfig) { - super(null, service, null, appiumClientConfig, - ensureAutomationName(capabilities, AUTOMATION_NAME)); + super(service, ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(null, service, httpClientFactory, null, - ensureAutomationName(capabilities, AUTOMATION_NAME)); - } - - public GeckoDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, - Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, service, httpClientFactory, appiumClientConfig, - ensureAutomationName(capabilities, AUTOMATION_NAME)); + super(service, httpClientFactory, ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(AppiumServiceBuilder builder, Capabilities capabilities) { - super(null, builder.build(), null, null, - ensureAutomationName(capabilities, AUTOMATION_NAME)); - } - - public GeckoDriver(AppiumServiceBuilder builder, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, builder.build(), null, appiumClientConfig, - ensureAutomationName(capabilities, AUTOMATION_NAME)); + super(builder, ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(null, builder.build(), httpClientFactory, null, - ensureAutomationName(capabilities, AUTOMATION_NAME)); - } - - public GeckoDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, - Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, builder.build(), httpClientFactory, appiumClientConfig, - ensureAutomationName(capabilities, AUTOMATION_NAME)); + super(builder, httpClientFactory, ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(null, null, httpClientFactory, null, - ensureAutomationName(capabilities, AUTOMATION_NAME)); - } - - public GeckoDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities, - AppiumClientConfig appiumClientConfig) { - super(null, null, httpClientFactory, appiumClientConfig, - ensureAutomationName(capabilities, AUTOMATION_NAME)); + super(httpClientFactory, ensureAutomationName(capabilities, AUTOMATION_NAME)); } /** @@ -144,13 +97,15 @@ public GeckoDriver(HttpClient.Factory httpClientFactory, Capabilities capabiliti * @param appiumClientConfig take a look at {@link AppiumClientConfig} * */ - public GeckoDriver(Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, null, null, appiumClientConfig, - ensureAutomationName(capabilities, AUTOMATION_NAME)); + public GeckoDriver(ClientConfig clientConfig, Capabilities capabilities) { + super(AppiumClientConfig.configFromClientConfig(clientConfig), ensureAutomationName(capabilities, AUTOMATION_NAME)); + } + + public GeckoDriver(AppiumClientConfig appiumClientConfig, Capabilities capabilities) { + super(appiumClientConfig, ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(Capabilities capabilities) { - super(null, AppiumDriverLocalService.buildDefaultService(), null, null, - ensureAutomationName(capabilities, AUTOMATION_NAME)); + super(ensureAutomationName(capabilities, AUTOMATION_NAME)); } } diff --git a/src/main/java/io/appium/java_client/ios/IOSDriver.java b/src/main/java/io/appium/java_client/ios/IOSDriver.java index ae7d6bfcb..bc839f2f2 100644 --- a/src/main/java/io/appium/java_client/ios/IOSDriver.java +++ b/src/main/java/io/appium/java_client/ios/IOSDriver.java @@ -105,20 +105,7 @@ public IOSDriver(HttpCommandExecutor executor, Capabilities capabilities) { * @param capabilities take a look at {@link Capabilities} */ public IOSDriver(URL remoteAddress, Capabilities capabilities) { - super(remoteAddress, null, null, null, - ensurePlatformName(capabilities, PLATFORM_NAME)); - } - - /** - * Creates a new instance based on Appium server URL and {@code capabilities}. - * - * @param remoteAddress is the address of remotely/locally started Appium server - * @param capabilities take a look at {@link Capabilities} - * @param appiumClientConfig take a look at {@link AppiumClientConfig} - */ - public IOSDriver(URL remoteAddress, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(remoteAddress, null, null, appiumClientConfig, - ensurePlatformName(capabilities, PLATFORM_NAME)); + super(remoteAddress, ensurePlatformName(capabilities, PLATFORM_NAME)); } /** @@ -130,22 +117,7 @@ public IOSDriver(URL remoteAddress, Capabilities capabilities, AppiumClientConfi */ public IOSDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(remoteAddress, null, httpClientFactory, null, - ensurePlatformName(capabilities, PLATFORM_NAME)); - } - - /** - * Creates a new instance based on Appium server URL, HTTP client factory and {@code capabilities}. - * - * @param remoteAddress is the address of remotely/locally started Appium server - * @param httpClientFactory take a look at {@link HttpClient.Factory} - * @param capabilities take a look at {@link Capabilities} - * @param appiumClientConfig take a look at {@link AppiumClientConfig} - */ - public IOSDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, - Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(remoteAddress, null, httpClientFactory, appiumClientConfig, - ensurePlatformName(capabilities, PLATFORM_NAME)); + super(remoteAddress, httpClientFactory, ensurePlatformName(capabilities, PLATFORM_NAME)); } /** @@ -155,22 +127,7 @@ public IOSDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, * @param capabilities take a look at {@link Capabilities} */ public IOSDriver(AppiumDriverLocalService service, Capabilities capabilities) { - super(null, service, null, null, - ensurePlatformName(capabilities, PLATFORM_NAME)); - } - - /** - * Creates a new instance based on Appium driver local service and {@code capabilities}. - * - * @param service take a look at {@link AppiumDriverLocalService} - * @param capabilities take a look at {@link Capabilities} - * @param appiumClientConfig take a look at {@link AppiumClientConfig} - */ - public IOSDriver(AppiumDriverLocalService service, Capabilities capabilities, - AppiumClientConfig appiumClientConfig) { - super(null, service, null, appiumClientConfig, - ensurePlatformName(capabilities, PLATFORM_NAME)); - + super(service, ensurePlatformName(capabilities, PLATFORM_NAME)); } /** @@ -182,22 +139,7 @@ public IOSDriver(AppiumDriverLocalService service, Capabilities capabilities, */ public IOSDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(null, service, httpClientFactory, null, - ensurePlatformName(capabilities, PLATFORM_NAME)); - } - - /** - * Creates a new instance based on Appium driver local service, HTTP client factory and {@code capabilities}. - * - * @param service take a look at {@link AppiumDriverLocalService} - * @param httpClientFactory take a look at {@link HttpClient.Factory} - * @param capabilities take a look at {@link Capabilities} - * @param appiumClientConfig take a look at {@link AppiumClientConfig} - */ - public IOSDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, - Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, service, httpClientFactory, appiumClientConfig, - ensurePlatformName(capabilities, PLATFORM_NAME)); + super(service, httpClientFactory, ensurePlatformName(capabilities, PLATFORM_NAME)); } /** @@ -207,20 +149,7 @@ public IOSDriver(AppiumDriverLocalService service, HttpClient.Factory httpClient * @param capabilities take a look at {@link Capabilities} */ public IOSDriver(AppiumServiceBuilder builder, Capabilities capabilities) { - super(null, builder.build(), null, null, - ensurePlatformName(capabilities, PLATFORM_NAME)); - } - - /** - * Creates a new instance based on Appium service builder and {@code capabilities}. - * - * @param builder take a look at {@link AppiumServiceBuilder} - * @param capabilities take a look at {@link Capabilities} - * @param appiumClientConfig take a look at {@link AppiumClientConfig} - */ - public IOSDriver(AppiumServiceBuilder builder, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, builder.build(), null, appiumClientConfig, - ensurePlatformName(capabilities, PLATFORM_NAME)); + super(builder, ensurePlatformName(capabilities, PLATFORM_NAME)); } /** @@ -232,22 +161,7 @@ public IOSDriver(AppiumServiceBuilder builder, Capabilities capabilities, Appium */ public IOSDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(null, builder.build(), httpClientFactory, null, - ensurePlatformName(capabilities, PLATFORM_NAME)); - } - - /** - * Creates a new instance based on Appium service builder, HTTP client factory and {@code capabilities}. - * - * @param builder take a look at {@link AppiumServiceBuilder} - * @param httpClientFactory take a look at {@link HttpClient.Factory} - * @param capabilities take a look at {@link Capabilities} - * @param appiumClientConfig take a look at {@link AppiumClientConfig} - */ - public IOSDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, - Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, builder.build(), httpClientFactory, appiumClientConfig, - ensurePlatformName(capabilities, PLATFORM_NAME)); + super(builder, httpClientFactory, ensurePlatformName(capabilities, PLATFORM_NAME)); } /** @@ -257,21 +171,7 @@ public IOSDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFact * @param capabilities take a look at {@link Capabilities} */ public IOSDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(null, null, httpClientFactory, null, - ensurePlatformName(capabilities, PLATFORM_NAME)); - } - - /** - * Creates a new instance based on HTTP client factory and {@code capabilities}. - * - * @param httpClientFactory take a look at {@link HttpClient.Factory} - * @param capabilities take a look at {@link Capabilities} - * @param appiumClientConfig take a look at {@link AppiumClientConfig} - */ - public IOSDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities, - AppiumClientConfig appiumClientConfig) { - super(null, null, httpClientFactory, appiumClientConfig, - ensurePlatformName(capabilities, PLATFORM_NAME)); + super(httpClientFactory, ensurePlatformName(capabilities, PLATFORM_NAME)); } /** @@ -292,22 +192,26 @@ public IOSDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities * * * @param capabilities take a look at {@link Capabilities} - * @param appiumClientConfig take a look at {@link AppiumClientConfig} + * @param clientConfig take a look at {@link ClientConfig} * */ - public IOSDriver(Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, null, null, appiumClientConfig, - ensurePlatformName(capabilities, PLATFORM_NAME)); + public IOSDriver(ClientConfig clientConfig, Capabilities capabilities) { + super(AppiumClientConfig.configFromClientConfig(clientConfig), + ensurePlatformName(capabilities, PLATFORM_NAME)); + } + + public IOSDriver(AppiumClientConfig appiumClientConfig, Capabilities capabilities) { + super(appiumClientConfig, ensurePlatformName(capabilities, PLATFORM_NAME)); } + /** * Creates a new instance based on {@code capabilities}. * * @param capabilities take a look at {@link Capabilities} */ public IOSDriver(Capabilities capabilities) { - super(null, AppiumDriverLocalService.buildDefaultService(), null, null, - ensurePlatformName(capabilities, PLATFORM_NAME)); + super(ensurePlatformName(capabilities, PLATFORM_NAME)); } @Override public TargetLocator switchTo() { diff --git a/src/main/java/io/appium/java_client/mac/Mac2Driver.java b/src/main/java/io/appium/java_client/mac/Mac2Driver.java index 1b75b742f..f90b1ec44 100644 --- a/src/main/java/io/appium/java_client/mac/Mac2Driver.java +++ b/src/main/java/io/appium/java_client/mac/Mac2Driver.java @@ -52,81 +52,43 @@ public Mac2Driver(HttpCommandExecutor executor, Capabilities capabilities) { } public Mac2Driver(URL remoteAddress, Capabilities capabilities) { - super(remoteAddress, null, null, null, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); - } - - public Mac2Driver(URL remoteAddress, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(remoteAddress, null, null, appiumClientConfig, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + super(remoteAddress, ensurePlatformAndAutomationNames( + capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(remoteAddress, null, httpClientFactory, null, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); - } - - public Mac2Driver(URL remoteAddress, HttpClient.Factory httpClientFactory, - Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(remoteAddress, null, httpClientFactory, appiumClientConfig, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + super(remoteAddress, httpClientFactory, ensurePlatformAndAutomationNames( + capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(AppiumDriverLocalService service, Capabilities capabilities) { - super(null, service, null, null, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); - } - - public Mac2Driver(AppiumDriverLocalService service, Capabilities capabilities, - AppiumClientConfig appiumClientConfig) { - super(null, service, null, appiumClientConfig, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + super(service, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(null, service, httpClientFactory, null, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); - } - - public Mac2Driver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, - Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, service, httpClientFactory, null, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + super(service, httpClientFactory, ensurePlatformAndAutomationNames( + capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(AppiumServiceBuilder builder, Capabilities capabilities) { - super(null, builder.build(), null, null, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + super(builder, ensurePlatformAndAutomationNames( + capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } - public Mac2Driver(AppiumServiceBuilder builder, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, builder.build(), null, appiumClientConfig, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); - } - public Mac2Driver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, - Capabilities capabilities) { - super(null, builder.build(), httpClientFactory, null, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); - } public Mac2Driver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, - Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, builder.build(), httpClientFactory, appiumClientConfig, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + Capabilities capabilities) { + super(builder, httpClientFactory, ensurePlatformAndAutomationNames( + capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(null, null, httpClientFactory, null, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + super(httpClientFactory, ensurePlatformAndAutomationNames( + capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } - public Mac2Driver(HttpClient.Factory httpClientFactory, Capabilities capabilities, - AppiumClientConfig appiumClientConfig) { - super(null, null, httpClientFactory, appiumClientConfig, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); - } /** * Creates a new instance based on the given ClientConfig and {@code capabilities}. @@ -146,16 +108,19 @@ public Mac2Driver(HttpClient.Factory httpClientFactory, Capabilities capabilitie * * * @param capabilities take a look at {@link Capabilities} - * @param appiumClientConfig take a look at {@link AppiumClientConfig} + * @param clientConfig take a look at {@link AppiumClientConfig} * */ - public Mac2Driver(Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, null, null, appiumClientConfig, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + public Mac2Driver(ClientConfig clientConfig, Capabilities capabilities) { + super(AppiumClientConfig.configFromClientConfig(clientConfig), ensurePlatformAndAutomationNames( + capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + } + public Mac2Driver(AppiumClientConfig appiumClientConfig, Capabilities capabilities) { + super(appiumClientConfig, ensurePlatformAndAutomationNames( + capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public Mac2Driver(Capabilities capabilities) { - super(null, AppiumDriverLocalService.buildDefaultService(), null, null, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + super(ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } } diff --git a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java index 355d49cff..71e15fa44 100644 --- a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java +++ b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java @@ -40,6 +40,7 @@ import org.openqa.selenium.remote.Response; import org.openqa.selenium.remote.ResponseCodec; import org.openqa.selenium.remote.codec.w3c.W3CHttpCommandCodec; +import org.openqa.selenium.remote.http.ClientConfig; import org.openqa.selenium.remote.http.HttpClient; import org.openqa.selenium.remote.http.HttpRequest; import org.openqa.selenium.remote.http.HttpResponse; @@ -85,14 +86,17 @@ public class AppiumCommandExecutor extends HttpCommandExecutor { public AppiumCommandExecutor( @Nonnull Map additionalCommands, @Nullable DriverService service, - @Nullable URL addressOfRemoteServer, + @Nonnull URL addressOfRemoteServer, @Nullable HttpClient.Factory httpClientFactory, - @Nonnull AppiumClientConfig appiumClientConfig) { + @Nullable AppiumClientConfig appiumClientConfig) { super(additionalCommands, - appiumClientConfig.getHttpClientConfig() - .baseUrl(Require.nonNull("Server URL", - // To fix annotation message - service != null ? service.getUrl() : checkNotNull(addressOfRemoteServer))), + ofNullable(appiumClientConfig).orElse( + AppiumClientConfig.configFromClientConfig( + ClientConfig.defaultConfig().baseUrl(Require.nonNull("Server URL", ofNullable(service) + .map(DriverService::getUrl) + .orElse(addressOfRemoteServer)) + )) + ), ofNullable(httpClientFactory).orElseGet(HttpCommandExecutor::getDefaultClientFactory) ); serviceOptional = ofNullable(service); @@ -128,7 +132,7 @@ public AppiumCommandExecutor(Map additionalCommands, } public AppiumCommandExecutor(Map additionalCommands, AppiumClientConfig appiumClientConfig) { - this(additionalCommands, null, checkNotNull(appiumClientConfig.getHttpClientConfig().baseUrl()), + this(additionalCommands, null, checkNotNull(appiumClientConfig.baseUrl()), null, appiumClientConfig); } @@ -209,7 +213,7 @@ protected HttpClient getClient() { protected void overrideServerUrl(URL serverUrl) { setPrivateFieldValue(HttpCommandExecutor.class, "client", ofNullable(this.httpClientFactory).orElseGet(HttpCommandExecutor::getDefaultClientFactory) - .createClient(this.appiumClientConfig.getHttpClientConfig().baseUrl(serverUrl))); + .createClient(this.appiumClientConfig.baseUrl(serverUrl))); } private Response createSession(Command command) throws IOException { diff --git a/src/main/java/io/appium/java_client/safari/SafariDriver.java b/src/main/java/io/appium/java_client/safari/SafariDriver.java index e1a1dddf7..e65856c45 100644 --- a/src/main/java/io/appium/java_client/safari/SafariDriver.java +++ b/src/main/java/io/appium/java_client/safari/SafariDriver.java @@ -48,81 +48,40 @@ public SafariDriver(HttpCommandExecutor executor, Capabilities capabilities) { } public SafariDriver(URL remoteAddress, Capabilities capabilities) { - super(remoteAddress, null, null, null, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); - } - - public SafariDriver(URL remoteAddress, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(remoteAddress, null, null, appiumClientConfig, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + super(remoteAddress, ensurePlatformAndAutomationNames( + capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(remoteAddress, null, httpClientFactory, null, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); - } - - public SafariDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, - Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(remoteAddress, null, httpClientFactory, appiumClientConfig, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + super(remoteAddress, httpClientFactory, ensurePlatformAndAutomationNames( + capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(AppiumDriverLocalService service, Capabilities capabilities) { - super(null, service, null, null, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); - } - - public SafariDriver(AppiumDriverLocalService service, Capabilities capabilities, - AppiumClientConfig appiumClientConfig) { - super(null, service, null, appiumClientConfig, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + super(service, ensurePlatformAndAutomationNames( + capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(null, service, httpClientFactory, null, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); - } - - public SafariDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, - Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, service, httpClientFactory, appiumClientConfig, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + super(service, httpClientFactory, ensurePlatformAndAutomationNames( + capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(AppiumServiceBuilder builder, Capabilities capabilities) { - super(null, builder.build(), null, null, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); - } - - public SafariDriver(AppiumServiceBuilder builder, Capabilities capabilities, - AppiumClientConfig appiumClientConfig) { - super(null, builder.build(), null, appiumClientConfig, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + super(builder, ensurePlatformAndAutomationNames( + capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(null, builder.build(), httpClientFactory, null, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); - } - - public SafariDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, - Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, builder.build(), httpClientFactory, appiumClientConfig, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + super(builder, httpClientFactory, ensurePlatformAndAutomationNames( + capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(null, null, httpClientFactory, null, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); - } - - public SafariDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities, - AppiumClientConfig appiumClientConfig) { - super(null, null, httpClientFactory, appiumClientConfig, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + super(httpClientFactory, ensurePlatformAndAutomationNames( + capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } /** @@ -143,17 +102,21 @@ public SafariDriver(HttpClient.Factory httpClientFactory, Capabilities capabilit * * * @param capabilities take a look at {@link Capabilities} - * @param appiumClientConfig take a look at {@link AppiumClientConfig} + * @param clientConfig take a look at {@link AppiumClientConfig} * */ - public SafariDriver(Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, null, null, appiumClientConfig, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + public SafariDriver(ClientConfig clientConfig, Capabilities capabilities) { + super(AppiumClientConfig.configFromClientConfig(clientConfig), ensurePlatformAndAutomationNames( + capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + } + + public SafariDriver(AppiumClientConfig appiumClientConfig, Capabilities capabilities) { + super(appiumClientConfig, ensurePlatformAndAutomationNames( + capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public SafariDriver(Capabilities capabilities) { - super(null, AppiumDriverLocalService.buildDefaultService(), null, null, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + super(ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } } diff --git a/src/main/java/io/appium/java_client/windows/WindowsDriver.java b/src/main/java/io/appium/java_client/windows/WindowsDriver.java index 2fd8089ff..73f8307b7 100644 --- a/src/main/java/io/appium/java_client/windows/WindowsDriver.java +++ b/src/main/java/io/appium/java_client/windows/WindowsDriver.java @@ -47,82 +47,40 @@ public WindowsDriver(HttpCommandExecutor executor, Capabilities capabilities) { super(executor, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } - public WindowsDriver(URL remoteAddress, Capabilities capabilities) { - super(remoteAddress, null, null, null, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); - } - public WindowsDriver(URL remoteAddress, Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(remoteAddress, null, null, appiumClientConfig, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + public WindowsDriver(URL remoteAddress, Capabilities capabilities) { + super(remoteAddress, ensurePlatformAndAutomationNames( + capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(remoteAddress, null, httpClientFactory, null, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); - } - - public WindowsDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, - Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(remoteAddress, null, httpClientFactory, appiumClientConfig, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + super(remoteAddress, httpClientFactory, ensurePlatformAndAutomationNames( + capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(AppiumDriverLocalService service, Capabilities capabilities) { - super(null, service, null, null, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); - } - - public WindowsDriver(AppiumDriverLocalService service, Capabilities capabilities, - AppiumClientConfig appiumClientConfig) { - super(null, service, null, appiumClientConfig, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + super(service, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(null, service, httpClientFactory, null, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); - } - - public WindowsDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, - Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, service, httpClientFactory, appiumClientConfig, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + super(service, httpClientFactory, ensurePlatformAndAutomationNames( + capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(AppiumServiceBuilder builder, Capabilities capabilities) { - super(null, builder.build(), null, null, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); - } - - public WindowsDriver(AppiumServiceBuilder builder, Capabilities capabilities, - AppiumClientConfig appiumClientConfig) { - super(null, builder.build(), null, appiumClientConfig, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + super(builder, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(null, builder.build(), httpClientFactory, null, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); - } - - public WindowsDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, - Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, builder.build(), httpClientFactory, appiumClientConfig, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + super(builder, httpClientFactory, ensurePlatformAndAutomationNames( + capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities) { - super(null, null, httpClientFactory, null, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); - } - - public WindowsDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities, - AppiumClientConfig appiumClientConfig) { - super(null, null, httpClientFactory, appiumClientConfig, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + super(httpClientFactory, ensurePlatformAndAutomationNames( + capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } /** @@ -143,17 +101,21 @@ public WindowsDriver(HttpClient.Factory httpClientFactory, Capabilities capabili * * * @param capabilities take a look at {@link Capabilities} - * @param appiumClientConfig take a look at {@link AppiumClientConfig} + * @param clientConfig take a look at {@link AppiumClientConfig} * */ - public WindowsDriver(Capabilities capabilities, AppiumClientConfig appiumClientConfig) { - super(null, null, null, appiumClientConfig, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + public WindowsDriver(ClientConfig clientConfig, Capabilities capabilities) { + super(AppiumClientConfig.configFromClientConfig(clientConfig), ensurePlatformAndAutomationNames( + capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + } + + public WindowsDriver(AppiumClientConfig appiumClientConfig, Capabilities capabilities) { + super(appiumClientConfig, ensurePlatformAndAutomationNames( + capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } public WindowsDriver(Capabilities capabilities) { - super(null, AppiumDriverLocalService.buildDefaultService(), null, null, - ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); + super(ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } /** diff --git a/src/test/java/io/appium/java_client/android/BaseAndroidTest.java b/src/test/java/io/appium/java_client/android/BaseAndroidTest.java index 3e75fe6f1..31fe7f08c 100644 --- a/src/test/java/io/appium/java_client/android/BaseAndroidTest.java +++ b/src/test/java/io/appium/java_client/android/BaseAndroidTest.java @@ -60,4 +60,4 @@ public class BaseAndroidTest { service.stop(); } } -} +} \ No newline at end of file diff --git a/src/test/java/io/appium/java_client/events/stubs/EmptyWebDriver.java b/src/test/java/io/appium/java_client/events/stubs/EmptyWebDriver.java index 5316f56e4..01104b988 100644 --- a/src/test/java/io/appium/java_client/events/stubs/EmptyWebDriver.java +++ b/src/test/java/io/appium/java_client/events/stubs/EmptyWebDriver.java @@ -202,10 +202,6 @@ public Timeouts timeouts() { return null; } - public ImeHandler ime() { - return null; - } - public Window window() { return new StubWindow(); } diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/AbstractStubWebDriver.java b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/AbstractStubWebDriver.java index bea245a99..f71d1d8c4 100644 --- a/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/AbstractStubWebDriver.java +++ b/src/test/java/io/appium/java_client/pagefactory_tests/widget/tests/AbstractStubWebDriver.java @@ -173,11 +173,6 @@ public Timeouts pageLoadTimeout(long time, TimeUnit unit) { }; } - @Override - public ImeHandler ime() { - return null; - } - @Override public Window window() { return null; From bd1f78c73813d590db0dbefb19b9dc892a6e42e2 Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Thu, 29 Sep 2022 17:18:46 -0700 Subject: [PATCH 31/66] follows client config --- .../java_client/AppiumClientConfig.java | 155 ++++++++++++++++-- .../io/appium/java_client/AppiumDriver.java | 6 - .../java_client/android/AndroidDriver.java | 3 +- .../appium/java_client/gecko/GeckoDriver.java | 3 +- .../io/appium/java_client/ios/IOSDriver.java | 3 +- .../io/appium/java_client/mac/Mac2Driver.java | 7 +- .../remote/AppiumCommandExecutor.java | 3 +- .../java_client/safari/SafariDriver.java | 3 +- .../java_client/windows/WindowsDriver.java | 5 +- .../java_client/android/BaseAndroidTest.java | 2 +- 10 files changed, 154 insertions(+), 36 deletions(-) diff --git a/src/main/java/io/appium/java_client/AppiumClientConfig.java b/src/main/java/io/appium/java_client/AppiumClientConfig.java index 6e06a9fda..305ac69f9 100644 --- a/src/main/java/io/appium/java_client/AppiumClientConfig.java +++ b/src/main/java/io/appium/java_client/AppiumClientConfig.java @@ -17,15 +17,21 @@ package io.appium.java_client; import org.openqa.selenium.Credentials; +import org.openqa.selenium.internal.Require; import org.openqa.selenium.remote.http.ClientConfig; import org.openqa.selenium.remote.http.Filter; import java.net.Proxy; import java.net.URI; +import java.net.URISyntaxException; +import java.net.URL; import java.time.Duration; +/** + * A class to store the appium http client configuration. + */ public class AppiumClientConfig extends ClientConfig { - private boolean directConnect = false; + private final boolean directConnect; // TODO: Update to use Appium Java UserAgent private static final Filter DEFAULT_FILTER = new AddAppiumUserAgent(); @@ -38,13 +44,16 @@ protected AppiumClientConfig( Duration readTimeout, Filter filters, Proxy proxy, - Credentials credentials) { + Credentials credentials, + boolean directConnect) { super(baseUri, connectionTimeout, readTimeout, filters, proxy, credentials); - } + + this.directConnect = directConnect; + } /** - * Return the instance of AppiumClientConfig with a default config. - * @return the instance of AppiumClientConfig. + * Return the instance of {@link AppiumClientConfig} with a default config. + * @return the instance of {@link AppiumClientConfig}. */ public static AppiumClientConfig defaultConfig() { return new AppiumClientConfig( @@ -53,30 +62,152 @@ public static AppiumClientConfig defaultConfig() { DEFAULT_READ_TIMEOUT, DEFAULT_FILTER, null, - null); + null, + false); + } + + /** + * Return the instance of {@link AppiumClientConfig} from the given {@link ClientConfig} parameters. + * @return the instance of {@link AppiumClientConfig}. + */ + public static AppiumClientConfig fromClientConfig(ClientConfig clientConfig) { + return new AppiumClientConfig( + clientConfig.baseUri(), + clientConfig.connectionTimeout(), + clientConfig.readTimeout(), + clientConfig.filter(), + clientConfig.proxy(), + clientConfig.credentials(), + false); } - public static AppiumClientConfig configFromClientConfig(ClientConfig clientConfig) { + @Override + public AppiumClientConfig baseUri(URI baseUri) { + // ClientConfig returns a new instance + ClientConfig clientConfig = super.baseUri(baseUri); return new AppiumClientConfig( clientConfig.baseUri(), clientConfig.connectionTimeout(), clientConfig.readTimeout(), clientConfig.filter(), clientConfig.proxy(), - clientConfig.credentials()); + clientConfig.credentials(), + directConnect); + } + + @Override + public AppiumClientConfig baseUrl(URL baseUrl) { + try { + return baseUri(Require.nonNull("Base URL", baseUrl).toURI()); + } catch (URISyntaxException e) { + throw new RuntimeException(e); + } } + @Override + public AppiumClientConfig connectionTimeout(Duration timeout) { + // ClientConfig returns a new instance + ClientConfig clientConfig = super.connectionTimeout(timeout); + return new AppiumClientConfig( + clientConfig.baseUri(), + clientConfig.connectionTimeout(), + clientConfig.readTimeout(), + clientConfig.filter(), + clientConfig.proxy(), + clientConfig.credentials(), + directConnect); + } + + @Override + public AppiumClientConfig readTimeout(Duration timeout) { + // ClientConfig returns a new instance + ClientConfig clientConfig = super.connectionTimeout(timeout); + return new AppiumClientConfig( + clientConfig.baseUri(), + clientConfig.connectionTimeout(), + clientConfig.readTimeout(), + clientConfig.filter(), + clientConfig.proxy(), + clientConfig.credentials(), + directConnect); + } + + @Override + public AppiumClientConfig withFilter(Filter filter) { + // ClientConfig returns a new instance + ClientConfig clientConfig = super.withFilter(filter); + return new AppiumClientConfig( + clientConfig.baseUri(), + clientConfig.connectionTimeout(), + clientConfig.readTimeout(), + clientConfig.filter(), + clientConfig.proxy(), + clientConfig.credentials(), + directConnect); + } + + @Override + public AppiumClientConfig withRetries() { + // ClientConfig returns a new instance + ClientConfig clientConfig = super.withRetries(); + return new AppiumClientConfig( + clientConfig.baseUri(), + clientConfig.connectionTimeout(), + clientConfig.readTimeout(), + clientConfig.filter(), + clientConfig.proxy(), + clientConfig.credentials(), + directConnect); + } + + + @Override + public ClientConfig proxy(Proxy proxy) { + // ClientConfig returns a new instance + ClientConfig clientConfig = super.proxy(proxy); + return new AppiumClientConfig( + clientConfig.baseUri(), + clientConfig.connectionTimeout(), + clientConfig.readTimeout(), + clientConfig.filter(), + clientConfig.proxy(), + clientConfig.credentials(), + directConnect); + } + + @Override + public AppiumClientConfig authenticateAs(Credentials credentials) { + // ClientConfig returns a new instance + ClientConfig clientConfig = super.authenticateAs(credentials); + return new AppiumClientConfig( + clientConfig.baseUri(), + clientConfig.connectionTimeout(), + clientConfig.readTimeout(), + clientConfig.filter(), + clientConfig.proxy(), + clientConfig.credentials(), + directConnect); + } + + /** * Whether enable directConnect feature described in * * Connecting Directly to Appium Hosts in Distributed Environments. * * @param directConnect if enable the directConnect feature - * @return A self reference + * @return A new instance of AppiumClientConfig */ public AppiumClientConfig directConnect(boolean directConnect) { - this.directConnect = directConnect; - return this; + return new AppiumClientConfig( + this.baseUri(), + this.connectionTimeout(), + this.readTimeout(), + this.filter(), + this.proxy(), + this.credentials(), + Require.nonNull("Direct Connect", directConnect) + ); } /** @@ -85,6 +216,6 @@ public AppiumClientConfig directConnect(boolean directConnect) { * @return If the directConnect is enabled.Defaults false. */ public boolean isDirectConnectEnabled() { - return this.directConnect; + return directConnect; } } diff --git a/src/main/java/io/appium/java_client/AppiumDriver.java b/src/main/java/io/appium/java_client/AppiumDriver.java index 2328232db..d814657c6 100644 --- a/src/main/java/io/appium/java_client/AppiumDriver.java +++ b/src/main/java/io/appium/java_client/AppiumDriver.java @@ -16,11 +16,9 @@ package io.appium.java_client; -import static com.google.common.base.Preconditions.checkNotNull; import static io.appium.java_client.internal.CapabilityHelpers.APPIUM_PREFIX; import static io.appium.java_client.remote.MobileCapabilityType.AUTOMATION_NAME; import static io.appium.java_client.remote.MobileCapabilityType.PLATFORM_NAME; -import static java.util.Optional.ofNullable; import static org.apache.commons.lang3.StringUtils.isBlank; import io.appium.java_client.internal.CapabilityHelpers; @@ -35,7 +33,6 @@ import org.openqa.selenium.MutableCapabilities; import org.openqa.selenium.SessionNotCreatedException; import org.openqa.selenium.WebDriverException; -import org.openqa.selenium.internal.Require; import org.openqa.selenium.remote.CapabilityType; import org.openqa.selenium.remote.DriverCommand; import org.openqa.selenium.remote.ErrorHandler; @@ -44,12 +41,9 @@ import org.openqa.selenium.remote.RemoteWebDriver; import org.openqa.selenium.remote.Response; import org.openqa.selenium.remote.html5.RemoteLocationContext; -import org.openqa.selenium.remote.http.ClientConfig; import org.openqa.selenium.remote.http.HttpClient; import org.openqa.selenium.remote.http.HttpMethod; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; import java.lang.reflect.Field; import java.net.URL; import java.util.Arrays; diff --git a/src/main/java/io/appium/java_client/android/AndroidDriver.java b/src/main/java/io/appium/java_client/android/AndroidDriver.java index 70a7e4011..ea60793f8 100644 --- a/src/main/java/io/appium/java_client/android/AndroidDriver.java +++ b/src/main/java/io/appium/java_client/android/AndroidDriver.java @@ -206,7 +206,8 @@ public AndroidDriver(HttpClient.Factory httpClientFactory, Capabilities capabili * */ public AndroidDriver(ClientConfig clientConfig, Capabilities capabilities) { - super(AppiumClientConfig.configFromClientConfig(clientConfig), ensurePlatformName(capabilities, ANDROID_PLATFORM)); + super(AppiumClientConfig.fromClientConfig(clientConfig), ensurePlatformName(capabilities, + ANDROID_PLATFORM)); } public AndroidDriver(AppiumClientConfig appiumClientConfig, Capabilities capabilities) { diff --git a/src/main/java/io/appium/java_client/gecko/GeckoDriver.java b/src/main/java/io/appium/java_client/gecko/GeckoDriver.java index 1287d9011..4a685f005 100644 --- a/src/main/java/io/appium/java_client/gecko/GeckoDriver.java +++ b/src/main/java/io/appium/java_client/gecko/GeckoDriver.java @@ -26,7 +26,6 @@ import org.openqa.selenium.remote.http.ClientConfig; import org.openqa.selenium.remote.http.HttpClient; -import javax.annotation.Nullable; import java.net.URL; /** @@ -98,7 +97,7 @@ public GeckoDriver(HttpClient.Factory httpClientFactory, Capabilities capabiliti * */ public GeckoDriver(ClientConfig clientConfig, Capabilities capabilities) { - super(AppiumClientConfig.configFromClientConfig(clientConfig), ensureAutomationName(capabilities, AUTOMATION_NAME)); + super(AppiumClientConfig.fromClientConfig(clientConfig), ensureAutomationName(capabilities, AUTOMATION_NAME)); } public GeckoDriver(AppiumClientConfig appiumClientConfig, Capabilities capabilities) { diff --git a/src/main/java/io/appium/java_client/ios/IOSDriver.java b/src/main/java/io/appium/java_client/ios/IOSDriver.java index bc839f2f2..23ceaa7bb 100644 --- a/src/main/java/io/appium/java_client/ios/IOSDriver.java +++ b/src/main/java/io/appium/java_client/ios/IOSDriver.java @@ -52,7 +52,6 @@ import org.openqa.selenium.remote.http.ClientConfig; import org.openqa.selenium.remote.http.HttpClient; -import javax.annotation.Nullable; import java.net.URL; import java.util.Collections; import java.util.Map; @@ -196,7 +195,7 @@ public IOSDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities * */ public IOSDriver(ClientConfig clientConfig, Capabilities capabilities) { - super(AppiumClientConfig.configFromClientConfig(clientConfig), + super(AppiumClientConfig.fromClientConfig(clientConfig), ensurePlatformName(capabilities, PLATFORM_NAME)); } diff --git a/src/main/java/io/appium/java_client/mac/Mac2Driver.java b/src/main/java/io/appium/java_client/mac/Mac2Driver.java index f90b1ec44..068d1c82e 100644 --- a/src/main/java/io/appium/java_client/mac/Mac2Driver.java +++ b/src/main/java/io/appium/java_client/mac/Mac2Driver.java @@ -29,7 +29,6 @@ import org.openqa.selenium.remote.http.ClientConfig; import org.openqa.selenium.remote.http.HttpClient; -import javax.annotation.Nullable; import java.net.URL; /** @@ -76,8 +75,6 @@ public Mac2Driver(AppiumServiceBuilder builder, Capabilities capabilities) { capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } - - public Mac2Driver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities capabilities) { super(builder, httpClientFactory, ensurePlatformAndAutomationNames( @@ -89,7 +86,6 @@ public Mac2Driver(HttpClient.Factory httpClientFactory, Capabilities capabilitie capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } - /** * Creates a new instance based on the given ClientConfig and {@code capabilities}. * The HTTP client is default client generated by {@link HttpCommandExecutor#getDefaultClientFactory}. @@ -112,9 +108,10 @@ public Mac2Driver(HttpClient.Factory httpClientFactory, Capabilities capabilitie * */ public Mac2Driver(ClientConfig clientConfig, Capabilities capabilities) { - super(AppiumClientConfig.configFromClientConfig(clientConfig), ensurePlatformAndAutomationNames( + super(AppiumClientConfig.fromClientConfig(clientConfig), ensurePlatformAndAutomationNames( capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } + public Mac2Driver(AppiumClientConfig appiumClientConfig, Capabilities capabilities) { super(appiumClientConfig, ensurePlatformAndAutomationNames( capabilities, PLATFORM_NAME, AUTOMATION_NAME)); diff --git a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java index 71e15fa44..6334eb414 100644 --- a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java +++ b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java @@ -53,7 +53,6 @@ import java.net.ConnectException; import java.net.MalformedURLException; import java.net.URL; -import java.time.Duration; import java.util.Map; import java.util.Optional; import java.util.UUID; @@ -91,7 +90,7 @@ public AppiumCommandExecutor( @Nullable AppiumClientConfig appiumClientConfig) { super(additionalCommands, ofNullable(appiumClientConfig).orElse( - AppiumClientConfig.configFromClientConfig( + AppiumClientConfig.fromClientConfig( ClientConfig.defaultConfig().baseUrl(Require.nonNull("Server URL", ofNullable(service) .map(DriverService::getUrl) .orElse(addressOfRemoteServer)) diff --git a/src/main/java/io/appium/java_client/safari/SafariDriver.java b/src/main/java/io/appium/java_client/safari/SafariDriver.java index e65856c45..a92059e28 100644 --- a/src/main/java/io/appium/java_client/safari/SafariDriver.java +++ b/src/main/java/io/appium/java_client/safari/SafariDriver.java @@ -27,7 +27,6 @@ import org.openqa.selenium.remote.http.ClientConfig; import org.openqa.selenium.remote.http.HttpClient; -import javax.annotation.Nullable; import java.net.URL; /** @@ -107,7 +106,7 @@ public SafariDriver(HttpClient.Factory httpClientFactory, Capabilities capabilit */ public SafariDriver(ClientConfig clientConfig, Capabilities capabilities) { - super(AppiumClientConfig.configFromClientConfig(clientConfig), ensurePlatformAndAutomationNames( + super(AppiumClientConfig.fromClientConfig(clientConfig), ensurePlatformAndAutomationNames( capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } diff --git a/src/main/java/io/appium/java_client/windows/WindowsDriver.java b/src/main/java/io/appium/java_client/windows/WindowsDriver.java index 73f8307b7..38d5a836d 100644 --- a/src/main/java/io/appium/java_client/windows/WindowsDriver.java +++ b/src/main/java/io/appium/java_client/windows/WindowsDriver.java @@ -32,7 +32,6 @@ import org.openqa.selenium.remote.http.ClientConfig; import org.openqa.selenium.remote.http.HttpClient; -import javax.annotation.Nullable; import java.net.URL; public class WindowsDriver extends AppiumDriver implements @@ -42,7 +41,7 @@ public class WindowsDriver extends AppiumDriver implements CanRecordScreen { private static final String PLATFORM_NAME = Platform.WINDOWS.name(); private static final String AUTOMATION_NAME = AutomationName.WINDOWS; - + public WindowsDriver(HttpCommandExecutor executor, Capabilities capabilities) { super(executor, ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } @@ -105,7 +104,7 @@ public WindowsDriver(HttpClient.Factory httpClientFactory, Capabilities capabili * */ public WindowsDriver(ClientConfig clientConfig, Capabilities capabilities) { - super(AppiumClientConfig.configFromClientConfig(clientConfig), ensurePlatformAndAutomationNames( + super(AppiumClientConfig.fromClientConfig(clientConfig), ensurePlatformAndAutomationNames( capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } diff --git a/src/test/java/io/appium/java_client/android/BaseAndroidTest.java b/src/test/java/io/appium/java_client/android/BaseAndroidTest.java index 31fe7f08c..3e75fe6f1 100644 --- a/src/test/java/io/appium/java_client/android/BaseAndroidTest.java +++ b/src/test/java/io/appium/java_client/android/BaseAndroidTest.java @@ -60,4 +60,4 @@ public class BaseAndroidTest { service.stop(); } } -} \ No newline at end of file +} From bab6830e85520d033764d44bfd3732f39d1ef726 Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Thu, 29 Sep 2022 17:32:00 -0700 Subject: [PATCH 32/66] tweak docstring --- .../java_client/android/AndroidDriver.java | 24 ++++++++++++++--- .../appium/java_client/gecko/GeckoDriver.java | 26 +++++++++++++++--- .../io/appium/java_client/ios/IOSDriver.java | 26 +++++++++++++++--- .../io/appium/java_client/mac/Mac2Driver.java | 26 +++++++++++++++--- .../java_client/safari/SafariDriver.java | 27 +++++++++++++++---- .../java_client/windows/WindowsDriver.java | 26 +++++++++++++++--- 6 files changed, 131 insertions(+), 24 deletions(-) diff --git a/src/main/java/io/appium/java_client/android/AndroidDriver.java b/src/main/java/io/appium/java_client/android/AndroidDriver.java index ea60793f8..92ed19370 100644 --- a/src/main/java/io/appium/java_client/android/AndroidDriver.java +++ b/src/main/java/io/appium/java_client/android/AndroidDriver.java @@ -194,10 +194,8 @@ public AndroidDriver(HttpClient.Factory httpClientFactory, Capabilities capabili * ClientConfig clientConfig = ClientConfig.defaultConfig() * .baseUri(URI.create("WebDriver URL")) * .readTimeout(Duration.ofMinutes(5)); - * AppiumClientConfig appiumClientConfig = AppiumClientConfig.defaultConfig() - * .setHttpClientConfig(clientConfig).directConnect(true); * UiAutomator2Options options = new UiAutomator2Options(); - * AndroidDriver driver = new AndroidDriver(options, appiumClientConfig); + * AndroidDriver driver = new AndroidDriver(clientConfig, options); * * * @@ -210,6 +208,26 @@ public AndroidDriver(ClientConfig clientConfig, Capabilities capabilities) { ANDROID_PLATFORM)); } + /** + * Creates a new instance based on the given ClientConfig and {@code capabilities}. + * The HTTP client is default client generated by {@link HttpCommandExecutor#getDefaultClientFactory}. + * For example: + * + *
+     *
+     * AppiumClientConfig appiumClientConfig = AppiumClientConfig.defaultConfig()
+     *     .directConnect(true)
+     *     .baseUri(URI.create("WebDriver URL"))
+     *     .readTimeout(Duration.ofMinutes(5));
+     * UiAutomator2Options options = new UiAutomator2Options();
+     * AndroidDriver driver = new AndroidDriver(appiumClientConfig, options);
+     *
+     * 
+ * + * @param appiumClientConfig take a look at {@link AppiumClientConfig} + * @param capabilities take a look at {@link Capabilities} + * + */ public AndroidDriver(AppiumClientConfig appiumClientConfig, Capabilities capabilities) { super(appiumClientConfig, ensurePlatformName(capabilities, ANDROID_PLATFORM)); } diff --git a/src/main/java/io/appium/java_client/gecko/GeckoDriver.java b/src/main/java/io/appium/java_client/gecko/GeckoDriver.java index 4a685f005..6a7a55cab 100644 --- a/src/main/java/io/appium/java_client/gecko/GeckoDriver.java +++ b/src/main/java/io/appium/java_client/gecko/GeckoDriver.java @@ -85,21 +85,39 @@ public GeckoDriver(HttpClient.Factory httpClientFactory, Capabilities capabiliti * ClientConfig clientConfig = ClientConfig.defaultConfig() * .baseUri(URI.create("WebDriver URL")) * .readTimeout(Duration.ofMinutes(5)); - * AppiumClientConfig appiumClientConfig = AppiumClientConfig.defaultConfig() - * .setHttpClientConfig(clientConfig).directConnect(true); * GeckoOptions options = new GeckoOptions(); - * GeckoDriver driver = new GeckoDriver(options, appiumClientConfig); + * GeckoDriver driver = new GeckoDriver(clientConfig, options); * * * + * @param clientConfig take a look at {@link ClientConfig} * @param capabilities take a look at {@link Capabilities} - * @param appiumClientConfig take a look at {@link AppiumClientConfig} * */ public GeckoDriver(ClientConfig clientConfig, Capabilities capabilities) { super(AppiumClientConfig.fromClientConfig(clientConfig), ensureAutomationName(capabilities, AUTOMATION_NAME)); } + /** + * Creates a new instance based on the given ClientConfig and {@code capabilities}. + * The HTTP client is default client generated by {@link HttpCommandExecutor#getDefaultClientFactory}. + * For example: + * + *
+     *
+     * AppiumClientConfig appiumClientConfig = AppiumClientConfig.defaultConfig()
+     *     .directConnect(true)
+     *     .baseUri(URI.create("WebDriver URL"))
+     *     .readTimeout(Duration.ofMinutes(5));
+     * GeckoOptions options = new GeckoOptions();
+     * GeckoDriver driver = new GeckoDriver(options, appiumClientConfig);
+     *
+     * 
+ * + * @param appiumClientConfig take a look at {@link AppiumClientConfig} + * @param capabilities take a look at {@link Capabilities} + * + */ public GeckoDriver(AppiumClientConfig appiumClientConfig, Capabilities capabilities) { super(appiumClientConfig, ensureAutomationName(capabilities, AUTOMATION_NAME)); } diff --git a/src/main/java/io/appium/java_client/ios/IOSDriver.java b/src/main/java/io/appium/java_client/ios/IOSDriver.java index 23ceaa7bb..24a71509f 100644 --- a/src/main/java/io/appium/java_client/ios/IOSDriver.java +++ b/src/main/java/io/appium/java_client/ios/IOSDriver.java @@ -183,15 +183,13 @@ public IOSDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities * ClientConfig clientConfig = ClientConfig.defaultConfig() * .baseUri(URI.create("WebDriver URL")) * .readTimeout(Duration.ofMinutes(5)); - * AppiumClientConfig appiumClientConfig = AppiumClientConfig.defaultConfig() - * .setHttpClientConfig(clientConfig).directConnect(true); * XCUITestOptions options = new XCUITestOptions(); - * IOSDriver driver = new IOSDriver(options, appiumClientConfig); + * IOSDriver driver = new IOSDriver(clientConfig, options); * * * - * @param capabilities take a look at {@link Capabilities} * @param clientConfig take a look at {@link ClientConfig} + * @param capabilities take a look at {@link Capabilities} * */ public IOSDriver(ClientConfig clientConfig, Capabilities capabilities) { @@ -199,6 +197,26 @@ public IOSDriver(ClientConfig clientConfig, Capabilities capabilities) { ensurePlatformName(capabilities, PLATFORM_NAME)); } + /** + * Creates a new instance based on the given ClientConfig and {@code capabilities}. + * The HTTP client is default client generated by {@link HttpCommandExecutor#getDefaultClientFactory}. + * For example: + * + *
+     *
+     * AppiumClientConfig appiumClientConfig = AppiumClientConfig.defaultConfig()
+     *     .directConnect(true)
+     *     .baseUri(URI.create("WebDriver URL"))
+     *     .readTimeout(Duration.ofMinutes(5));
+     * XCUITestOptions options = new XCUITestOptions();
+     * IOSDriver driver = new IOSDriver(options, appiumClientConfig);
+     *
+     * 
+ * + * @param appiumClientConfig take a look at {@link appiumClientConfig} + * @param capabilities take a look at {@link Capabilities} + * + */ public IOSDriver(AppiumClientConfig appiumClientConfig, Capabilities capabilities) { super(appiumClientConfig, ensurePlatformName(capabilities, PLATFORM_NAME)); } diff --git a/src/main/java/io/appium/java_client/mac/Mac2Driver.java b/src/main/java/io/appium/java_client/mac/Mac2Driver.java index 068d1c82e..905cbec77 100644 --- a/src/main/java/io/appium/java_client/mac/Mac2Driver.java +++ b/src/main/java/io/appium/java_client/mac/Mac2Driver.java @@ -96,15 +96,13 @@ public Mac2Driver(HttpClient.Factory httpClientFactory, Capabilities capabilitie * ClientConfig clientConfig = ClientConfig.defaultConfig() * .baseUri(URI.create("WebDriver URL")) * .readTimeout(Duration.ofMinutes(5)); - * AppiumClientConfig appiumClientConfig = AppiumClientConfig.defaultConfig() - * .setHttpClientConfig(clientConfig).directConnect(true); * Mac2Options options = new Mac2Options(); - * Mac2Driver driver = new Mac2Driver(options, appiumClientConfig); + * Mac2Driver driver = new Mac2Driver(clientConfig, options); * * * + * @param clientConfig take a look at {@link ClientConfig} * @param capabilities take a look at {@link Capabilities} - * @param clientConfig take a look at {@link AppiumClientConfig} * */ public Mac2Driver(ClientConfig clientConfig, Capabilities capabilities) { @@ -112,6 +110,26 @@ public Mac2Driver(ClientConfig clientConfig, Capabilities capabilities) { capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } + /** + * Creates a new instance based on the given ClientConfig and {@code capabilities}. + * The HTTP client is default client generated by {@link HttpCommandExecutor#getDefaultClientFactory}. + * For example: + * + *
+     *
+     * AppiumClientConfig appiumClientConfig = AppiumClientConfig.defaultConfig()
+     *     .directConnect(true)
+     *     .baseUri(URI.create("WebDriver URL"))
+     *     .readTimeout(Duration.ofMinutes(5));
+     * Mac2Options options = new Mac2Options();
+     * Mac2Driver driver = new Mac2Driver(appiumClientConfig, options);
+     *
+     * 
+ * + * @param appiumClientConfig take a look at {@link AppiumClientConfig} + * @param capabilities take a look at {@link Capabilities} + * + */ public Mac2Driver(AppiumClientConfig appiumClientConfig, Capabilities capabilities) { super(appiumClientConfig, ensurePlatformAndAutomationNames( capabilities, PLATFORM_NAME, AUTOMATION_NAME)); diff --git a/src/main/java/io/appium/java_client/safari/SafariDriver.java b/src/main/java/io/appium/java_client/safari/SafariDriver.java index a92059e28..97d1f96e4 100644 --- a/src/main/java/io/appium/java_client/safari/SafariDriver.java +++ b/src/main/java/io/appium/java_client/safari/SafariDriver.java @@ -93,23 +93,40 @@ public SafariDriver(HttpClient.Factory httpClientFactory, Capabilities capabilit * ClientConfig clientConfig = ClientConfig.defaultConfig() * .baseUri(URI.create("WebDriver URL")) * .readTimeout(Duration.ofMinutes(5)); - * AppiumClientConfig appiumClientConfig = AppiumClientConfig.defaultConfig() - * .setHttpClientConfig(clientConfig).directConnect(true); * SafariOptions options = new SafariOptions(); - * SafariDriver driver = new SafariDriver(options, appiumClientConfig); + * SafariDriver driver = new SafariDriver(clientConfig, options); * * * + * @param clientConfig take a look at {@link ClientConfig} * @param capabilities take a look at {@link Capabilities} - * @param clientConfig take a look at {@link AppiumClientConfig} * */ - public SafariDriver(ClientConfig clientConfig, Capabilities capabilities) { super(AppiumClientConfig.fromClientConfig(clientConfig), ensurePlatformAndAutomationNames( capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } + /** + * Creates a new instance based on the given ClientConfig and {@code capabilities}. + * The HTTP client is default client generated by {@link HttpCommandExecutor#getDefaultClientFactory}. + * For example: + * + *
+     *
+     * AppiumClientConfig appiumClientConfig = AppiumClientConfig.defaultConfig()
+     *     .directConnect(true)
+     *     .baseUri(URI.create("WebDriver URL"))
+     *     .readTimeout(Duration.ofMinutes(5));
+     * SafariOptions options = new SafariOptions();
+     * SafariDriver driver = new SafariDriver(appiumClientConfig, options);
+     *
+     * 
+ * + * @param appiumClientConfig take a look at {@link AppiumClientConfig} + * @param capabilities take a look at {@link Capabilities} + * + */ public SafariDriver(AppiumClientConfig appiumClientConfig, Capabilities capabilities) { super(appiumClientConfig, ensurePlatformAndAutomationNames( capabilities, PLATFORM_NAME, AUTOMATION_NAME)); diff --git a/src/main/java/io/appium/java_client/windows/WindowsDriver.java b/src/main/java/io/appium/java_client/windows/WindowsDriver.java index 38d5a836d..9a441d68a 100644 --- a/src/main/java/io/appium/java_client/windows/WindowsDriver.java +++ b/src/main/java/io/appium/java_client/windows/WindowsDriver.java @@ -92,15 +92,13 @@ public WindowsDriver(HttpClient.Factory httpClientFactory, Capabilities capabili * ClientConfig clientConfig = ClientConfig.defaultConfig() * .baseUri(URI.create("WebDriver URL")) * .readTimeout(Duration.ofMinutes(5)); - * AppiumClientConfig appiumClientConfig = AppiumClientConfig.defaultConfig() - * .setHttpClientConfig(clientConfig).directConnect(true); * WindowsOptions options = new WindowsOptions(); - * WindowsDriver driver = new WindowsDriver(options, appiumClientConfig); + * WindowsDriver driver = new WindowsDriver(clientConfig, options); * * * + * @param clientConfig take a look at {@link ClientConfig} * @param capabilities take a look at {@link Capabilities} - * @param clientConfig take a look at {@link AppiumClientConfig} * */ public WindowsDriver(ClientConfig clientConfig, Capabilities capabilities) { @@ -108,6 +106,26 @@ public WindowsDriver(ClientConfig clientConfig, Capabilities capabilities) { capabilities, PLATFORM_NAME, AUTOMATION_NAME)); } + /** + * Creates a new instance based on the given ClientConfig and {@code capabilities}. + * The HTTP client is default client generated by {@link HttpCommandExecutor#getDefaultClientFactory}. + * For example: + * + *
+     *
+     * AppiumClientConfig appiumClientConfig = AppiumClientConfig.defaultConfig()
+     *     .directConnect(true)
+     *     .baseUri(URI.create("WebDriver URL"))
+     *     .readTimeout(Duration.ofMinutes(5));
+     * WindowsOptions options = new WindowsOptions();
+     * WindowsDriver driver = new WindowsDriver(appiumClientConfig, options);
+     *
+     * 
+ * + * @param appiumClientConfig take a look at {@link AppiumClientConfig} + * @param capabilities take a look at {@link Capabilities} + * + */ public WindowsDriver(AppiumClientConfig appiumClientConfig, Capabilities capabilities) { super(appiumClientConfig, ensurePlatformAndAutomationNames( capabilities, PLATFORM_NAME, AUTOMATION_NAME)); From 8d9b785b2273940be02045f9380fea6ebf7319ca Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Thu, 29 Sep 2022 17:37:38 -0700 Subject: [PATCH 33/66] rever some unnecessary changes --- .../remote/AppiumCommandExecutor.java | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java index 6334eb414..7c6038b97 100644 --- a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java +++ b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java @@ -67,7 +67,6 @@ public class AppiumCommandExecutor extends HttpCommandExecutor { private final AppiumClientConfig appiumClientConfig; - private static final String DIRECT_CONNECT_PROTOCOL = "directConnectProtocol"; private static final String DIRECT_CONNECT_PATH = "directConnectPath"; private static final String DIRECT_CONNECT_HOST = "directConnectHost"; @@ -90,11 +89,10 @@ public AppiumCommandExecutor( @Nullable AppiumClientConfig appiumClientConfig) { super(additionalCommands, ofNullable(appiumClientConfig).orElse( - AppiumClientConfig.fromClientConfig( - ClientConfig.defaultConfig().baseUrl(Require.nonNull("Server URL", ofNullable(service) + AppiumClientConfig.defaultConfig() + .baseUrl(Require.nonNull("Server URL", ofNullable(service) .map(DriverService::getUrl) - .orElse(addressOfRemoteServer)) - )) + .orElse(addressOfRemoteServer))) ), ofNullable(httpClientFactory).orElseGet(HttpCommandExecutor::getDefaultClientFactory) ); @@ -106,8 +104,7 @@ public AppiumCommandExecutor( public AppiumCommandExecutor(Map additionalCommands, DriverService service, HttpClient.Factory httpClientFactory) { - this(additionalCommands, checkNotNull(service), checkNotNull(service).getUrl(), httpClientFactory, - AppiumClientConfig.defaultConfig()); + this(additionalCommands, checkNotNull(service), checkNotNull(service).getUrl(), httpClientFactory, null); } public AppiumCommandExecutor(Map additionalCommands, DriverService service, @@ -118,8 +115,7 @@ public AppiumCommandExecutor(Map additionalCommands, Driver public AppiumCommandExecutor(Map additionalCommands, URL addressOfRemoteServer, HttpClient.Factory httpClientFactory) { - this(additionalCommands, null, checkNotNull(addressOfRemoteServer), httpClientFactory, - AppiumClientConfig.defaultConfig()); + this(additionalCommands, null, checkNotNull(addressOfRemoteServer), httpClientFactory, null); } public AppiumCommandExecutor(Map additionalCommands, @@ -137,8 +133,7 @@ public AppiumCommandExecutor(Map additionalCommands, Appium public AppiumCommandExecutor(Map additionalCommands, URL addressOfRemoteServer) { - this(additionalCommands, checkNotNull(addressOfRemoteServer), HttpClient.Factory.createDefault(), - AppiumClientConfig.defaultConfig()); + this(additionalCommands, checkNotNull(addressOfRemoteServer), HttpClient.Factory.createDefault(), null); } public AppiumCommandExecutor(Map additionalCommands, @@ -149,7 +144,7 @@ public AppiumCommandExecutor(Map additionalCommands, public AppiumCommandExecutor(Map additionalCommands, DriverService service) { - this(additionalCommands, service, HttpClient.Factory.createDefault(), AppiumClientConfig.defaultConfig()); + this(additionalCommands, service, HttpClient.Factory.createDefault(), null); } public AppiumCommandExecutor(Map additionalCommands, From 839df2178bb60e4aaf4dde8c4934b9ea509e08da Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Fri, 30 Sep 2022 11:42:31 -0700 Subject: [PATCH 34/66] run tests in internal as unitTests, add user agent definition --- .github/workflows/gradle.yml | 2 +- build.gradle | 15 +++++++++++++-- gradle.properties | 1 + 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index e5981b475..caf838f59 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -27,4 +27,4 @@ jobs: java-version: ${{ matrix.java }} cache: 'gradle' - name: Build with Gradle - run: ./gradlew clean build -x test -x checkstyleTest + run: ./gradlew clean build -x unitTest -x checkstyleTest diff --git a/build.gradle b/build.gradle index 2e9865f5c..5615e9815 100644 --- a/build.gradle +++ b/build.gradle @@ -25,6 +25,7 @@ java { ext { seleniumVersion = project.property('selenium.version') + appiumClientVersion = project.property('appiumClient.version') } dependencies { @@ -111,7 +112,7 @@ publishing { mavenJava(MavenPublication) { groupId = 'io.appium' artifactId = 'java-client' - version = '8.2.0' + version = appiumClientVersion from components.java pom { name = 'java-client' @@ -187,10 +188,20 @@ wrapper { processResources { filter ReplaceTokens, tokens: [ - 'selenium.version': seleniumVersion + 'selenium.version': seleniumVersion, + 'appiumClient.version': appiumClientVersion ] } +task unitTest( type: Test ) { + useJUnitPlatform() + testLogging.showStandardStreams = true + testLogging.exceptionFormat = 'full' + filter { + includeTestsMatching 'io.appium.java_client.internal.*' + } +} + task xcuiTest( type: Test ) { useJUnitPlatform() testLogging.showStandardStreams = true diff --git a/gradle.properties b/gradle.properties index 9b086f575..b7bb193a7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,3 +8,4 @@ ossrhUsername=your-jira-id ossrhPassword=your-jira-password selenium.version=4.5.0 +appiumClient.version=8.2.0 \ No newline at end of file From ec63fb1d9212c5d491578a12effe42cb2fea1f13 Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Fri, 30 Sep 2022 11:43:07 -0700 Subject: [PATCH 35/66] add tests, tweak some lines --- .../java_client/AddAppiumUserAgent.java | 9 +++--- .../java_client/AppiumClientConfig.java | 31 ++++++++++++++----- .../io/appium/java_client/ios/IOSDriver.java | 2 +- .../remote/AppiumCommandExecutor.java | 8 +++-- src/main/resources/main.properties | 1 + .../java_client/internal/ConfigTest.java | 14 ++++++--- 6 files changed, 46 insertions(+), 19 deletions(-) diff --git a/src/main/java/io/appium/java_client/AddAppiumUserAgent.java b/src/main/java/io/appium/java_client/AddAppiumUserAgent.java index be1ee1045..1f8e7691d 100644 --- a/src/main/java/io/appium/java_client/AddAppiumUserAgent.java +++ b/src/main/java/io/appium/java_client/AddAppiumUserAgent.java @@ -1,5 +1,6 @@ package io.appium.java_client; +import io.appium.java_client.internal.Config; import org.openqa.selenium.BuildInfo; import org.openqa.selenium.Platform; import org.openqa.selenium.remote.http.Filter; @@ -15,11 +16,11 @@ public class AddAppiumUserAgent implements Filter { public static final String USER_AGENT = String.format( "appium/%s (selenium/%s (java %s))", - "TODO: appium version", + Config.main().getValue("appiumClient.version", String.class), new BuildInfo().getReleaseLabel(), - (Platform.getCurrent().family() == null ? - Platform.getCurrent().toString().toLowerCase(Locale.US) : - Platform.getCurrent().family().toString().toLowerCase(Locale.US))); + (Platform.getCurrent().family() == null + ? Platform.getCurrent().toString().toLowerCase(Locale.US) + : Platform.getCurrent().family().toString().toLowerCase(Locale.US))); @Override public HttpHandler apply(HttpHandler next) { diff --git a/src/main/java/io/appium/java_client/AppiumClientConfig.java b/src/main/java/io/appium/java_client/AppiumClientConfig.java index 305ac69f9..d8c8a88e5 100644 --- a/src/main/java/io/appium/java_client/AppiumClientConfig.java +++ b/src/main/java/io/appium/java_client/AppiumClientConfig.java @@ -38,6 +38,13 @@ public class AppiumClientConfig extends ClientConfig { private static final Duration DEFAULT_READ_TIMEOUT = Duration.ofMinutes(10); + private final URI baseUri; + private final Duration connectionTimeout; + private final Duration readTimeout; + private final Filter filters; + private final Proxy proxy; + private final Credentials credentials; + protected AppiumClientConfig( URI baseUri, Duration connectionTimeout, @@ -48,8 +55,16 @@ protected AppiumClientConfig( boolean directConnect) { super(baseUri, connectionTimeout, readTimeout, filters, proxy, credentials); + // Parameter check has done in the super + this.baseUri = baseUri; + this.connectionTimeout = connectionTimeout; + this.readTimeout = readTimeout; + this.filters = filters; + this.proxy = proxy; + this.credentials = credentials; + this.directConnect = directConnect; - } + } /** * Return the instance of {@link AppiumClientConfig} with a default config. @@ -68,6 +83,7 @@ public static AppiumClientConfig defaultConfig() { /** * Return the instance of {@link AppiumClientConfig} from the given {@link ClientConfig} parameters. + * @param clientConfig take a look at {@link ClientConfig} * @return the instance of {@link AppiumClientConfig}. */ public static AppiumClientConfig fromClientConfig(ClientConfig clientConfig) { @@ -199,13 +215,14 @@ public AppiumClientConfig authenticateAs(Credentials credentials) { * @return A new instance of AppiumClientConfig */ public AppiumClientConfig directConnect(boolean directConnect) { + // follows ClientConfig's design return new AppiumClientConfig( - this.baseUri(), - this.connectionTimeout(), - this.readTimeout(), - this.filter(), - this.proxy(), - this.credentials(), + baseUri, + connectionTimeout, + readTimeout, + filters, + proxy, + credentials, Require.nonNull("Direct Connect", directConnect) ); } diff --git a/src/main/java/io/appium/java_client/ios/IOSDriver.java b/src/main/java/io/appium/java_client/ios/IOSDriver.java index 24a71509f..00098b14c 100644 --- a/src/main/java/io/appium/java_client/ios/IOSDriver.java +++ b/src/main/java/io/appium/java_client/ios/IOSDriver.java @@ -213,7 +213,7 @@ public IOSDriver(ClientConfig clientConfig, Capabilities capabilities) { * * * - * @param appiumClientConfig take a look at {@link appiumClientConfig} + * @param appiumClientConfig take a look at {@link AppiumClientConfig} * @param capabilities take a look at {@link Capabilities} * */ diff --git a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java index 7c6038b97..9664f50b7 100644 --- a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java +++ b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java @@ -40,7 +40,6 @@ import org.openqa.selenium.remote.Response; import org.openqa.selenium.remote.ResponseCodec; import org.openqa.selenium.remote.codec.w3c.W3CHttpCommandCodec; -import org.openqa.selenium.remote.http.ClientConfig; import org.openqa.selenium.remote.http.HttpClient; import org.openqa.selenium.remote.http.HttpRequest; import org.openqa.selenium.remote.http.HttpResponse; @@ -205,9 +204,12 @@ protected HttpClient getClient() { * @param serverUrl to set the URL as the new client's base url. */ protected void overrideServerUrl(URL serverUrl) { + if (this.appiumClientConfig == null) { + return; + } setPrivateFieldValue(HttpCommandExecutor.class, "client", ofNullable(this.httpClientFactory).orElseGet(HttpCommandExecutor::getDefaultClientFactory) - .createClient(this.appiumClientConfig.baseUrl(serverUrl))); + .createClient(this.appiumClientConfig)); } private Response createSession(Command command) throws IOException { @@ -230,7 +232,7 @@ private Response createSession(Command command) throws IOException { refreshAdditionalCommands(); setResponseCodec(dialect.getResponseCodec()); Response response = result.createResponse(); - if (this.appiumClientConfig.isDirectConnectEnabled()) { + if (this.appiumClientConfig != null && this.appiumClientConfig.isDirectConnectEnabled()) { setDirectConnect(response); } return response; diff --git a/src/main/resources/main.properties b/src/main/resources/main.properties index a4236a9fe..fde9336e5 100644 --- a/src/main/resources/main.properties +++ b/src/main/resources/main.properties @@ -1 +1,2 @@ selenium.version=@selenium.version@ +appiumClient.version=@appiumClient.version@ \ No newline at end of file diff --git a/src/test/java/io/appium/java_client/internal/ConfigTest.java b/src/test/java/io/appium/java_client/internal/ConfigTest.java index df8611458..5708028eb 100644 --- a/src/test/java/io/appium/java_client/internal/ConfigTest.java +++ b/src/test/java/io/appium/java_client/internal/ConfigTest.java @@ -9,13 +9,18 @@ import org.junit.jupiter.api.Test; class ConfigTest { - private static final String EXISTING_KEY = "selenium.version"; + private static final String SELENIUM_EXISTING_KEY = "selenium.version"; + + private static final String APPIUM_EXISTING_KEY = "appiumClient.version"; private static final String MISSING_KEY = "bla"; @Test void verifyGettingExistingValue() { - assertThat(Config.main().getValue(EXISTING_KEY, String.class).length(), greaterThan(0)); - assertTrue(Config.main().getOptionalValue(EXISTING_KEY, String.class).isPresent()); + assertThat(Config.main().getValue(SELENIUM_EXISTING_KEY, String.class).length(), greaterThan(0)); + assertTrue(Config.main().getOptionalValue(SELENIUM_EXISTING_KEY, String.class).isPresent()); + + assertThat(Config.main().getValue(APPIUM_EXISTING_KEY, String.class).length(), greaterThan(0)); + assertTrue(Config.main().getOptionalValue(APPIUM_EXISTING_KEY, String.class).isPresent()); } @Test @@ -25,7 +30,8 @@ void verifyGettingNonExistingValue() { @Test void verifyGettingExistingValueWithWrongClass() { - assertThrows(ClassCastException.class, () -> Config.main().getValue(EXISTING_KEY, Integer.class)); + assertThrows(ClassCastException.class, () -> Config.main().getValue(SELENIUM_EXISTING_KEY, Integer.class)); + assertThrows(ClassCastException.class, () -> Config.main().getValue(APPIUM_EXISTING_KEY, Integer.class)); } @Test From 04601694b11e22fa9b43c70328d12ae216152c52 Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Fri, 30 Sep 2022 11:47:20 -0700 Subject: [PATCH 36/66] add a key --- .../java/io/appium/java_client/AddAppiumUserAgent.java | 4 +++- .../java/io/appium/java_client/internal/ConfigTest.java | 8 ++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/main/java/io/appium/java_client/AddAppiumUserAgent.java b/src/main/java/io/appium/java_client/AddAppiumUserAgent.java index 1f8e7691d..78e29fcf2 100644 --- a/src/main/java/io/appium/java_client/AddAppiumUserAgent.java +++ b/src/main/java/io/appium/java_client/AddAppiumUserAgent.java @@ -14,9 +14,11 @@ public class AddAppiumUserAgent implements Filter { + public static final String VERSION_KEY = "appiumClient.version"; + public static final String USER_AGENT = String.format( "appium/%s (selenium/%s (java %s))", - Config.main().getValue("appiumClient.version", String.class), + Config.main().getValue(VERSION_KEY, String.class), new BuildInfo().getReleaseLabel(), (Platform.getCurrent().family() == null ? Platform.getCurrent().toString().toLowerCase(Locale.US) diff --git a/src/test/java/io/appium/java_client/internal/ConfigTest.java b/src/test/java/io/appium/java_client/internal/ConfigTest.java index 5708028eb..a92cf15bb 100644 --- a/src/test/java/io/appium/java_client/internal/ConfigTest.java +++ b/src/test/java/io/appium/java_client/internal/ConfigTest.java @@ -6,12 +6,12 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; +import io.appium.java_client.AddAppiumUserAgent; import org.junit.jupiter.api.Test; class ConfigTest { private static final String SELENIUM_EXISTING_KEY = "selenium.version"; - private static final String APPIUM_EXISTING_KEY = "appiumClient.version"; private static final String MISSING_KEY = "bla"; @Test @@ -19,8 +19,8 @@ void verifyGettingExistingValue() { assertThat(Config.main().getValue(SELENIUM_EXISTING_KEY, String.class).length(), greaterThan(0)); assertTrue(Config.main().getOptionalValue(SELENIUM_EXISTING_KEY, String.class).isPresent()); - assertThat(Config.main().getValue(APPIUM_EXISTING_KEY, String.class).length(), greaterThan(0)); - assertTrue(Config.main().getOptionalValue(APPIUM_EXISTING_KEY, String.class).isPresent()); + assertThat(Config.main().getValue(AddAppiumUserAgent.VERSION_KEY, String.class).length(), greaterThan(0)); + assertTrue(Config.main().getOptionalValue(AddAppiumUserAgent.VERSION_KEY, String.class).isPresent()); } @Test @@ -31,7 +31,7 @@ void verifyGettingNonExistingValue() { @Test void verifyGettingExistingValueWithWrongClass() { assertThrows(ClassCastException.class, () -> Config.main().getValue(SELENIUM_EXISTING_KEY, Integer.class)); - assertThrows(ClassCastException.class, () -> Config.main().getValue(APPIUM_EXISTING_KEY, Integer.class)); + assertThrows(ClassCastException.class, () -> Config.main().getValue(AddAppiumUserAgent.VERSION_KEY, Integer.class)); } @Test From 6db723c52620eed541020a9e02540a8fbbe373d1 Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Fri, 30 Sep 2022 11:50:02 -0700 Subject: [PATCH 37/66] add docstring --- src/main/java/io/appium/java_client/AddAppiumUserAgent.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/io/appium/java_client/AddAppiumUserAgent.java b/src/main/java/io/appium/java_client/AddAppiumUserAgent.java index 78e29fcf2..7992ca9a4 100644 --- a/src/main/java/io/appium/java_client/AddAppiumUserAgent.java +++ b/src/main/java/io/appium/java_client/AddAppiumUserAgent.java @@ -16,6 +16,10 @@ public class AddAppiumUserAgent implements Filter { public static final String VERSION_KEY = "appiumClient.version"; + /** + * A custom User Agent name for Appium Java client. + * e.g. appium/8.3.0 (selenium/4.5.0 (java mac)) + */ public static final String USER_AGENT = String.format( "appium/%s (selenium/%s (java %s))", Config.main().getValue(VERSION_KEY, String.class), From c2676eeee76be58efef1709093becf8426a4659c Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Fri, 30 Sep 2022 14:43:54 -0700 Subject: [PATCH 38/66] remove unnecessary argument --- .../java_client/AddAppiumUserAgent.java | 16 +++++ .../java_client/AppiumClientConfig.java | 1 - .../remote/AppiumCommandExecutor.java | 70 +++++++------------ 3 files changed, 42 insertions(+), 45 deletions(-) diff --git a/src/main/java/io/appium/java_client/AddAppiumUserAgent.java b/src/main/java/io/appium/java_client/AddAppiumUserAgent.java index 7992ca9a4..a93e74239 100644 --- a/src/main/java/io/appium/java_client/AddAppiumUserAgent.java +++ b/src/main/java/io/appium/java_client/AddAppiumUserAgent.java @@ -1,3 +1,19 @@ +/* + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * See the NOTICE file distributed with this work for additional + * information regarding copyright ownership. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package io.appium.java_client; import io.appium.java_client.internal.Config; diff --git a/src/main/java/io/appium/java_client/AppiumClientConfig.java b/src/main/java/io/appium/java_client/AppiumClientConfig.java index d8c8a88e5..1d4f10482 100644 --- a/src/main/java/io/appium/java_client/AppiumClientConfig.java +++ b/src/main/java/io/appium/java_client/AppiumClientConfig.java @@ -33,7 +33,6 @@ public class AppiumClientConfig extends ClientConfig { private final boolean directConnect; - // TODO: Update to use Appium Java UserAgent private static final Filter DEFAULT_FILTER = new AddAppiumUserAgent(); private static final Duration DEFAULT_READ_TIMEOUT = Duration.ofMinutes(10); diff --git a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java index 9664f50b7..1d2d93564 100644 --- a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java +++ b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java @@ -26,6 +26,7 @@ import com.google.common.base.Throwables; import io.appium.java_client.AppiumClientConfig; +import org.apache.commons.lang3.ObjectUtils; import org.openqa.selenium.SessionNotCreatedException; import org.openqa.selenium.WebDriverException; import org.openqa.selenium.internal.Require; @@ -76,23 +77,16 @@ public class AppiumCommandExecutor extends HttpCommandExecutor { * * @param additionalCommands is the map of Appium commands * @param service take a look at {@link DriverService} - * @param addressOfRemoteServer is the address of remotely/locally started Appium server * @param httpClientFactory take a look at {@link HttpClient.Factory} * @param appiumClientConfig take a look at {@link AppiumClientConfig} */ public AppiumCommandExecutor( @Nonnull Map additionalCommands, @Nullable DriverService service, - @Nonnull URL addressOfRemoteServer, @Nullable HttpClient.Factory httpClientFactory, - @Nullable AppiumClientConfig appiumClientConfig) { + @Nonnull AppiumClientConfig appiumClientConfig) { super(additionalCommands, - ofNullable(appiumClientConfig).orElse( - AppiumClientConfig.defaultConfig() - .baseUrl(Require.nonNull("Server URL", ofNullable(service) - .map(DriverService::getUrl) - .orElse(addressOfRemoteServer))) - ), + appiumClientConfig, ofNullable(httpClientFactory).orElseGet(HttpCommandExecutor::getDefaultClientFactory) ); serviceOptional = ofNullable(service); @@ -103,47 +97,34 @@ public AppiumCommandExecutor( public AppiumCommandExecutor(Map additionalCommands, DriverService service, HttpClient.Factory httpClientFactory) { - this(additionalCommands, checkNotNull(service), checkNotNull(service).getUrl(), httpClientFactory, null); + this(additionalCommands, checkNotNull(service), httpClientFactory, + AppiumClientConfig.defaultConfig().baseUrl(checkNotNull(service).getUrl())); } - public AppiumCommandExecutor(Map additionalCommands, DriverService service, - HttpClient.Factory httpClientFactory, AppiumClientConfig appiumClientConfig) { - this(additionalCommands, checkNotNull(service), checkNotNull(service).getUrl(), httpClientFactory, - appiumClientConfig); - } - - public AppiumCommandExecutor(Map additionalCommands, - URL addressOfRemoteServer, HttpClient.Factory httpClientFactory) { - this(additionalCommands, null, checkNotNull(addressOfRemoteServer), httpClientFactory, null); - } - - public AppiumCommandExecutor(Map additionalCommands, - URL addressOfRemoteServer, - HttpClient.Factory httpClientFactory, - AppiumClientConfig appiumClientConfig) { - this(additionalCommands, null, checkNotNull(addressOfRemoteServer), httpClientFactory, - appiumClientConfig); + public AppiumCommandExecutor(Map additionalCommands, URL addressOfRemoteServer, + HttpClient.Factory httpClientFactory) { + this(additionalCommands, null, httpClientFactory, + AppiumClientConfig.defaultConfig().baseUrl(checkNotNull(addressOfRemoteServer))); } public AppiumCommandExecutor(Map additionalCommands, AppiumClientConfig appiumClientConfig) { - this(additionalCommands, null, checkNotNull(appiumClientConfig.baseUrl()), - null, appiumClientConfig); + this(additionalCommands, null, null, appiumClientConfig); } - public AppiumCommandExecutor(Map additionalCommands, - URL addressOfRemoteServer) { - this(additionalCommands, checkNotNull(addressOfRemoteServer), HttpClient.Factory.createDefault(), null); + public AppiumCommandExecutor(Map additionalCommands, URL addressOfRemoteServer) { + this(additionalCommands, null, HttpClient.Factory.createDefault(), + AppiumClientConfig.defaultConfig().baseUrl(checkNotNull(addressOfRemoteServer))); } - public AppiumCommandExecutor(Map additionalCommands, - URL addressOfRemoteServer, AppiumClientConfig appiumClientConfig) { - this(additionalCommands, checkNotNull(addressOfRemoteServer), - HttpClient.Factory.createDefault(), appiumClientConfig); + public AppiumCommandExecutor(Map additionalCommands, URL addressOfRemoteServer, + AppiumClientConfig appiumClientConfig) { + this(additionalCommands, null, HttpClient.Factory.createDefault(), + appiumClientConfig.baseUrl(checkNotNull(addressOfRemoteServer))); } - public AppiumCommandExecutor(Map additionalCommands, - DriverService service) { - this(additionalCommands, service, HttpClient.Factory.createDefault(), null); + public AppiumCommandExecutor(Map additionalCommands, DriverService service) { + this(additionalCommands, service, HttpClient.Factory.createDefault(), + AppiumClientConfig.defaultConfig().baseUrl(service.getUrl())); } public AppiumCommandExecutor(Map additionalCommands, @@ -199,9 +180,8 @@ protected HttpClient getClient() { /** * Override the http client in the HttpCommandExecutor class with a new http client instance with the given URL. - * Use the same http client factory and client config if the constructor got them. - * - * @param serverUrl to set the URL as the new client's base url. + * It uses the same http client factory and client config for the new http client instance + * if the constructor got them. */ protected void overrideServerUrl(URL serverUrl) { if (this.appiumClientConfig == null) { @@ -209,7 +189,7 @@ protected void overrideServerUrl(URL serverUrl) { } setPrivateFieldValue(HttpCommandExecutor.class, "client", ofNullable(this.httpClientFactory).orElseGet(HttpCommandExecutor::getDefaultClientFactory) - .createClient(this.appiumClientConfig)); + .createClient(this.appiumClientConfig.baseUrl(serverUrl))); } private Response createSession(Command command) throws IOException { @@ -235,6 +215,7 @@ private Response createSession(Command command) throws IOException { if (this.appiumClientConfig != null && this.appiumClientConfig.isDirectConnectEnabled()) { setDirectConnect(response); } + return response; } @@ -268,7 +249,8 @@ private void setDirectConnect(Response response) throws SessionNotCreatedExcepti newUrl = new URL(newUrlCandidate); } catch (MalformedURLException e) { // TODO: tweak the description - throw new SessionNotCreatedException(String.format("directConnect generated invalid URL as %s", + throw new SessionNotCreatedException( + String.format("The remote server returned an invalid value to build the direct connect URL: %s", newUrlCandidate)); } From 73268115af1f762186fe8331f286ee0575e56300 Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Fri, 30 Sep 2022 15:09:06 -0700 Subject: [PATCH 39/66] chore: add comments --- gradle.properties | 3 ++- .../java_client/AppiumClientConfig.java | 26 ++++++++++++++++--- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/gradle.properties b/gradle.properties index b7bb193a7..239efd600 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,4 +8,5 @@ ossrhUsername=your-jira-id ossrhPassword=your-jira-password selenium.version=4.5.0 -appiumClient.version=8.2.0 \ No newline at end of file +# Please increment the value in a release +appiumClient.version=8.2.0 diff --git a/src/main/java/io/appium/java_client/AppiumClientConfig.java b/src/main/java/io/appium/java_client/AppiumClientConfig.java index 1d4f10482..087e65c96 100644 --- a/src/main/java/io/appium/java_client/AppiumClientConfig.java +++ b/src/main/java/io/appium/java_client/AppiumClientConfig.java @@ -16,16 +16,22 @@ package io.appium.java_client; +import org.checkerframework.checker.nullness.qual.NonNull; import org.openqa.selenium.Credentials; import org.openqa.selenium.internal.Require; import org.openqa.selenium.remote.http.ClientConfig; import org.openqa.selenium.remote.http.Filter; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; import java.net.Proxy; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.time.Duration; +import java.util.Optional; + +import static java.util.Optional.ofNullable; /** * A class to store the appium http client configuration. @@ -44,6 +50,18 @@ public class AppiumClientConfig extends ClientConfig { private final Proxy proxy; private final Credentials credentials; + /** + * Client side configuration + * + * @param baseUri Base URL the client sends HTTP request to. + * @param connectionTimeout The client connection timeout. + * @param readTimeout The client read timeout. + * @param filters Filters to modify incoming {@link org.openqa.selenium.remote.http.HttpRequest} or outgoing + * {@link org.openqa.selenium.remote.http.HttpResponse}. + * @param proxy The client proxy preference. + * @param credentials Credentials used for authenticating http requests + * @param directConnect If directConnect is enabled. + */ protected AppiumClientConfig( URI baseUri, Duration connectionTimeout, @@ -54,7 +72,7 @@ protected AppiumClientConfig( boolean directConnect) { super(baseUri, connectionTimeout, readTimeout, filters, proxy, credentials); - // Parameter check has done in the super + // Parameter checks have done in the super class this.baseUri = baseUri; this.connectionTimeout = connectionTimeout; this.readTimeout = readTimeout; @@ -62,7 +80,7 @@ protected AppiumClientConfig( this.proxy = proxy; this.credentials = credentials; - this.directConnect = directConnect; + this.directConnect = Require.nonNull("Direct Connect", directConnect); } /** @@ -222,14 +240,14 @@ public AppiumClientConfig directConnect(boolean directConnect) { filters, proxy, credentials, - Require.nonNull("Direct Connect", directConnect) + directConnect ); } /** * Whether enable directConnect feature is enabled. * - * @return If the directConnect is enabled.Defaults false. + * @return If the directConnect is enabled. Defaults false. */ public boolean isDirectConnectEnabled() { return directConnect; From 397f596922b6922f7dbbbe40b7890a0e29efd98e Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Fri, 30 Sep 2022 15:19:24 -0700 Subject: [PATCH 40/66] chore: tweak --- .../java_client/AddAppiumUserAgent.java | 2 +- .../java_client/AppiumClientConfig.java | 27 +++++-------------- 2 files changed, 7 insertions(+), 22 deletions(-) diff --git a/src/main/java/io/appium/java_client/AddAppiumUserAgent.java b/src/main/java/io/appium/java_client/AddAppiumUserAgent.java index a93e74239..f8a5e0456 100644 --- a/src/main/java/io/appium/java_client/AddAppiumUserAgent.java +++ b/src/main/java/io/appium/java_client/AddAppiumUserAgent.java @@ -34,7 +34,7 @@ public class AddAppiumUserAgent implements Filter { /** * A custom User Agent name for Appium Java client. - * e.g. appium/8.3.0 (selenium/4.5.0 (java mac)) + * e.g. appium/8.2.0 (selenium/4.5.0 (java mac)) */ public static final String USER_AGENT = String.format( "appium/%s (selenium/%s (java %s))", diff --git a/src/main/java/io/appium/java_client/AppiumClientConfig.java b/src/main/java/io/appium/java_client/AppiumClientConfig.java index 087e65c96..3767c4fcf 100644 --- a/src/main/java/io/appium/java_client/AppiumClientConfig.java +++ b/src/main/java/io/appium/java_client/AppiumClientConfig.java @@ -43,13 +43,6 @@ public class AppiumClientConfig extends ClientConfig { private static final Duration DEFAULT_READ_TIMEOUT = Duration.ofMinutes(10); - private final URI baseUri; - private final Duration connectionTimeout; - private final Duration readTimeout; - private final Filter filters; - private final Proxy proxy; - private final Credentials credentials; - /** * Client side configuration * @@ -72,14 +65,6 @@ protected AppiumClientConfig( boolean directConnect) { super(baseUri, connectionTimeout, readTimeout, filters, proxy, credentials); - // Parameter checks have done in the super class - this.baseUri = baseUri; - this.connectionTimeout = connectionTimeout; - this.readTimeout = readTimeout; - this.filters = filters; - this.proxy = proxy; - this.credentials = credentials; - this.directConnect = Require.nonNull("Direct Connect", directConnect); } @@ -234,12 +219,12 @@ public AppiumClientConfig authenticateAs(Credentials credentials) { public AppiumClientConfig directConnect(boolean directConnect) { // follows ClientConfig's design return new AppiumClientConfig( - baseUri, - connectionTimeout, - readTimeout, - filters, - proxy, - credentials, + this.baseUri(), + this.connectionTimeout(), + this.readTimeout(), + this.filter(), + this.proxy(), + this.credentials(), directConnect ); } From 9cc5e4adb59e27cfcd81a9352001c4b0688e7479 Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Fri, 30 Sep 2022 15:51:48 -0700 Subject: [PATCH 41/66] chore: add UA in a new session request --- .../java/io/appium/java_client/AddAppiumUserAgent.java | 9 ++++----- .../appium/java_client/remote/AppiumCommandExecutor.java | 8 ++++---- src/main/resources/main.properties | 2 +- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/main/java/io/appium/java_client/AddAppiumUserAgent.java b/src/main/java/io/appium/java_client/AddAppiumUserAgent.java index f8a5e0456..63aef9543 100644 --- a/src/main/java/io/appium/java_client/AddAppiumUserAgent.java +++ b/src/main/java/io/appium/java_client/AddAppiumUserAgent.java @@ -19,6 +19,7 @@ import io.appium.java_client.internal.Config; import org.openqa.selenium.BuildInfo; import org.openqa.selenium.Platform; +import org.openqa.selenium.remote.http.AddSeleniumUserAgent; import org.openqa.selenium.remote.http.Filter; import org.openqa.selenium.remote.http.HttpHandler; @@ -37,12 +38,10 @@ public class AddAppiumUserAgent implements Filter { * e.g. appium/8.2.0 (selenium/4.5.0 (java mac)) */ public static final String USER_AGENT = String.format( - "appium/%s (selenium/%s (java %s))", + "appium/%s (%s)", Config.main().getValue(VERSION_KEY, String.class), - new BuildInfo().getReleaseLabel(), - (Platform.getCurrent().family() == null - ? Platform.getCurrent().toString().toLowerCase(Locale.US) - : Platform.getCurrent().family().toString().toLowerCase(Locale.US))); + AddSeleniumUserAgent.USER_AGENT + ); @Override public HttpHandler apply(HttpHandler next) { diff --git a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java index 1d2d93564..c5741d264 100644 --- a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java +++ b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java @@ -25,11 +25,10 @@ import com.google.common.base.Supplier; import com.google.common.base.Throwables; +import io.appium.java_client.AddAppiumUserAgent; import io.appium.java_client.AppiumClientConfig; -import org.apache.commons.lang3.ObjectUtils; import org.openqa.selenium.SessionNotCreatedException; import org.openqa.selenium.WebDriverException; -import org.openqa.selenium.internal.Require; import org.openqa.selenium.remote.Command; import org.openqa.selenium.remote.CommandCodec; import org.openqa.selenium.remote.CommandExecutor; @@ -87,7 +86,7 @@ public AppiumCommandExecutor( @Nonnull AppiumClientConfig appiumClientConfig) { super(additionalCommands, appiumClientConfig, - ofNullable(httpClientFactory).orElseGet(HttpCommandExecutor::getDefaultClientFactory) + ofNullable(httpClientFactory).orElseGet(AppiumCommandExecutor::getDefaultClientFactory) ); serviceOptional = ofNullable(service); @@ -188,7 +187,7 @@ protected void overrideServerUrl(URL serverUrl) { return; } setPrivateFieldValue(HttpCommandExecutor.class, "client", - ofNullable(this.httpClientFactory).orElseGet(HttpCommandExecutor::getDefaultClientFactory) + ofNullable(this.httpClientFactory).orElseGet(AppiumCommandExecutor::getDefaultClientFactory) .createClient(this.appiumClientConfig.baseUrl(serverUrl))); } @@ -199,6 +198,7 @@ private Response createSession(Command command) throws IOException { ProtocolHandshake.Result result = new AppiumProtocolHandshake().createSession( getClient().with((httpHandler) -> (req) -> { + req.setHeader("User-Agent", AddAppiumUserAgent.USER_AGENT); req.setHeader(IDEMPOTENCY_KEY_HEADER, UUID.randomUUID().toString().toLowerCase()); return httpHandler.execute(req); }), command diff --git a/src/main/resources/main.properties b/src/main/resources/main.properties index fde9336e5..9875b0c49 100644 --- a/src/main/resources/main.properties +++ b/src/main/resources/main.properties @@ -1,2 +1,2 @@ selenium.version=@selenium.version@ -appiumClient.version=@appiumClient.version@ \ No newline at end of file +appiumClient.version=@appiumClient.version@ From f2dc84ad149f199cc8204dd608970a57275dd8a8 Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Fri, 30 Sep 2022 15:55:14 -0700 Subject: [PATCH 42/66] fix: lint --- src/main/java/io/appium/java_client/AppiumClientConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/appium/java_client/AppiumClientConfig.java b/src/main/java/io/appium/java_client/AppiumClientConfig.java index 3767c4fcf..136df9d78 100644 --- a/src/main/java/io/appium/java_client/AppiumClientConfig.java +++ b/src/main/java/io/appium/java_client/AppiumClientConfig.java @@ -44,7 +44,7 @@ public class AppiumClientConfig extends ClientConfig { private static final Duration DEFAULT_READ_TIMEOUT = Duration.ofMinutes(10); /** - * Client side configuration + * Client side configuration. * * @param baseUri Base URL the client sends HTTP request to. * @param connectionTimeout The client connection timeout. From c00697d747273b3341b8bd6ed97dfc070eac4843 Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Fri, 30 Sep 2022 16:31:09 -0700 Subject: [PATCH 43/66] chore: remove done todo --- .../java/io/appium/java_client/remote/AppiumCommandExecutor.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java index c5741d264..dff467509 100644 --- a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java +++ b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java @@ -248,7 +248,6 @@ private void setDirectConnect(Response response) throws SessionNotCreatedExcepti try { newUrl = new URL(newUrlCandidate); } catch (MalformedURLException e) { - // TODO: tweak the description throw new SessionNotCreatedException( String.format("The remote server returned an invalid value to build the direct connect URL: %s", newUrlCandidate)); From 9ab854786a707489ec1f8f7ab724152240c0a3ef Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Wed, 19 Oct 2022 23:00:57 -0700 Subject: [PATCH 44/66] remove user agent stuff --- build.gradle | 5 +- gradle.properties | 2 - .../java_client/AddAppiumUserAgent.java | 57 ------------------- .../java_client/AppiumClientConfig.java | 9 +-- 4 files changed, 4 insertions(+), 69 deletions(-) delete mode 100644 src/main/java/io/appium/java_client/AddAppiumUserAgent.java diff --git a/build.gradle b/build.gradle index 5615e9815..e743211d3 100644 --- a/build.gradle +++ b/build.gradle @@ -112,7 +112,7 @@ publishing { mavenJava(MavenPublication) { groupId = 'io.appium' artifactId = 'java-client' - version = appiumClientVersion + version = '8.2.0' from components.java pom { name = 'java-client' @@ -188,8 +188,7 @@ wrapper { processResources { filter ReplaceTokens, tokens: [ - 'selenium.version': seleniumVersion, - 'appiumClient.version': appiumClientVersion + 'selenium.version': seleniumVersion ] } diff --git a/gradle.properties b/gradle.properties index 239efd600..9b086f575 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,5 +8,3 @@ ossrhUsername=your-jira-id ossrhPassword=your-jira-password selenium.version=4.5.0 -# Please increment the value in a release -appiumClient.version=8.2.0 diff --git a/src/main/java/io/appium/java_client/AddAppiumUserAgent.java b/src/main/java/io/appium/java_client/AddAppiumUserAgent.java deleted file mode 100644 index 63aef9543..000000000 --- a/src/main/java/io/appium/java_client/AddAppiumUserAgent.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * See the NOTICE file distributed with this work for additional - * information regarding copyright ownership. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.appium.java_client; - -import io.appium.java_client.internal.Config; -import org.openqa.selenium.BuildInfo; -import org.openqa.selenium.Platform; -import org.openqa.selenium.remote.http.AddSeleniumUserAgent; -import org.openqa.selenium.remote.http.Filter; -import org.openqa.selenium.remote.http.HttpHandler; - -import java.util.Locale; - -/** - * Manage Appium Client configurations. - */ - -public class AddAppiumUserAgent implements Filter { - - public static final String VERSION_KEY = "appiumClient.version"; - - /** - * A custom User Agent name for Appium Java client. - * e.g. appium/8.2.0 (selenium/4.5.0 (java mac)) - */ - public static final String USER_AGENT = String.format( - "appium/%s (%s)", - Config.main().getValue(VERSION_KEY, String.class), - AddSeleniumUserAgent.USER_AGENT - ); - - @Override - public HttpHandler apply(HttpHandler next) { - - return req -> { - if (req.getHeader("User-Agent") == null) { - req.addHeader("User-Agent", USER_AGENT); - } - - return next.execute(req); - }; - } -} diff --git a/src/main/java/io/appium/java_client/AppiumClientConfig.java b/src/main/java/io/appium/java_client/AppiumClientConfig.java index 136df9d78..1b640b15f 100644 --- a/src/main/java/io/appium/java_client/AppiumClientConfig.java +++ b/src/main/java/io/appium/java_client/AppiumClientConfig.java @@ -16,22 +16,17 @@ package io.appium.java_client; -import org.checkerframework.checker.nullness.qual.NonNull; import org.openqa.selenium.Credentials; import org.openqa.selenium.internal.Require; +import org.openqa.selenium.remote.http.AddSeleniumUserAgent; import org.openqa.selenium.remote.http.ClientConfig; import org.openqa.selenium.remote.http.Filter; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; import java.net.Proxy; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.time.Duration; -import java.util.Optional; - -import static java.util.Optional.ofNullable; /** * A class to store the appium http client configuration. @@ -39,7 +34,7 @@ public class AppiumClientConfig extends ClientConfig { private final boolean directConnect; - private static final Filter DEFAULT_FILTER = new AddAppiumUserAgent(); + private static final Filter DEFAULT_FILTER = new AddSeleniumUserAgent(); private static final Duration DEFAULT_READ_TIMEOUT = Duration.ofMinutes(10); From e455f523c3b6c776af025a1f933b12ac6cb642fe Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Wed, 19 Oct 2022 23:09:07 -0700 Subject: [PATCH 45/66] remove ua stuff more --- build.gradle | 1 - src/main/resources/main.properties | 1 - 2 files changed, 2 deletions(-) diff --git a/build.gradle b/build.gradle index e743211d3..6fc59bcd0 100644 --- a/build.gradle +++ b/build.gradle @@ -25,7 +25,6 @@ java { ext { seleniumVersion = project.property('selenium.version') - appiumClientVersion = project.property('appiumClient.version') } dependencies { diff --git a/src/main/resources/main.properties b/src/main/resources/main.properties index 9875b0c49..a4236a9fe 100644 --- a/src/main/resources/main.properties +++ b/src/main/resources/main.properties @@ -1,2 +1 @@ selenium.version=@selenium.version@ -appiumClient.version=@appiumClient.version@ From f6570d2cefe2544cff91cf8e9119e2c4c3d64cad Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Wed, 19 Oct 2022 23:14:34 -0700 Subject: [PATCH 46/66] remove UA stuff --- .../io/appium/java_client/remote/AppiumCommandExecutor.java | 3 +-- src/test/java/io/appium/java_client/internal/ConfigTest.java | 5 ----- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java index c5741d264..d57ba8979 100644 --- a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java +++ b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java @@ -25,7 +25,6 @@ import com.google.common.base.Supplier; import com.google.common.base.Throwables; -import io.appium.java_client.AddAppiumUserAgent; import io.appium.java_client.AppiumClientConfig; import org.openqa.selenium.SessionNotCreatedException; import org.openqa.selenium.WebDriverException; @@ -40,6 +39,7 @@ import org.openqa.selenium.remote.Response; import org.openqa.selenium.remote.ResponseCodec; import org.openqa.selenium.remote.codec.w3c.W3CHttpCommandCodec; +import org.openqa.selenium.remote.http.AddSeleniumUserAgent; import org.openqa.selenium.remote.http.HttpClient; import org.openqa.selenium.remote.http.HttpRequest; import org.openqa.selenium.remote.http.HttpResponse; @@ -198,7 +198,6 @@ private Response createSession(Command command) throws IOException { ProtocolHandshake.Result result = new AppiumProtocolHandshake().createSession( getClient().with((httpHandler) -> (req) -> { - req.setHeader("User-Agent", AddAppiumUserAgent.USER_AGENT); req.setHeader(IDEMPOTENCY_KEY_HEADER, UUID.randomUUID().toString().toLowerCase()); return httpHandler.execute(req); }), command diff --git a/src/test/java/io/appium/java_client/internal/ConfigTest.java b/src/test/java/io/appium/java_client/internal/ConfigTest.java index a92cf15bb..05559de27 100644 --- a/src/test/java/io/appium/java_client/internal/ConfigTest.java +++ b/src/test/java/io/appium/java_client/internal/ConfigTest.java @@ -6,7 +6,6 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; -import io.appium.java_client.AddAppiumUserAgent; import org.junit.jupiter.api.Test; class ConfigTest { @@ -18,9 +17,6 @@ class ConfigTest { void verifyGettingExistingValue() { assertThat(Config.main().getValue(SELENIUM_EXISTING_KEY, String.class).length(), greaterThan(0)); assertTrue(Config.main().getOptionalValue(SELENIUM_EXISTING_KEY, String.class).isPresent()); - - assertThat(Config.main().getValue(AddAppiumUserAgent.VERSION_KEY, String.class).length(), greaterThan(0)); - assertTrue(Config.main().getOptionalValue(AddAppiumUserAgent.VERSION_KEY, String.class).isPresent()); } @Test @@ -31,7 +27,6 @@ void verifyGettingNonExistingValue() { @Test void verifyGettingExistingValueWithWrongClass() { assertThrows(ClassCastException.class, () -> Config.main().getValue(SELENIUM_EXISTING_KEY, Integer.class)); - assertThrows(ClassCastException.class, () -> Config.main().getValue(AddAppiumUserAgent.VERSION_KEY, Integer.class)); } @Test From 69ff2380ead950baf82588fc22ea7b62bc5f1bd3 Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Wed, 19 Oct 2022 23:23:53 -0700 Subject: [PATCH 47/66] collect similar process into one method --- .../java_client/AppiumClientConfig.java | 76 +++++-------------- 1 file changed, 17 insertions(+), 59 deletions(-) diff --git a/src/main/java/io/appium/java_client/AppiumClientConfig.java b/src/main/java/io/appium/java_client/AppiumClientConfig.java index 1b640b15f..9015d59c6 100644 --- a/src/main/java/io/appium/java_client/AppiumClientConfig.java +++ b/src/main/java/io/appium/java_client/AppiumClientConfig.java @@ -38,6 +38,8 @@ public class AppiumClientConfig extends ClientConfig { private static final Duration DEFAULT_READ_TIMEOUT = Duration.ofMinutes(10); + private static final Duration DEFAULT_CONNECTION_TIMEOUT = Duration.ofSeconds(10); + /** * Client side configuration. * @@ -70,7 +72,7 @@ protected AppiumClientConfig( public static AppiumClientConfig defaultConfig() { return new AppiumClientConfig( null, - Duration.ofSeconds(10), + DEFAULT_CONNECTION_TIMEOUT, DEFAULT_READ_TIMEOUT, DEFAULT_FILTER, null, @@ -94,10 +96,7 @@ public static AppiumClientConfig fromClientConfig(ClientConfig clientConfig) { false); } - @Override - public AppiumClientConfig baseUri(URI baseUri) { - // ClientConfig returns a new instance - ClientConfig clientConfig = super.baseUri(baseUri); + private AppiumClientConfig buildAppiumClientConfig(ClientConfig clientConfig, Boolean directConnect) { return new AppiumClientConfig( clientConfig.baseUri(), clientConfig.connectionTimeout(), @@ -108,6 +107,13 @@ public AppiumClientConfig baseUri(URI baseUri) { directConnect); } + @Override + public AppiumClientConfig baseUri(URI baseUri) { + // ClientConfig returns a new instance + ClientConfig clientConfig = super.baseUri(baseUri); + return buildAppiumClientConfig(clientConfig, directConnect); + } + @Override public AppiumClientConfig baseUrl(URL baseUrl) { try { @@ -119,87 +125,39 @@ public AppiumClientConfig baseUrl(URL baseUrl) { @Override public AppiumClientConfig connectionTimeout(Duration timeout) { - // ClientConfig returns a new instance ClientConfig clientConfig = super.connectionTimeout(timeout); - return new AppiumClientConfig( - clientConfig.baseUri(), - clientConfig.connectionTimeout(), - clientConfig.readTimeout(), - clientConfig.filter(), - clientConfig.proxy(), - clientConfig.credentials(), - directConnect); + return buildAppiumClientConfig(clientConfig, directConnect); } @Override public AppiumClientConfig readTimeout(Duration timeout) { - // ClientConfig returns a new instance ClientConfig clientConfig = super.connectionTimeout(timeout); - return new AppiumClientConfig( - clientConfig.baseUri(), - clientConfig.connectionTimeout(), - clientConfig.readTimeout(), - clientConfig.filter(), - clientConfig.proxy(), - clientConfig.credentials(), - directConnect); + return buildAppiumClientConfig(clientConfig, directConnect); } @Override public AppiumClientConfig withFilter(Filter filter) { - // ClientConfig returns a new instance ClientConfig clientConfig = super.withFilter(filter); - return new AppiumClientConfig( - clientConfig.baseUri(), - clientConfig.connectionTimeout(), - clientConfig.readTimeout(), - clientConfig.filter(), - clientConfig.proxy(), - clientConfig.credentials(), - directConnect); + return buildAppiumClientConfig(clientConfig, directConnect); } @Override public AppiumClientConfig withRetries() { - // ClientConfig returns a new instance ClientConfig clientConfig = super.withRetries(); - return new AppiumClientConfig( - clientConfig.baseUri(), - clientConfig.connectionTimeout(), - clientConfig.readTimeout(), - clientConfig.filter(), - clientConfig.proxy(), - clientConfig.credentials(), - directConnect); + return buildAppiumClientConfig(clientConfig, directConnect); } @Override public ClientConfig proxy(Proxy proxy) { - // ClientConfig returns a new instance ClientConfig clientConfig = super.proxy(proxy); - return new AppiumClientConfig( - clientConfig.baseUri(), - clientConfig.connectionTimeout(), - clientConfig.readTimeout(), - clientConfig.filter(), - clientConfig.proxy(), - clientConfig.credentials(), - directConnect); + return buildAppiumClientConfig(clientConfig, directConnect); } @Override public AppiumClientConfig authenticateAs(Credentials credentials) { - // ClientConfig returns a new instance ClientConfig clientConfig = super.authenticateAs(credentials); - return new AppiumClientConfig( - clientConfig.baseUri(), - clientConfig.connectionTimeout(), - clientConfig.readTimeout(), - clientConfig.filter(), - clientConfig.proxy(), - clientConfig.credentials(), - directConnect); + return buildAppiumClientConfig(clientConfig, directConnect); } From 7b2ff2ade21f398d4bb5c81008f3772c32c87add Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Wed, 19 Oct 2022 23:25:07 -0700 Subject: [PATCH 48/66] tweak --- src/main/java/io/appium/java_client/AppiumClientConfig.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/io/appium/java_client/AppiumClientConfig.java b/src/main/java/io/appium/java_client/AppiumClientConfig.java index 9015d59c6..6f05c405c 100644 --- a/src/main/java/io/appium/java_client/AppiumClientConfig.java +++ b/src/main/java/io/appium/java_client/AppiumClientConfig.java @@ -160,7 +160,6 @@ public AppiumClientConfig authenticateAs(Credentials credentials) { return buildAppiumClientConfig(clientConfig, directConnect); } - /** * Whether enable directConnect feature described in * From bd0395be3618e285ae13cd2fd28cf76a01fbc895 Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Wed, 19 Oct 2022 23:57:54 -0700 Subject: [PATCH 49/66] add a class object --- .../remote/AppiumCommandExecutor.java | 72 ++++++++++++------- 1 file changed, 47 insertions(+), 25 deletions(-) diff --git a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java index d57ba8979..1897b9449 100644 --- a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java +++ b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java @@ -39,7 +39,6 @@ import org.openqa.selenium.remote.Response; import org.openqa.selenium.remote.ResponseCodec; import org.openqa.selenium.remote.codec.w3c.W3CHttpCommandCodec; -import org.openqa.selenium.remote.http.AddSeleniumUserAgent; import org.openqa.selenium.remote.http.HttpClient; import org.openqa.selenium.remote.http.HttpRequest; import org.openqa.selenium.remote.http.HttpResponse; @@ -66,10 +65,47 @@ public class AppiumCommandExecutor extends HttpCommandExecutor { private final AppiumClientConfig appiumClientConfig; - private static final String DIRECT_CONNECT_PROTOCOL = "directConnectProtocol"; - private static final String DIRECT_CONNECT_PATH = "directConnectPath"; - private static final String DIRECT_CONNECT_HOST = "directConnectHost"; - private static final String DIRECT_CONNECT_PORT = "directConnectPort"; + private static class DirectConnect { + private static final String DIRECT_CONNECT_PROTOCOL = "directConnectProtocol"; + private static final String DIRECT_CONNECT_PATH = "directConnectPath"; + private static final String DIRECT_CONNECT_HOST = "directConnectHost"; + private static final String DIRECT_CONNECT_PORT = "directConnectPort"; + + private final String protocol; + private final String path; + private final String host; + private final String port; + + private DirectConnect(Map responseValue) { + this.protocol = this.getDirectConnectValue(responseValue, DIRECT_CONNECT_PROTOCOL); + this.path = this.getDirectConnectValue(responseValue, DIRECT_CONNECT_PATH); + this.host = this.getDirectConnectValue(responseValue, DIRECT_CONNECT_HOST); + this.port = this.getDirectConnectValue(responseValue, DIRECT_CONNECT_PORT); + } + + @Nullable + private String getDirectConnectValue(Map responseValue, String key) { + String directConnectPath = String.valueOf(responseValue.get(APPIUM_PREFIX + key)); + return directConnectPath == null ? String.valueOf(responseValue.get(key)) : directConnectPath; + } + + private boolean isValid() { + return !(this.protocol == null || this.path == null || this.host == null || this.port == null); + } + + private URL getUrl() throws MalformedURLException { + String newUrlCandidate = String.format("%s://%s:%s%s", this.protocol, this.host, this.port, this.path); + + try { + return new URL(newUrlCandidate); + } catch (MalformedURLException e) { + throw new MalformedURLException( + String.format("The remote server returned an invalid value to build the direct connect URL: %s", + newUrlCandidate) + ); + } + } + } /** * Create an AppiumCommandExecutor instance. @@ -226,41 +262,27 @@ public void refreshAdditionalCommands() { private void setDirectConnect(Response response) throws SessionNotCreatedException { Map responseValue = (Map) response.getValue(); - String directConnectProtocol = getDirectConnectValue(responseValue, DIRECT_CONNECT_PROTOCOL); - String directConnectPath = getDirectConnectValue(responseValue, DIRECT_CONNECT_PATH); - String directConnectHost = getDirectConnectValue(responseValue, DIRECT_CONNECT_HOST); - String directConnectPort = getDirectConnectValue(responseValue, DIRECT_CONNECT_PORT); + DirectConnect directConnect = new DirectConnect(responseValue); - if (directConnectProtocol == null || directConnectHost == null - || directConnectPath == null || directConnectPort == null) { + if (!directConnect.isValid()) { return; } - if (!directConnectProtocol.equals("https")) { + if (!directConnect.protocol.equals("https")) { throw new SessionNotCreatedException( - String.format("The protocol must be https. %s was given.", directConnectProtocol)); + String.format("The protocol must be https. %s was given.", directConnect.protocol)); } URL newUrl; - String newUrlCandidate = String.format("%s://%s:%s%s", - directConnectProtocol, directConnectHost, directConnectPort, directConnectPath); try { - newUrl = new URL(newUrlCandidate); + newUrl = directConnect.getUrl(); } catch (MalformedURLException e) { - // TODO: tweak the description - throw new SessionNotCreatedException( - String.format("The remote server returned an invalid value to build the direct connect URL: %s", - newUrlCandidate)); + throw new SessionNotCreatedException(e.getMessage()); } overrideServerUrl(newUrl); } - @Nullable - private String getDirectConnectValue(Map responseValue, String key) { - String directConnectPath = String.valueOf(responseValue.get(APPIUM_PREFIX + key)); - return directConnectPath == null ? String.valueOf(responseValue.get(key)) : directConnectPath; - } @Override public Response execute(Command command) throws WebDriverException { From bfdd997967d4c048671ab17cfa448b9e781c0fd1 Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Thu, 20 Oct 2022 00:03:36 -0700 Subject: [PATCH 50/66] tweak --- src/main/java/io/appium/java_client/AppiumClientConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/appium/java_client/AppiumClientConfig.java b/src/main/java/io/appium/java_client/AppiumClientConfig.java index 6f05c405c..4f078e284 100644 --- a/src/main/java/io/appium/java_client/AppiumClientConfig.java +++ b/src/main/java/io/appium/java_client/AppiumClientConfig.java @@ -59,7 +59,7 @@ protected AppiumClientConfig( Filter filters, Proxy proxy, Credentials credentials, - boolean directConnect) { + Boolean directConnect) { super(baseUri, connectionTimeout, readTimeout, filters, proxy, credentials); this.directConnect = Require.nonNull("Direct Connect", directConnect); From 6d3d3ec173fac0719ca1aba13f909bc8dde7e5c1 Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Thu, 20 Oct 2022 00:05:29 -0700 Subject: [PATCH 51/66] remove a few lines --- src/main/java/io/appium/java_client/AppiumClientConfig.java | 1 - .../java/io/appium/java_client/remote/AppiumCommandExecutor.java | 1 - 2 files changed, 2 deletions(-) diff --git a/src/main/java/io/appium/java_client/AppiumClientConfig.java b/src/main/java/io/appium/java_client/AppiumClientConfig.java index 4f078e284..2e6128c03 100644 --- a/src/main/java/io/appium/java_client/AppiumClientConfig.java +++ b/src/main/java/io/appium/java_client/AppiumClientConfig.java @@ -109,7 +109,6 @@ private AppiumClientConfig buildAppiumClientConfig(ClientConfig clientConfig, Bo @Override public AppiumClientConfig baseUri(URI baseUri) { - // ClientConfig returns a new instance ClientConfig clientConfig = super.baseUri(baseUri); return buildAppiumClientConfig(clientConfig, directConnect); } diff --git a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java index 1897b9449..751ff4fbd 100644 --- a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java +++ b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java @@ -283,7 +283,6 @@ private void setDirectConnect(Response response) throws SessionNotCreatedExcepti overrideServerUrl(newUrl); } - @Override public Response execute(Command command) throws WebDriverException { if (DriverCommand.NEW_SESSION.equals(command.getName())) { From a834d3b881bf70f3214eaa7409a5e4c37ee071be Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Thu, 20 Oct 2022 00:10:52 -0700 Subject: [PATCH 52/66] Revert "remove user agent stuff" This reverts commit 9ab854786a707489ec1f8f7ab724152240c0a3ef. --- build.gradle | 5 +- gradle.properties | 2 + .../java_client/AddAppiumUserAgent.java | 57 +++++++++++++++++++ .../java_client/AppiumClientConfig.java | 9 ++- 4 files changed, 69 insertions(+), 4 deletions(-) create mode 100644 src/main/java/io/appium/java_client/AddAppiumUserAgent.java diff --git a/build.gradle b/build.gradle index b0116c43b..240b1a2b3 100644 --- a/build.gradle +++ b/build.gradle @@ -111,7 +111,7 @@ publishing { mavenJava(MavenPublication) { groupId = 'io.appium' artifactId = 'java-client' - version = '8.2.0' + version = appiumClientVersion from components.java pom { name = 'java-client' @@ -187,7 +187,8 @@ wrapper { processResources { filter ReplaceTokens, tokens: [ - 'selenium.version': seleniumVersion + 'selenium.version': seleniumVersion, + 'appiumClient.version': appiumClientVersion ] } diff --git a/gradle.properties b/gradle.properties index 9b086f575..239efd600 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,3 +8,5 @@ ossrhUsername=your-jira-id ossrhPassword=your-jira-password selenium.version=4.5.0 +# Please increment the value in a release +appiumClient.version=8.2.0 diff --git a/src/main/java/io/appium/java_client/AddAppiumUserAgent.java b/src/main/java/io/appium/java_client/AddAppiumUserAgent.java new file mode 100644 index 000000000..63aef9543 --- /dev/null +++ b/src/main/java/io/appium/java_client/AddAppiumUserAgent.java @@ -0,0 +1,57 @@ +/* + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * See the NOTICE file distributed with this work for additional + * information regarding copyright ownership. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.appium.java_client; + +import io.appium.java_client.internal.Config; +import org.openqa.selenium.BuildInfo; +import org.openqa.selenium.Platform; +import org.openqa.selenium.remote.http.AddSeleniumUserAgent; +import org.openqa.selenium.remote.http.Filter; +import org.openqa.selenium.remote.http.HttpHandler; + +import java.util.Locale; + +/** + * Manage Appium Client configurations. + */ + +public class AddAppiumUserAgent implements Filter { + + public static final String VERSION_KEY = "appiumClient.version"; + + /** + * A custom User Agent name for Appium Java client. + * e.g. appium/8.2.0 (selenium/4.5.0 (java mac)) + */ + public static final String USER_AGENT = String.format( + "appium/%s (%s)", + Config.main().getValue(VERSION_KEY, String.class), + AddSeleniumUserAgent.USER_AGENT + ); + + @Override + public HttpHandler apply(HttpHandler next) { + + return req -> { + if (req.getHeader("User-Agent") == null) { + req.addHeader("User-Agent", USER_AGENT); + } + + return next.execute(req); + }; + } +} diff --git a/src/main/java/io/appium/java_client/AppiumClientConfig.java b/src/main/java/io/appium/java_client/AppiumClientConfig.java index 2e6128c03..cf06f06af 100644 --- a/src/main/java/io/appium/java_client/AppiumClientConfig.java +++ b/src/main/java/io/appium/java_client/AppiumClientConfig.java @@ -16,17 +16,22 @@ package io.appium.java_client; +import org.checkerframework.checker.nullness.qual.NonNull; import org.openqa.selenium.Credentials; import org.openqa.selenium.internal.Require; -import org.openqa.selenium.remote.http.AddSeleniumUserAgent; import org.openqa.selenium.remote.http.ClientConfig; import org.openqa.selenium.remote.http.Filter; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; import java.net.Proxy; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.time.Duration; +import java.util.Optional; + +import static java.util.Optional.ofNullable; /** * A class to store the appium http client configuration. @@ -34,7 +39,7 @@ public class AppiumClientConfig extends ClientConfig { private final boolean directConnect; - private static final Filter DEFAULT_FILTER = new AddSeleniumUserAgent(); + private static final Filter DEFAULT_FILTER = new AddAppiumUserAgent(); private static final Duration DEFAULT_READ_TIMEOUT = Duration.ofMinutes(10); From 3a6aa98ce2b2b06bcb187c4c796a302c04c35e78 Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Thu, 20 Oct 2022 00:11:04 -0700 Subject: [PATCH 53/66] Revert "remove ua stuff more" This reverts commit e455f523c3b6c776af025a1f933b12ac6cb642fe. --- build.gradle | 1 + src/main/resources/main.properties | 1 + 2 files changed, 2 insertions(+) diff --git a/build.gradle b/build.gradle index 240b1a2b3..ead4d9693 100644 --- a/build.gradle +++ b/build.gradle @@ -25,6 +25,7 @@ java { ext { seleniumVersion = project.property('selenium.version') + appiumClientVersion = project.property('appiumClient.version') } dependencies { diff --git a/src/main/resources/main.properties b/src/main/resources/main.properties index a4236a9fe..9875b0c49 100644 --- a/src/main/resources/main.properties +++ b/src/main/resources/main.properties @@ -1 +1,2 @@ selenium.version=@selenium.version@ +appiumClient.version=@appiumClient.version@ From a3a0367ed8b16b9a8f154f402fc9b44ffd46674d Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Thu, 20 Oct 2022 00:11:12 -0700 Subject: [PATCH 54/66] Revert "remove UA stuff" This reverts commit f6570d2cefe2544cff91cf8e9119e2c4c3d64cad. --- .../io/appium/java_client/remote/AppiumCommandExecutor.java | 2 ++ src/test/java/io/appium/java_client/internal/ConfigTest.java | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java index 751ff4fbd..3590288d3 100644 --- a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java +++ b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java @@ -25,6 +25,7 @@ import com.google.common.base.Supplier; import com.google.common.base.Throwables; +import io.appium.java_client.AddAppiumUserAgent; import io.appium.java_client.AppiumClientConfig; import org.openqa.selenium.SessionNotCreatedException; import org.openqa.selenium.WebDriverException; @@ -234,6 +235,7 @@ private Response createSession(Command command) throws IOException { ProtocolHandshake.Result result = new AppiumProtocolHandshake().createSession( getClient().with((httpHandler) -> (req) -> { + req.setHeader("User-Agent", AddAppiumUserAgent.USER_AGENT); req.setHeader(IDEMPOTENCY_KEY_HEADER, UUID.randomUUID().toString().toLowerCase()); return httpHandler.execute(req); }), command diff --git a/src/test/java/io/appium/java_client/internal/ConfigTest.java b/src/test/java/io/appium/java_client/internal/ConfigTest.java index 05559de27..a92cf15bb 100644 --- a/src/test/java/io/appium/java_client/internal/ConfigTest.java +++ b/src/test/java/io/appium/java_client/internal/ConfigTest.java @@ -6,6 +6,7 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; +import io.appium.java_client.AddAppiumUserAgent; import org.junit.jupiter.api.Test; class ConfigTest { @@ -17,6 +18,9 @@ class ConfigTest { void verifyGettingExistingValue() { assertThat(Config.main().getValue(SELENIUM_EXISTING_KEY, String.class).length(), greaterThan(0)); assertTrue(Config.main().getOptionalValue(SELENIUM_EXISTING_KEY, String.class).isPresent()); + + assertThat(Config.main().getValue(AddAppiumUserAgent.VERSION_KEY, String.class).length(), greaterThan(0)); + assertTrue(Config.main().getOptionalValue(AddAppiumUserAgent.VERSION_KEY, String.class).isPresent()); } @Test @@ -27,6 +31,7 @@ void verifyGettingNonExistingValue() { @Test void verifyGettingExistingValueWithWrongClass() { assertThrows(ClassCastException.class, () -> Config.main().getValue(SELENIUM_EXISTING_KEY, Integer.class)); + assertThrows(ClassCastException.class, () -> Config.main().getValue(AddAppiumUserAgent.VERSION_KEY, Integer.class)); } @Test From 70889d07238ce3581ddb68f3f9a5a869e5406cc7 Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Sat, 22 Oct 2022 22:25:40 -0700 Subject: [PATCH 55/66] rename --- .../java/io/appium/java_client/AppiumClientConfig.java | 2 +- ...AddAppiumUserAgent.java => AppiumUserAgentFilter.java} | 6 +----- .../appium/java_client/remote/AppiumCommandExecutor.java | 4 ++-- .../java/io/appium/java_client/internal/ConfigTest.java | 8 ++++---- 4 files changed, 8 insertions(+), 12 deletions(-) rename src/main/java/io/appium/java_client/{AddAppiumUserAgent.java => AppiumUserAgentFilter.java} (91%) diff --git a/src/main/java/io/appium/java_client/AppiumClientConfig.java b/src/main/java/io/appium/java_client/AppiumClientConfig.java index b2f45837e..317d85314 100644 --- a/src/main/java/io/appium/java_client/AppiumClientConfig.java +++ b/src/main/java/io/appium/java_client/AppiumClientConfig.java @@ -33,7 +33,7 @@ public class AppiumClientConfig extends ClientConfig { private final boolean directConnect; - private static final Filter DEFAULT_FILTER = new AddAppiumUserAgent(); + private static final Filter DEFAULT_FILTER = new AppiumUserAgentFilter(); private static final Duration DEFAULT_READ_TIMEOUT = Duration.ofMinutes(10); diff --git a/src/main/java/io/appium/java_client/AddAppiumUserAgent.java b/src/main/java/io/appium/java_client/AppiumUserAgentFilter.java similarity index 91% rename from src/main/java/io/appium/java_client/AddAppiumUserAgent.java rename to src/main/java/io/appium/java_client/AppiumUserAgentFilter.java index 63aef9543..2af3366a8 100644 --- a/src/main/java/io/appium/java_client/AddAppiumUserAgent.java +++ b/src/main/java/io/appium/java_client/AppiumUserAgentFilter.java @@ -17,19 +17,15 @@ package io.appium.java_client; import io.appium.java_client.internal.Config; -import org.openqa.selenium.BuildInfo; -import org.openqa.selenium.Platform; import org.openqa.selenium.remote.http.AddSeleniumUserAgent; import org.openqa.selenium.remote.http.Filter; import org.openqa.selenium.remote.http.HttpHandler; -import java.util.Locale; - /** * Manage Appium Client configurations. */ -public class AddAppiumUserAgent implements Filter { +public class AppiumUserAgentFilter implements Filter { public static final String VERSION_KEY = "appiumClient.version"; diff --git a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java index 49d0a9361..3515ea68c 100644 --- a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java +++ b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java @@ -24,7 +24,7 @@ import com.google.common.base.Supplier; import com.google.common.base.Throwables; -import io.appium.java_client.AddAppiumUserAgent; +import io.appium.java_client.AppiumUserAgentFilter; import io.appium.java_client.AppiumClientConfig; import org.openqa.selenium.SessionNotCreatedException; import org.openqa.selenium.WebDriverException; @@ -196,7 +196,7 @@ private Response createSession(Command command) throws IOException { ProtocolHandshake.Result result = new AppiumProtocolHandshake().createSession( getClient().with((httpHandler) -> (req) -> { - req.setHeader("User-Agent", AddAppiumUserAgent.USER_AGENT); + req.setHeader("User-Agent", AppiumUserAgentFilter.USER_AGENT); req.setHeader(IDEMPOTENCY_KEY_HEADER, UUID.randomUUID().toString().toLowerCase()); return httpHandler.execute(req); }), command diff --git a/src/test/java/io/appium/java_client/internal/ConfigTest.java b/src/test/java/io/appium/java_client/internal/ConfigTest.java index a92cf15bb..79371bbca 100644 --- a/src/test/java/io/appium/java_client/internal/ConfigTest.java +++ b/src/test/java/io/appium/java_client/internal/ConfigTest.java @@ -6,7 +6,7 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; -import io.appium.java_client.AddAppiumUserAgent; +import io.appium.java_client.AppiumUserAgentFilter; import org.junit.jupiter.api.Test; class ConfigTest { @@ -19,8 +19,8 @@ void verifyGettingExistingValue() { assertThat(Config.main().getValue(SELENIUM_EXISTING_KEY, String.class).length(), greaterThan(0)); assertTrue(Config.main().getOptionalValue(SELENIUM_EXISTING_KEY, String.class).isPresent()); - assertThat(Config.main().getValue(AddAppiumUserAgent.VERSION_KEY, String.class).length(), greaterThan(0)); - assertTrue(Config.main().getOptionalValue(AddAppiumUserAgent.VERSION_KEY, String.class).isPresent()); + assertThat(Config.main().getValue(AppiumUserAgentFilter.VERSION_KEY, String.class).length(), greaterThan(0)); + assertTrue(Config.main().getOptionalValue(AppiumUserAgentFilter.VERSION_KEY, String.class).isPresent()); } @Test @@ -31,7 +31,7 @@ void verifyGettingNonExistingValue() { @Test void verifyGettingExistingValueWithWrongClass() { assertThrows(ClassCastException.class, () -> Config.main().getValue(SELENIUM_EXISTING_KEY, Integer.class)); - assertThrows(ClassCastException.class, () -> Config.main().getValue(AddAppiumUserAgent.VERSION_KEY, Integer.class)); + assertThrows(ClassCastException.class, () -> Config.main().getValue(AppiumUserAgentFilter.VERSION_KEY, Integer.class)); } @Test From 88258d6b2effc434c1af282e7d3001f8402f52ff Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Sat, 22 Oct 2022 22:27:40 -0700 Subject: [PATCH 56/66] fix conflict --- .../io/appium/java_client/remote/AppiumCommandExecutor.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java index 3515ea68c..2d5ec6cfd 100644 --- a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java +++ b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java @@ -65,7 +65,7 @@ public class AppiumCommandExecutor extends HttpCommandExecutor { private final AppiumClientConfig appiumClientConfig; - /* + /** * Create an AppiumCommandExecutor instance. * * @param additionalCommands is the map of Appium commands @@ -175,10 +175,7 @@ protected HttpClient getClient() { * Override the http client in the HttpCommandExecutor class with a new http client instance with the given URL. * It uses the same http client factory and client config for the new http client instance * if the constructor got them. -<<<<<<< HEAD -======= * @param serverUrl A url to override. ->>>>>>> master */ protected void overrideServerUrl(URL serverUrl) { if (this.appiumClientConfig == null) { From 778d5b6092366ea92510ef9f4fbc68a9a3bb6c8d Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Sun, 23 Oct 2022 18:52:17 -0700 Subject: [PATCH 57/66] refer to com.google.common.net.HttpHeaders --- .../java/io/appium/java_client/AppiumUserAgentFilter.java | 8 ++++++-- .../appium/java_client/remote/AppiumCommandExecutor.java | 3 ++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/appium/java_client/AppiumUserAgentFilter.java b/src/main/java/io/appium/java_client/AppiumUserAgentFilter.java index 2af3366a8..6da28b0fb 100644 --- a/src/main/java/io/appium/java_client/AppiumUserAgentFilter.java +++ b/src/main/java/io/appium/java_client/AppiumUserAgentFilter.java @@ -16,6 +16,7 @@ package io.appium.java_client; +import com.google.common.net.HttpHeaders; import io.appium.java_client.internal.Config; import org.openqa.selenium.remote.http.AddSeleniumUserAgent; import org.openqa.selenium.remote.http.Filter; @@ -42,9 +43,12 @@ public class AppiumUserAgentFilter implements Filter { @Override public HttpHandler apply(HttpHandler next) { + + + return req -> { - if (req.getHeader("User-Agent") == null) { - req.addHeader("User-Agent", USER_AGENT); + if (req.getHeader(HttpHeaders.USER_AGENT) == null) { + req.addHeader(HttpHeaders.USER_AGENT, USER_AGENT); } return next.execute(req); diff --git a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java index 2d5ec6cfd..26b333d10 100644 --- a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java +++ b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java @@ -24,6 +24,7 @@ import com.google.common.base.Supplier; import com.google.common.base.Throwables; +import com.google.common.net.HttpHeaders; import io.appium.java_client.AppiumUserAgentFilter; import io.appium.java_client.AppiumClientConfig; import org.openqa.selenium.SessionNotCreatedException; @@ -193,7 +194,7 @@ private Response createSession(Command command) throws IOException { ProtocolHandshake.Result result = new AppiumProtocolHandshake().createSession( getClient().with((httpHandler) -> (req) -> { - req.setHeader("User-Agent", AppiumUserAgentFilter.USER_AGENT); + req.setHeader(HttpHeaders.USER_AGENT, AppiumUserAgentFilter.USER_AGENT); req.setHeader(IDEMPOTENCY_KEY_HEADER, UUID.randomUUID().toString().toLowerCase()); return httpHandler.execute(req); }), command From 73c2a85ee3f88c66571a7e4c0634a477d2ab6cc3 Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Sun, 23 Oct 2022 19:19:02 -0700 Subject: [PATCH 58/66] tweak the logic to include UA --- .../java_client/AppiumUserAgentFilter.java | 21 +++++++++++++++---- .../internal/AppiumUserAgentFilterTest.java | 20 ++++++++++++++++++ 2 files changed, 37 insertions(+), 4 deletions(-) create mode 100644 src/test/java/io/appium/java_client/internal/AppiumUserAgentFilterTest.java diff --git a/src/main/java/io/appium/java_client/AppiumUserAgentFilter.java b/src/main/java/io/appium/java_client/AppiumUserAgentFilter.java index 6da28b0fb..22d7bf200 100644 --- a/src/main/java/io/appium/java_client/AppiumUserAgentFilter.java +++ b/src/main/java/io/appium/java_client/AppiumUserAgentFilter.java @@ -22,6 +22,8 @@ import org.openqa.selenium.remote.http.Filter; import org.openqa.selenium.remote.http.HttpHandler; +import javax.annotation.Nullable; + /** * Manage Appium Client configurations. */ @@ -40,14 +42,25 @@ public class AppiumUserAgentFilter implements Filter { AddSeleniumUserAgent.USER_AGENT ); + /** + * Returns true if the given User Agent includes "appium/", which + * implies the User Agent already has Appium UA by this method. + * @param userAgent the User Agent in the request headers. + * @return whether the given User Agent includes Appium UA + * like by this filter. + */ + public boolean containsAppiumName(@Nullable String userAgent) { + if (userAgent == null) { + return false; + } + return userAgent.contains("appium/"); + } + @Override public HttpHandler apply(HttpHandler next) { - - - return req -> { - if (req.getHeader(HttpHeaders.USER_AGENT) == null) { + if (containsAppiumName(req.getHeader(HttpHeaders.USER_AGENT))) { req.addHeader(HttpHeaders.USER_AGENT, USER_AGENT); } diff --git a/src/test/java/io/appium/java_client/internal/AppiumUserAgentFilterTest.java b/src/test/java/io/appium/java_client/internal/AppiumUserAgentFilterTest.java new file mode 100644 index 000000000..1564d7524 --- /dev/null +++ b/src/test/java/io/appium/java_client/internal/AppiumUserAgentFilterTest.java @@ -0,0 +1,20 @@ +package io.appium.java_client.internal; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import io.appium.java_client.AppiumUserAgentFilter; +import org.junit.jupiter.api.Test; + +public class AppiumUserAgentFilterTest { + @Test + void validateUserAgent() { + assertTrue(AppiumUserAgentFilter.USER_AGENT.startsWith("appium/")); + } + + @Test + void validUserAgentIfContainsAppiumName() { + assertFalse(AppiumUserAgentFilter.USER_AGENT.startsWith("selenium/4.5.0 (java mac)")); + assertTrue(AppiumUserAgentFilter.USER_AGENT.startsWith("appium/8.2.0 (selenium/4.5.0 (java mac))")); + } +} From 1d3883942c4c5d7edcea47ced96cde9fbc2e0d97 Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Wed, 26 Oct 2022 00:33:33 -0700 Subject: [PATCH 59/66] use parameterized test --- .../java_client/AppiumUserAgentFilter.java | 5 +--- .../internal/AppiumUserAgentFilterTest.java | 26 ++++++++++++++----- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/src/main/java/io/appium/java_client/AppiumUserAgentFilter.java b/src/main/java/io/appium/java_client/AppiumUserAgentFilter.java index 22d7bf200..f2bcf2aab 100644 --- a/src/main/java/io/appium/java_client/AppiumUserAgentFilter.java +++ b/src/main/java/io/appium/java_client/AppiumUserAgentFilter.java @@ -50,10 +50,7 @@ public class AppiumUserAgentFilter implements Filter { * like by this filter. */ public boolean containsAppiumName(@Nullable String userAgent) { - if (userAgent == null) { - return false; - } - return userAgent.contains("appium/"); + return userAgent != null && userAgent.contains("appium/"); } @Override diff --git a/src/test/java/io/appium/java_client/internal/AppiumUserAgentFilterTest.java b/src/test/java/io/appium/java_client/internal/AppiumUserAgentFilterTest.java index 1564d7524..6a89f0d95 100644 --- a/src/test/java/io/appium/java_client/internal/AppiumUserAgentFilterTest.java +++ b/src/test/java/io/appium/java_client/internal/AppiumUserAgentFilterTest.java @@ -1,10 +1,14 @@ package io.appium.java_client.internal; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; - import io.appium.java_client.AppiumUserAgentFilter; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; + +import java.util.stream.Stream; + +import static org.junit.jupiter.api.Assertions.*; public class AppiumUserAgentFilterTest { @Test @@ -12,9 +16,17 @@ void validateUserAgent() { assertTrue(AppiumUserAgentFilter.USER_AGENT.startsWith("appium/")); } - @Test - void validUserAgentIfContainsAppiumName() { - assertFalse(AppiumUserAgentFilter.USER_AGENT.startsWith("selenium/4.5.0 (java mac)")); - assertTrue(AppiumUserAgentFilter.USER_AGENT.startsWith("appium/8.2.0 (selenium/4.5.0 (java mac))")); + public static Stream userAgentParams() { + return Stream.of( + Arguments.of("selenium/4.5.0 (java mac)", false), + Arguments.of("appium/8.2.0 (selenium/4.5.0 (java mac))", true), + Arguments.of("something (appium/8.2.0 (selenium/4.5.0 (java mac)))", true) + ); + } + + @ParameterizedTest + @MethodSource("userAgentParams") + void validUserAgentIfContainsAppiumName(String userAgent, boolean expected) { + assertEquals(new AppiumUserAgentFilter().containsAppiumName(userAgent), expected); } } From 1b49768bc2333eafda5e8fd1605d549650d83777 Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Wed, 26 Oct 2022 00:43:10 -0700 Subject: [PATCH 60/66] use parameterized more, defined const --- .../java_client/AppiumUserAgentFilter.java | 4 ++- .../java_client/internal/ConfigTest.java | 26 +++++++++++-------- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/src/main/java/io/appium/java_client/AppiumUserAgentFilter.java b/src/main/java/io/appium/java_client/AppiumUserAgentFilter.java index f2bcf2aab..4378f7c96 100644 --- a/src/main/java/io/appium/java_client/AppiumUserAgentFilter.java +++ b/src/main/java/io/appium/java_client/AppiumUserAgentFilter.java @@ -32,6 +32,8 @@ public class AppiumUserAgentFilter implements Filter { public static final String VERSION_KEY = "appiumClient.version"; + private String USER_AGENT_PREFIX = "appium/"; + /** * A custom User Agent name for Appium Java client. * e.g. appium/8.2.0 (selenium/4.5.0 (java mac)) @@ -50,7 +52,7 @@ public class AppiumUserAgentFilter implements Filter { * like by this filter. */ public boolean containsAppiumName(@Nullable String userAgent) { - return userAgent != null && userAgent.contains("appium/"); + return userAgent != null && userAgent.contains(USER_AGENT_PREFIX); } @Override diff --git a/src/test/java/io/appium/java_client/internal/ConfigTest.java b/src/test/java/io/appium/java_client/internal/ConfigTest.java index 79371bbca..67518eca7 100644 --- a/src/test/java/io/appium/java_client/internal/ConfigTest.java +++ b/src/test/java/io/appium/java_client/internal/ConfigTest.java @@ -8,19 +8,23 @@ import io.appium.java_client.AppiumUserAgentFilter; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import org.junit.jupiter.params.provider.ValueSource; + +import java.util.stream.Stream; class ConfigTest { private static final String SELENIUM_EXISTING_KEY = "selenium.version"; private static final String MISSING_KEY = "bla"; - @Test - void verifyGettingExistingValue() { - assertThat(Config.main().getValue(SELENIUM_EXISTING_KEY, String.class).length(), greaterThan(0)); - assertTrue(Config.main().getOptionalValue(SELENIUM_EXISTING_KEY, String.class).isPresent()); - - assertThat(Config.main().getValue(AppiumUserAgentFilter.VERSION_KEY, String.class).length(), greaterThan(0)); - assertTrue(Config.main().getOptionalValue(AppiumUserAgentFilter.VERSION_KEY, String.class).isPresent()); + @ParameterizedTest + @ValueSource(strings = {SELENIUM_EXISTING_KEY, AppiumUserAgentFilter.VERSION_KEY}) + void verifyGettingExistingValue(String key) { + assertThat(Config.main().getValue(key, String.class).length(), greaterThan(0)); + assertTrue(Config.main().getOptionalValue(key, String.class).isPresent()); } @Test @@ -28,10 +32,10 @@ void verifyGettingNonExistingValue() { assertThrows(IllegalArgumentException.class, () -> Config.main().getValue(MISSING_KEY, String.class)); } - @Test - void verifyGettingExistingValueWithWrongClass() { - assertThrows(ClassCastException.class, () -> Config.main().getValue(SELENIUM_EXISTING_KEY, Integer.class)); - assertThrows(ClassCastException.class, () -> Config.main().getValue(AppiumUserAgentFilter.VERSION_KEY, Integer.class)); + @ParameterizedTest + @ValueSource(strings = {SELENIUM_EXISTING_KEY, AppiumUserAgentFilter.VERSION_KEY}) + void verifyGettingExistingValueWithWrongClass(String key) { + assertThrows(ClassCastException.class, () -> Config.main().getValue(key, Integer.class)); } @Test From f0809f524e64e1116f86595db64481a7a32e761f Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Wed, 26 Oct 2022 00:53:38 -0700 Subject: [PATCH 61/66] fix lint --- src/main/java/io/appium/java_client/AppiumUserAgentFilter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/appium/java_client/AppiumUserAgentFilter.java b/src/main/java/io/appium/java_client/AppiumUserAgentFilter.java index 4378f7c96..bdee3b1e5 100644 --- a/src/main/java/io/appium/java_client/AppiumUserAgentFilter.java +++ b/src/main/java/io/appium/java_client/AppiumUserAgentFilter.java @@ -32,7 +32,7 @@ public class AppiumUserAgentFilter implements Filter { public static final String VERSION_KEY = "appiumClient.version"; - private String USER_AGENT_PREFIX = "appium/"; + private static final String USER_AGENT_PREFIX = "appium/"; /** * A custom User Agent name for Appium Java client. From 8b548ca4eed0360ea8441a3ffae4b565477f25d0 Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Thu, 27 Oct 2022 23:23:49 -0700 Subject: [PATCH 62/66] modify the logic to customize the UA, add tests --- .../java_client/AppiumUserAgentFilter.java | 27 ++++++++++++--- .../internal/AppiumUserAgentFilterTest.java | 33 +++++++++++++++++++ 2 files changed, 55 insertions(+), 5 deletions(-) diff --git a/src/main/java/io/appium/java_client/AppiumUserAgentFilter.java b/src/main/java/io/appium/java_client/AppiumUserAgentFilter.java index bdee3b1e5..6243e8662 100644 --- a/src/main/java/io/appium/java_client/AppiumUserAgentFilter.java +++ b/src/main/java/io/appium/java_client/AppiumUserAgentFilter.java @@ -35,7 +35,7 @@ public class AppiumUserAgentFilter implements Filter { private static final String USER_AGENT_PREFIX = "appium/"; /** - * A custom User Agent name for Appium Java client. + * A default User Agent name for Appium Java client. * e.g. appium/8.2.0 (selenium/4.5.0 (java mac)) */ public static final String USER_AGENT = String.format( @@ -55,14 +55,31 @@ public boolean containsAppiumName(@Nullable String userAgent) { return userAgent != null && userAgent.contains(USER_AGENT_PREFIX); } + /** + * Returns the User Agent. If the given UA already has + * {@link USER_AGENT_PREFIX}, it returns the UA. + * IF the given UA does not have {@link USER_AGENT_PREFIX}, + * it returns UA with the Appium prefix. + * @param userAgent the User Agent in the request headers. + * @return the User Agent for the request + */ + public String buildUserAgent(@Nullable String userAgent) { + if (userAgent == null) { + return USER_AGENT; + } + + if (containsAppiumName(userAgent)) { + return userAgent; + } + + return String.format("appium/%s (%s)",Config.main().getValue(VERSION_KEY, String.class), userAgent); + } + @Override public HttpHandler apply(HttpHandler next) { return req -> { - if (containsAppiumName(req.getHeader(HttpHeaders.USER_AGENT))) { - req.addHeader(HttpHeaders.USER_AGENT, USER_AGENT); - } - + req.addHeader(HttpHeaders.USER_AGENT, buildUserAgent(req.getHeader(HttpHeaders.USER_AGENT))); return next.execute(req); }; } diff --git a/src/test/java/io/appium/java_client/internal/AppiumUserAgentFilterTest.java b/src/test/java/io/appium/java_client/internal/AppiumUserAgentFilterTest.java index 6a89f0d95..9338dc9c3 100644 --- a/src/test/java/io/appium/java_client/internal/AppiumUserAgentFilterTest.java +++ b/src/test/java/io/appium/java_client/internal/AppiumUserAgentFilterTest.java @@ -29,4 +29,37 @@ public static Stream userAgentParams() { void validUserAgentIfContainsAppiumName(String userAgent, boolean expected) { assertEquals(new AppiumUserAgentFilter().containsAppiumName(userAgent), expected); } + + @Test + void validBuildUserAgentNoUA() { + assertEquals(new AppiumUserAgentFilter().buildUserAgent(null), AppiumUserAgentFilter.USER_AGENT); + } + + @Test + void validBuildUserAgentNoAppium1() { + String ua = new AppiumUserAgentFilter().buildUserAgent("selenium/4.5.0 (java mac)"); + assertTrue(ua.startsWith("appium/")); + assertTrue(ua.endsWith("selenium/4.5.0 (java mac))")); + } + + @Test + void validBuildUserAgentNoAppium2() { + String ua = new AppiumUserAgentFilter().buildUserAgent("customSelenium/4.5.0 (java mac)"); + assertTrue(ua.startsWith("appium/")); + assertTrue(ua.endsWith("customSelenium/4.5.0 (java mac))")); + } + + @Test + void validBuildUserAgentAlreadyHasAppium1() { + // Won't modify since the UA already has appium prefix + String ua = new AppiumUserAgentFilter().buildUserAgent("appium/8.2.0 (selenium/4.5.0 (java mac))"); + assertEquals("appium/8.2.0 (selenium/4.5.0 (java mac))", ua); + } + + @Test + void validBuildUserAgentAlreadyHasAppium2() { + // Won't modify since the UA already has appium prefix + String ua = new AppiumUserAgentFilter().buildUserAgent("something (appium/8.2.0 (selenium/4.5.0 (java mac)))"); + assertEquals("something (appium/8.2.0 (selenium/4.5.0 (java mac)))", ua); + } } From 5ad80f8ec65b6f942e7dc3b0ee6a4c28b7de0666 Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Thu, 27 Oct 2022 23:27:44 -0700 Subject: [PATCH 63/66] match as case insensitive --- .../java/io/appium/java_client/AppiumUserAgentFilter.java | 5 +++-- .../java_client/internal/AppiumUserAgentFilterTest.java | 2 ++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/appium/java_client/AppiumUserAgentFilter.java b/src/main/java/io/appium/java_client/AppiumUserAgentFilter.java index 6243e8662..bd8fd02c1 100644 --- a/src/main/java/io/appium/java_client/AppiumUserAgentFilter.java +++ b/src/main/java/io/appium/java_client/AppiumUserAgentFilter.java @@ -46,13 +46,14 @@ public class AppiumUserAgentFilter implements Filter { /** * Returns true if the given User Agent includes "appium/", which - * implies the User Agent already has Appium UA by this method. + * implies the User Agent already has the Appium UA by this method. + * The matching is case-insensitive. * @param userAgent the User Agent in the request headers. * @return whether the given User Agent includes Appium UA * like by this filter. */ public boolean containsAppiumName(@Nullable String userAgent) { - return userAgent != null && userAgent.contains(USER_AGENT_PREFIX); + return userAgent != null && userAgent.toLowerCase().contains(USER_AGENT_PREFIX.toLowerCase()); } /** diff --git a/src/test/java/io/appium/java_client/internal/AppiumUserAgentFilterTest.java b/src/test/java/io/appium/java_client/internal/AppiumUserAgentFilterTest.java index 9338dc9c3..37e5b28ab 100644 --- a/src/test/java/io/appium/java_client/internal/AppiumUserAgentFilterTest.java +++ b/src/test/java/io/appium/java_client/internal/AppiumUserAgentFilterTest.java @@ -20,6 +20,8 @@ public static Stream userAgentParams() { return Stream.of( Arguments.of("selenium/4.5.0 (java mac)", false), Arguments.of("appium/8.2.0 (selenium/4.5.0 (java mac))", true), + Arguments.of("APPIUM/8.2.0 (selenium/4.5.0 (java mac))", true), + Arguments.of("something (Appium/8.2.0 (selenium/4.5.0 (java mac)))", true), Arguments.of("something (appium/8.2.0 (selenium/4.5.0 (java mac)))", true) ); } From 128e583189efafa1fedf2180eadc81d3c606203a Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Fri, 28 Oct 2022 02:00:29 -0700 Subject: [PATCH 64/66] tweak, fixed addHeader not to add headers twice --- .../java_client/AppiumUserAgentFilter.java | 12 +++++++----- .../remote/AppiumCommandExecutor.java | 3 ++- .../internal/AppiumUserAgentFilterTest.java | 16 ++++++++-------- 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/main/java/io/appium/java_client/AppiumUserAgentFilter.java b/src/main/java/io/appium/java_client/AppiumUserAgentFilter.java index bd8fd02c1..f9a9ef6fc 100644 --- a/src/main/java/io/appium/java_client/AppiumUserAgentFilter.java +++ b/src/main/java/io/appium/java_client/AppiumUserAgentFilter.java @@ -39,7 +39,8 @@ public class AppiumUserAgentFilter implements Filter { * e.g. appium/8.2.0 (selenium/4.5.0 (java mac)) */ public static final String USER_AGENT = String.format( - "appium/%s (%s)", + "%s%s (%s)", + USER_AGENT_PREFIX, Config.main().getValue(VERSION_KEY, String.class), AddSeleniumUserAgent.USER_AGENT ); @@ -52,7 +53,7 @@ public class AppiumUserAgentFilter implements Filter { * @return whether the given User Agent includes Appium UA * like by this filter. */ - public boolean containsAppiumName(@Nullable String userAgent) { + public static boolean containsAppiumName(@Nullable String userAgent) { return userAgent != null && userAgent.toLowerCase().contains(USER_AGENT_PREFIX.toLowerCase()); } @@ -64,7 +65,7 @@ public boolean containsAppiumName(@Nullable String userAgent) { * @param userAgent the User Agent in the request headers. * @return the User Agent for the request */ - public String buildUserAgent(@Nullable String userAgent) { + public static String buildUserAgent(@Nullable String userAgent) { if (userAgent == null) { return USER_AGENT; } @@ -73,14 +74,15 @@ public String buildUserAgent(@Nullable String userAgent) { return userAgent; } - return String.format("appium/%s (%s)",Config.main().getValue(VERSION_KEY, String.class), userAgent); + return String.format("%s%s (%s)", + USER_AGENT_PREFIX, Config.main().getValue(VERSION_KEY, String.class), userAgent); } @Override public HttpHandler apply(HttpHandler next) { return req -> { - req.addHeader(HttpHeaders.USER_AGENT, buildUserAgent(req.getHeader(HttpHeaders.USER_AGENT))); + req.setHeader(HttpHeaders.USER_AGENT, buildUserAgent(req.getHeader(HttpHeaders.USER_AGENT))); return next.execute(req); }; } diff --git a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java index 26b333d10..43ce9fc01 100644 --- a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java +++ b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java @@ -194,7 +194,8 @@ private Response createSession(Command command) throws IOException { ProtocolHandshake.Result result = new AppiumProtocolHandshake().createSession( getClient().with((httpHandler) -> (req) -> { - req.setHeader(HttpHeaders.USER_AGENT, AppiumUserAgentFilter.USER_AGENT); + req.setHeader(HttpHeaders.USER_AGENT, + AppiumUserAgentFilter.buildUserAgent(req.getHeader(HttpHeaders.USER_AGENT))); req.setHeader(IDEMPOTENCY_KEY_HEADER, UUID.randomUUID().toString().toLowerCase()); return httpHandler.execute(req); }), command diff --git a/src/test/java/io/appium/java_client/internal/AppiumUserAgentFilterTest.java b/src/test/java/io/appium/java_client/internal/AppiumUserAgentFilterTest.java index 37e5b28ab..10e33a1ee 100644 --- a/src/test/java/io/appium/java_client/internal/AppiumUserAgentFilterTest.java +++ b/src/test/java/io/appium/java_client/internal/AppiumUserAgentFilterTest.java @@ -29,24 +29,24 @@ public static Stream userAgentParams() { @ParameterizedTest @MethodSource("userAgentParams") void validUserAgentIfContainsAppiumName(String userAgent, boolean expected) { - assertEquals(new AppiumUserAgentFilter().containsAppiumName(userAgent), expected); + assertEquals(AppiumUserAgentFilter.containsAppiumName(userAgent), expected); } @Test void validBuildUserAgentNoUA() { - assertEquals(new AppiumUserAgentFilter().buildUserAgent(null), AppiumUserAgentFilter.USER_AGENT); + assertEquals(AppiumUserAgentFilter.buildUserAgent(null), AppiumUserAgentFilter.USER_AGENT); } @Test void validBuildUserAgentNoAppium1() { - String ua = new AppiumUserAgentFilter().buildUserAgent("selenium/4.5.0 (java mac)"); + String ua = AppiumUserAgentFilter.buildUserAgent("selenium/4.5.0 (java mac)"); assertTrue(ua.startsWith("appium/")); assertTrue(ua.endsWith("selenium/4.5.0 (java mac))")); } @Test void validBuildUserAgentNoAppium2() { - String ua = new AppiumUserAgentFilter().buildUserAgent("customSelenium/4.5.0 (java mac)"); + String ua = AppiumUserAgentFilter.buildUserAgent("customSelenium/4.5.0 (java mac)"); assertTrue(ua.startsWith("appium/")); assertTrue(ua.endsWith("customSelenium/4.5.0 (java mac))")); } @@ -54,14 +54,14 @@ void validBuildUserAgentNoAppium2() { @Test void validBuildUserAgentAlreadyHasAppium1() { // Won't modify since the UA already has appium prefix - String ua = new AppiumUserAgentFilter().buildUserAgent("appium/8.2.0 (selenium/4.5.0 (java mac))"); - assertEquals("appium/8.2.0 (selenium/4.5.0 (java mac))", ua); + String ua = AppiumUserAgentFilter.buildUserAgent("appium/8.1.0 (selenium/4.5.0 (java mac))"); + assertEquals("appium/8.1.0 (selenium/4.5.0 (java mac))", ua); } @Test void validBuildUserAgentAlreadyHasAppium2() { // Won't modify since the UA already has appium prefix - String ua = new AppiumUserAgentFilter().buildUserAgent("something (appium/8.2.0 (selenium/4.5.0 (java mac)))"); - assertEquals("something (appium/8.2.0 (selenium/4.5.0 (java mac)))", ua); + String ua = AppiumUserAgentFilter.buildUserAgent("something (appium/8.1.0 (selenium/4.5.0 (java mac)))"); + assertEquals("something (appium/8.1.0 (selenium/4.5.0 (java mac)))", ua); } } From 405a5ecd39cce3a8fecb661bd956181e160ab004 Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Sat, 29 Oct 2022 11:40:28 -0700 Subject: [PATCH 65/66] add annotation --- src/main/java/io/appium/java_client/AppiumUserAgentFilter.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/io/appium/java_client/AppiumUserAgentFilter.java b/src/main/java/io/appium/java_client/AppiumUserAgentFilter.java index f9a9ef6fc..a77118e61 100644 --- a/src/main/java/io/appium/java_client/AppiumUserAgentFilter.java +++ b/src/main/java/io/appium/java_client/AppiumUserAgentFilter.java @@ -16,6 +16,7 @@ package io.appium.java_client; +import com.google.common.annotations.VisibleForTesting; import com.google.common.net.HttpHeaders; import io.appium.java_client.internal.Config; import org.openqa.selenium.remote.http.AddSeleniumUserAgent; @@ -53,6 +54,7 @@ public class AppiumUserAgentFilter implements Filter { * @return whether the given User Agent includes Appium UA * like by this filter. */ + @VisibleForTesting public static boolean containsAppiumName(@Nullable String userAgent) { return userAgent != null && userAgent.toLowerCase().contains(USER_AGENT_PREFIX.toLowerCase()); } From 407bc18361a0d7077363e88fe41ebec30d6e7c37 Mon Sep 17 00:00:00 2001 From: Kazuaki Matsuo Date: Sat, 29 Oct 2022 11:43:56 -0700 Subject: [PATCH 66/66] define a method to build UA --- .../java_client/AppiumUserAgentFilter.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/io/appium/java_client/AppiumUserAgentFilter.java b/src/main/java/io/appium/java_client/AppiumUserAgentFilter.java index a77118e61..a36da9d08 100644 --- a/src/main/java/io/appium/java_client/AppiumUserAgentFilter.java +++ b/src/main/java/io/appium/java_client/AppiumUserAgentFilter.java @@ -23,6 +23,7 @@ import org.openqa.selenium.remote.http.Filter; import org.openqa.selenium.remote.http.HttpHandler; +import javax.annotation.Nonnull; import javax.annotation.Nullable; /** @@ -39,12 +40,12 @@ public class AppiumUserAgentFilter implements Filter { * A default User Agent name for Appium Java client. * e.g. appium/8.2.0 (selenium/4.5.0 (java mac)) */ - public static final String USER_AGENT = String.format( - "%s%s (%s)", - USER_AGENT_PREFIX, - Config.main().getValue(VERSION_KEY, String.class), - AddSeleniumUserAgent.USER_AGENT - ); + public static final String USER_AGENT = buildUserAgentHeaderValue(AddSeleniumUserAgent.USER_AGENT); + + private static String buildUserAgentHeaderValue(@Nonnull String previousUA) { + return String.format("%s%s (%s)", + USER_AGENT_PREFIX, Config.main().getValue(VERSION_KEY, String.class), previousUA); + } /** * Returns true if the given User Agent includes "appium/", which @@ -76,8 +77,7 @@ public static String buildUserAgent(@Nullable String userAgent) { return userAgent; } - return String.format("%s%s (%s)", - USER_AGENT_PREFIX, Config.main().getValue(VERSION_KEY, String.class), userAgent); + return buildUserAgentHeaderValue(userAgent); } @Override