Skip to content

Commit 938a4db

Browse files
authored
feat: Allow to create a driver with ClientConfig (#1735)
1 parent 0716883 commit 938a4db

File tree

8 files changed

+169
-8
lines changed

8 files changed

+169
-8
lines changed

src/main/java/io/appium/java_client/AppiumDriver.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import org.openqa.selenium.remote.RemoteWebDriver;
4242
import org.openqa.selenium.remote.Response;
4343
import org.openqa.selenium.remote.html5.RemoteLocationContext;
44+
import org.openqa.selenium.remote.http.ClientConfig;
4445
import org.openqa.selenium.remote.http.HttpClient;
4546
import org.openqa.selenium.remote.http.HttpMethod;
4647

@@ -83,6 +84,10 @@ public AppiumDriver(HttpCommandExecutor executor, Capabilities capabilities) {
8384
this.remoteAddress = executor.getAddressOfRemoteServer();
8485
}
8586

87+
public AppiumDriver(ClientConfig clientConfig, Capabilities capabilities) {
88+
this(new AppiumCommandExecutor(MobileCommand.commandRepository, clientConfig), capabilities);
89+
}
90+
8691
public AppiumDriver(URL remoteAddress, Capabilities capabilities) {
8792
this(new AppiumCommandExecutor(MobileCommand.commandRepository, remoteAddress),
8893
capabilities);

src/main/java/io/appium/java_client/android/AndroidDriver.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
import org.openqa.selenium.Platform;
5252
import org.openqa.selenium.remote.HttpCommandExecutor;
5353
import org.openqa.selenium.remote.html5.RemoteLocationContext;
54+
import org.openqa.selenium.remote.http.ClientConfig;
5455
import org.openqa.selenium.remote.http.HttpClient;
5556

5657
import java.net.URL;
@@ -182,6 +183,29 @@ public AndroidDriver(HttpClient.Factory httpClientFactory, Capabilities capabili
182183
super(httpClientFactory, ensurePlatformName(capabilities, ANDROID_PLATFORM));
183184
}
184185

186+
/**
187+
* Creates a new instance based on the given ClientConfig and {@code capabilities}.
188+
* The HTTP client is default client generated by {@link HttpCommandExecutor#getDefaultClientFactory}.
189+
* For example:
190+
*
191+
* <pre>
192+
*
193+
* ClientConfig clientConfig = ClientConfig.defaultConfig()
194+
* .baseUri(URI.create("WebDriver URL"))
195+
* .readTimeout(Duration.ofMinutes(5));
196+
* UiAutomator2Options options = new UiAutomator2Options();
197+
* AndroidDriver driver = new AndroidDriver(clientConfig, options);
198+
*
199+
* </pre>
200+
*
201+
* @param clientConfig take a look at {@link ClientConfig}
202+
* @param capabilities take a look at {@link Capabilities}
203+
*
204+
*/
205+
public AndroidDriver(ClientConfig clientConfig, Capabilities capabilities) {
206+
super(clientConfig, ensurePlatformName(capabilities, ANDROID_PLATFORM));
207+
}
208+
185209
/**
186210
* Creates a new instance based on {@code capabilities}.
187211
*

src/main/java/io/appium/java_client/gecko/GeckoDriver.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import io.appium.java_client.service.local.AppiumServiceBuilder;
2323
import org.openqa.selenium.Capabilities;
2424
import org.openqa.selenium.remote.HttpCommandExecutor;
25+
import org.openqa.selenium.remote.http.ClientConfig;
2526
import org.openqa.selenium.remote.http.HttpClient;
2627

2728
import java.net.URL;
@@ -73,6 +74,29 @@ public GeckoDriver(HttpClient.Factory httpClientFactory, Capabilities capabiliti
7374
super(httpClientFactory, ensureAutomationName(capabilities, AUTOMATION_NAME));
7475
}
7576

77+
/**
78+
* Creates a new instance based on the given ClientConfig and {@code capabilities}.
79+
* The HTTP client is default client generated by {@link HttpCommandExecutor#getDefaultClientFactory}.
80+
* For example:
81+
*
82+
* <pre>
83+
*
84+
* ClientConfig clientConfig = ClientConfig.defaultConfig()
85+
* .baseUri(URI.create("WebDriver URL"))
86+
* .readTimeout(Duration.ofMinutes(5));
87+
* GeckoOptions options = new GeckoOptions();
88+
* GeckoDriver driver = new GeckoDriver(clientConfig, options);
89+
*
90+
* </pre>
91+
*
92+
* @param clientConfig take a look at {@link ClientConfig}
93+
* @param capabilities take a look at {@link Capabilities}
94+
*
95+
*/
96+
public GeckoDriver(ClientConfig clientConfig, Capabilities capabilities) {
97+
super(clientConfig, ensureAutomationName(capabilities, AUTOMATION_NAME));
98+
}
99+
76100
public GeckoDriver(Capabilities capabilities) {
77101
super(ensureAutomationName(capabilities, AUTOMATION_NAME));
78102
}

src/main/java/io/appium/java_client/ios/IOSDriver.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import org.openqa.selenium.remote.HttpCommandExecutor;
4949
import org.openqa.selenium.remote.Response;
5050
import org.openqa.selenium.remote.html5.RemoteLocationContext;
51+
import org.openqa.selenium.remote.http.ClientConfig;
5152
import org.openqa.selenium.remote.http.HttpClient;
5253

5354
import java.net.URL;
@@ -171,6 +172,29 @@ public IOSDriver(HttpClient.Factory httpClientFactory, Capabilities capabilities
171172
super(httpClientFactory, ensurePlatformName(capabilities, PLATFORM_NAME));
172173
}
173174

175+
/**
176+
* Creates a new instance based on the given ClientConfig and {@code capabilities}.
177+
* The HTTP client is default client generated by {@link HttpCommandExecutor#getDefaultClientFactory}.
178+
* For example:
179+
*
180+
* <pre>
181+
*
182+
* ClientConfig clientConfig = ClientConfig.defaultConfig()
183+
* .baseUri(URI.create("WebDriver URL"))
184+
* .readTimeout(Duration.ofMinutes(5));
185+
* XCUITestOptions options = new XCUITestOptions();
186+
* IOSDriver driver = new IOSDriver(clientConfig, options);
187+
*
188+
* </pre>
189+
*
190+
* @param clientConfig take a look at {@link ClientConfig}
191+
* @param capabilities take a look at {@link Capabilities}
192+
*
193+
*/
194+
public IOSDriver(ClientConfig clientConfig, Capabilities capabilities) {
195+
super(clientConfig, ensurePlatformName(capabilities, PLATFORM_NAME));
196+
}
197+
174198
/**
175199
* Creates a new instance based on {@code capabilities}.
176200
*

src/main/java/io/appium/java_client/mac/Mac2Driver.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.openqa.selenium.Capabilities;
2626
import org.openqa.selenium.Platform;
2727
import org.openqa.selenium.remote.HttpCommandExecutor;
28+
import org.openqa.selenium.remote.http.ClientConfig;
2829
import org.openqa.selenium.remote.http.HttpClient;
2930

3031
import java.net.URL;
@@ -84,6 +85,30 @@ public Mac2Driver(HttpClient.Factory httpClientFactory, Capabilities capabilitie
8485
capabilities, PLATFORM_NAME, AUTOMATION_NAME));
8586
}
8687

88+
/**
89+
* Creates a new instance based on the given ClientConfig and {@code capabilities}.
90+
* The HTTP client is default client generated by {@link HttpCommandExecutor#getDefaultClientFactory}.
91+
* For example:
92+
*
93+
* <pre>
94+
*
95+
* ClientConfig clientConfig = ClientConfig.defaultConfig()
96+
* .baseUri(URI.create("WebDriver URL"))
97+
* .readTimeout(Duration.ofMinutes(5));
98+
* Mac2Options options = new Mac2Options();
99+
* Mac2Driver driver = new Mac2Driver(clientConfig, options);
100+
*
101+
* </pre>
102+
*
103+
* @param clientConfig take a look at {@link ClientConfig}
104+
* @param capabilities take a look at {@link Capabilities}
105+
*
106+
*/
107+
public Mac2Driver(ClientConfig clientConfig, Capabilities capabilities) {
108+
super(clientConfig, ensurePlatformAndAutomationNames(
109+
capabilities, PLATFORM_NAME, AUTOMATION_NAME));
110+
}
111+
87112
public Mac2Driver(Capabilities capabilities) {
88113
super(ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME));
89114
}

src/main/java/io/appium/java_client/remote/AppiumCommandExecutor.java

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -62,24 +62,33 @@ public class AppiumCommandExecutor extends HttpCommandExecutor {
6262

6363
private AppiumCommandExecutor(Map<String, CommandInfo> additionalCommands, DriverService service,
6464
URL addressOfRemoteServer,
65-
HttpClient.Factory httpClientFactory) {
65+
HttpClient.Factory httpClientFactory,
66+
ClientConfig clientConfig) {
6667
super(additionalCommands,
67-
ClientConfig.defaultConfig()
68-
.baseUrl(Require.nonNull("Server URL", ofNullable(service)
69-
.map(DriverService::getUrl)
70-
.orElse(addressOfRemoteServer)))
71-
.readTimeout(DEFAULT_READ_TIMEOUT), httpClientFactory);
68+
ofNullable(clientConfig).orElse(
69+
ClientConfig.defaultConfig()
70+
.baseUrl(Require.nonNull("Server URL", ofNullable(service)
71+
.map(DriverService::getUrl)
72+
.orElse(addressOfRemoteServer)))
73+
.readTimeout(DEFAULT_READ_TIMEOUT)
74+
),
75+
ofNullable(httpClientFactory).orElseGet(HttpCommandExecutor::getDefaultClientFactory)
76+
);
7277
serviceOptional = ofNullable(service);
7378
}
7479

7580
public AppiumCommandExecutor(Map<String, CommandInfo> additionalCommands, DriverService service,
7681
HttpClient.Factory httpClientFactory) {
77-
this(additionalCommands, checkNotNull(service), null, httpClientFactory);
82+
this(additionalCommands, checkNotNull(service), null, httpClientFactory, null);
7883
}
7984

8085
public AppiumCommandExecutor(Map<String, CommandInfo> additionalCommands,
8186
URL addressOfRemoteServer, HttpClient.Factory httpClientFactory) {
82-
this(additionalCommands, null, checkNotNull(addressOfRemoteServer), httpClientFactory);
87+
this(additionalCommands, null, checkNotNull(addressOfRemoteServer), httpClientFactory, null);
88+
}
89+
90+
public AppiumCommandExecutor(Map<String, CommandInfo> additionalCommands, ClientConfig clientConfig) {
91+
this(additionalCommands, null, checkNotNull(clientConfig.baseUrl()), null, clientConfig);
8392
}
8493

8594
public AppiumCommandExecutor(Map<String, CommandInfo> additionalCommands,

src/main/java/io/appium/java_client/safari/SafariDriver.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.openqa.selenium.Capabilities;
2424
import org.openqa.selenium.Platform;
2525
import org.openqa.selenium.remote.HttpCommandExecutor;
26+
import org.openqa.selenium.remote.http.ClientConfig;
2627
import org.openqa.selenium.remote.http.HttpClient;
2728

2829
import java.net.URL;
@@ -81,6 +82,30 @@ public SafariDriver(HttpClient.Factory httpClientFactory, Capabilities capabilit
8182
capabilities, PLATFORM_NAME, AUTOMATION_NAME));
8283
}
8384

