diff --git a/src/main/java/io/appium/java_client/AppiumDriver.java b/src/main/java/io/appium/java_client/AppiumDriver.java index 24c766928..edb455ed2 100644 --- a/src/main/java/io/appium/java_client/AppiumDriver.java +++ b/src/main/java/io/appium/java_client/AppiumDriver.java @@ -38,6 +38,7 @@ import java.util.Set; import static io.appium.java_client.MobileCommand.*; +import org.openqa.selenium.remote.http.HttpClient; /** * @param means the required type from the list of allowed types below @@ -156,34 +157,50 @@ protected static ImmutableMap getCommandImmutableMap( return builder.build(); } - private AppiumDriver(CommandExecutor executor, Capabilities capabilities){ + private AppiumDriver(HttpCommandExecutor executor, Capabilities capabilities){ super(executor, capabilities); this.executeMethod = new AppiumExecutionMethod(this); locationContext = new RemoteLocationContext(executeMethod); super.setErrorHandler(errorHandler); + this.remoteAddress = executor.getAddressOfRemoteServer(); } - + public AppiumDriver(URL remoteAddress, Capabilities desiredCapabilities) { this(new AppiumCommandExecutor( getMobileCommands(), remoteAddress), desiredCapabilities); - this.remoteAddress = remoteAddress; + } + + public AppiumDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities desiredCapabilities) { + this(new AppiumCommandExecutor( + getMobileCommands(), remoteAddress, httpClientFactory), desiredCapabilities); } public AppiumDriver(AppiumDriverLocalService service, Capabilities desiredCapabilities) { this(new AppiumCommandExecutor( getMobileCommands(), service), desiredCapabilities); - this.remoteAddress = service.getUrl(); + } + + public AppiumDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities desiredCapabilities) { + this(new AppiumCommandExecutor( + getMobileCommands(), service, httpClientFactory), desiredCapabilities); } public AppiumDriver(AppiumServiceBuilder builder, Capabilities desiredCapabilities) { this(builder.build(), desiredCapabilities); } - + + public AppiumDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities desiredCapabilities) { + this(builder.build(), httpClientFactory, desiredCapabilities); + } + + public AppiumDriver(HttpClient.Factory httpClientFactory, Capabilities desiredCapabilities) { + this(AppiumDriverLocalService.buildDefaultService(), httpClientFactory, desiredCapabilities); + } + public AppiumDriver(Capabilities desiredCapabilities) { this(AppiumDriverLocalService.buildDefaultService(), desiredCapabilities); } - @Override protected Response execute(String command) { return super.execute(command, ImmutableMap.of()); 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 148986513..093371636 100644 --- a/src/main/java/io/appium/java_client/android/AndroidDriver.java +++ b/src/main/java/io/appium/java_client/android/AndroidDriver.java @@ -50,6 +50,7 @@ import static io.appium.java_client.remote.MobileCapabilityType.APP_WAIT_ACTIVITY; import static io.appium.java_client.remote.MobileCapabilityType.APP_WAIT_PACKAGE; import static io.appium.java_client.remote.MobileCapabilityType.DONT_STOP_APP_ON_RESET; +import org.openqa.selenium.remote.http.HttpClient; /** * @param means the required type from the list of allowed types below @@ -81,19 +82,43 @@ public AndroidDriver(URL remoteAddress, Capabilities desiredCapabilities) { ANDROID_PLATFORM)); this.setElementConverter(new JsonToAndroidElementConverter(this)); } + + public AndroidDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities desiredCapabilities) { + super(remoteAddress, httpClientFactory, substituteMobilePlatform(desiredCapabilities, + ANDROID_PLATFORM)); + this.setElementConverter(new JsonToAndroidElementConverter(this)); + } public AndroidDriver(AppiumDriverLocalService service, Capabilities desiredCapabilities) { super(service, substituteMobilePlatform(desiredCapabilities, ANDROID_PLATFORM)); this.setElementConverter(new JsonToAndroidElementConverter(this)); } + + public AndroidDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities desiredCapabilities) { + super(service, httpClientFactory, substituteMobilePlatform(desiredCapabilities, + ANDROID_PLATFORM)); + this.setElementConverter(new JsonToAndroidElementConverter(this)); + } public AndroidDriver(AppiumServiceBuilder builder, Capabilities desiredCapabilities) { super(builder, substituteMobilePlatform(desiredCapabilities, ANDROID_PLATFORM)); this.setElementConverter(new JsonToAndroidElementConverter(this)); } - + + public AndroidDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities desiredCapabilities) { + super(builder, httpClientFactory, substituteMobilePlatform(desiredCapabilities, + ANDROID_PLATFORM)); + this.setElementConverter(new JsonToAndroidElementConverter(this)); + } + + public AndroidDriver(HttpClient.Factory httpClientFactory, Capabilities desiredCapabilities) { + super(httpClientFactory, substituteMobilePlatform(desiredCapabilities, + ANDROID_PLATFORM)); + this.setElementConverter(new JsonToAndroidElementConverter(this)); + } + public AndroidDriver(Capabilities desiredCapabilities) { super(substituteMobilePlatform(desiredCapabilities, 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 b348e3016..5b8f28284 100644 --- a/src/main/java/io/appium/java_client/ios/IOSDriver.java +++ b/src/main/java/io/appium/java_client/ios/IOSDriver.java @@ -35,6 +35,7 @@ import java.util.List; import static io.appium.java_client.MobileCommand.*; +import org.openqa.selenium.remote.http.HttpClient; /** * @param means the required type from the list of allowed types below @@ -56,18 +57,42 @@ public IOSDriver(URL remoteAddress, Capabilities desiredCapabilities) { IOS_PLATFORM)); this.setElementConverter(new JsonToIOSElementConverter(this)); } + + public IOSDriver(URL remoteAddress, HttpClient.Factory httpClientFactory, Capabilities desiredCapabilities) { + super(remoteAddress, httpClientFactory, substituteMobilePlatform(desiredCapabilities, + IOS_PLATFORM)); + this.setElementConverter(new JsonToIOSElementConverter(this)); + } public IOSDriver(AppiumDriverLocalService service, Capabilities desiredCapabilities) { super(service, substituteMobilePlatform(desiredCapabilities, IOS_PLATFORM)); this.setElementConverter(new JsonToIOSElementConverter(this)); } + + public IOSDriver(AppiumDriverLocalService service, HttpClient.Factory httpClientFactory, Capabilities desiredCapabilities) { + super(service, httpClientFactory, substituteMobilePlatform(desiredCapabilities, + IOS_PLATFORM)); + this.setElementConverter(new JsonToIOSElementConverter(this)); + } public IOSDriver(AppiumServiceBuilder builder, Capabilities desiredCapabilities) { super(builder, substituteMobilePlatform(desiredCapabilities, IOS_PLATFORM)); this.setElementConverter(new JsonToIOSElementConverter(this)); } + + public IOSDriver(AppiumServiceBuilder builder, HttpClient.Factory httpClientFactory, Capabilities desiredCapabilities) { + super(builder, httpClientFactory, substituteMobilePlatform(desiredCapabilities, + IOS_PLATFORM)); + this.setElementConverter(new JsonToIOSElementConverter(this)); + } + + public IOSDriver(HttpClient.Factory httpClientFactory, Capabilities desiredCapabilities) { + super(httpClientFactory, substituteMobilePlatform(desiredCapabilities, + IOS_PLATFORM)); + this.setElementConverter(new JsonToIOSElementConverter(this)); + } public IOSDriver(Capabilities desiredCapabilities) { super(substituteMobilePlatform(desiredCapabilities, 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 c83536821..c54e3a659 100644 --- a/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java +++ b/src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java @@ -27,20 +27,35 @@ import java.net.ConnectException; import java.net.URL; import java.util.Map; +import org.openqa.selenium.remote.internal.ApacheHttpClient; public class AppiumCommandExecutor extends HttpCommandExecutor{ private final DriverService service; - public AppiumCommandExecutor(Map additionalCommands, URL addressOfRemoteServer) { - super(additionalCommands, addressOfRemoteServer); + public AppiumCommandExecutor(Map additionalCommands, + URL addressOfRemoteServer, + HttpClient.Factory httpClientFactory) { + super(additionalCommands, addressOfRemoteServer, httpClientFactory); service = null; } - - public AppiumCommandExecutor(Map additionalCommands, DriverService service) { - super(additionalCommands, service.getUrl()); + + public AppiumCommandExecutor(Map additionalCommands, + DriverService service, + HttpClient.Factory httpClientFactory) { + super(additionalCommands, service.getUrl(), httpClientFactory); this.service = service; } + + public AppiumCommandExecutor(Map additionalCommands, + URL addressOfRemoteServer) { + this(additionalCommands, addressOfRemoteServer, new ApacheHttpClient.Factory()); + } + + public AppiumCommandExecutor(Map additionalCommands, + DriverService service) { + this(additionalCommands, service, new ApacheHttpClient.Factory()); + } @Override public Response execute(Command command) throws IOException, WebDriverException {