85+
/**
86+
* Creates a new instance based on the given ClientConfig and {@code capabilities}.
87+
* The HTTP client is default client generated by {@link HttpCommandExecutor#getDefaultClientFactory}.
88+
* For example:
89+
*
90+
* <pre>
91+
*
92+
* ClientConfig clientConfig = ClientConfig.defaultConfig()
93+
* .baseUri(URI.create("WebDriver URL"))
94+
* .readTimeout(Duration.ofMinutes(5));
95+
* SafariOptions options = new SafariOptions();
96+
* SafariDriver driver = new SafariDriver(clientConfig, options);
97+
*
98+
* </pre>
99+
*
100+
* @param clientConfig take a look at {@link ClientConfig}
101+
* @param capabilities take a look at {@link Capabilities}
102+
*
103+
*/
104+
public SafariDriver(ClientConfig clientConfig, Capabilities capabilities) {
105+
super(clientConfig, ensurePlatformAndAutomationNames(
106+
capabilities, PLATFORM_NAME, AUTOMATION_NAME));
107+
}
108+
84109
public SafariDriver(Capabilities capabilities) {
85110
super(ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME));
86111
}

src/main/java/io/appium/java_client/windows/WindowsDriver.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import org.openqa.selenium.Capabilities;
2929
import org.openqa.selenium.Platform;
3030
import org.openqa.selenium.remote.HttpCommandExecutor;
31+
import org.openqa.selenium.remote.http.ClientConfig;
3132
import org.openqa.selenium.remote.http.HttpClient;
3233

3334
import java.net.URL;
@@ -79,6 +80,30 @@ public WindowsDriver(HttpClient.Factory httpClientFactory, Capabilities capabili
7980
capabilities, PLATFORM_NAME, AUTOMATION_NAME));
8081
}
8182

83+
/**
84+
* Creates a new instance based on the given ClientConfig and {@code capabilities}.
85+
* The HTTP client is default client generated by {@link HttpCommandExecutor#getDefaultClientFactory}.
86+
* For example:
87+
*
88+
* <pre>
89+
*
90+
* ClientConfig clientConfig = ClientConfig.defaultConfig()
91+
* .baseUri(URI.create("WebDriver URL"))
92+
* .readTimeout(Duration.ofMinutes(5));
93+
* WindowsOptions options = new WindowsOptions();
94+
* WindowsDriver driver = new WindowsDriver(clientConfig, options);
95+
*
96+
* </pre>
97+
*
98+
* @param clientConfig take a look at {@link ClientConfig}
99+
* @param capabilities take a look at {@link Capabilities}
100+
*
101+
*/
102+
public WindowsDriver(ClientConfig clientConfig, Capabilities capabilities) {
103+
super(clientConfig, ensurePlatformAndAutomationNames(
104+
capabilities, PLATFORM_NAME, AUTOMATION_NAME));
105+
}
106+
82107
public WindowsDriver(Capabilities capabilities) {
83108
super(ensurePlatformAndAutomationNames(capabilities, PLATFORM_NAME, AUTOMATION_NAME));
84109
}

0 commit comments

Comments
 (0)