Skip to content

Commit c7cf1b1

Browse files
feat: Make settings available for all AppiumDriver instances (#1318)
* feat: Make settings available for all AppiumDriver instances * fix indent * Simplify the call * tune the tests
1 parent 820dbb7 commit c7cf1b1

File tree

5 files changed

+39
-57
lines changed

5 files changed

+39
-57
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@
6868
@SuppressWarnings("unchecked")
6969
public class AppiumDriver<T extends WebElement>
7070
extends DefaultGenericMobileDriver<T> implements ComparesImages, FindsByImage<T>, FindsByCustom<T>,
71-
ExecutesDriverScript, LogsEvents {
71+
ExecutesDriverScript, LogsEvents, HasSettings {
7272

7373
private static final ErrorHandler errorHandler = new ErrorHandler(new ErrorCodesMobile(), true);
7474
// frequently used command parameters

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

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,10 @@
1919
import static io.appium.java_client.MobileCommand.getSettingsCommand;
2020
import static io.appium.java_client.MobileCommand.setSettingsCommand;
2121

22-
import com.google.common.collect.ImmutableMap;
23-
2422
import org.openqa.selenium.remote.Response;
2523

2624
import java.util.Map;
2725

28-
2926
public interface HasSettings extends ExecutesMethod {
3027

3128
/**
@@ -34,22 +31,25 @@ public interface HasSettings extends ExecutesMethod {
3431
* the method for the specific setting you want to change.
3532
*
3633
* @param setting Setting you wish to set.
37-
* @param value value of the setting.
34+
* @param value Value of the setting.
35+
* @return Self instance for chaining.
3836
*/
39-
default void setSetting(Setting setting, Object value) {
40-
CommandExecutionHelper.execute(this, setSettingsCommand(setting.toString(), value));
37+
default HasSettings setSetting(Setting setting, Object value) {
38+
return setSetting(setting.toString(), value);
4139
}
4240

4341
/**
4442
* Set a setting for this test session It's probably better to use a
4543
* convenience function, rather than use this function directly. Try finding
4644
* the method for the specific setting you want to change.
4745
*
48-
* @param setting Setting you wish to set.
49-
* @param value value of the setting.
46+
* @param settingName Setting name you wish to set.
47+
* @param value Value of the setting.
48+
* @return Self instance for chaining.
5049
*/
51-
default void setSetting(String setting, Object value) {
52-
CommandExecutionHelper.execute(this, setSettingsCommand(setting, value));
50+
default HasSettings setSetting(String settingName, Object value) {
51+
CommandExecutionHelper.execute(this, setSettingsCommand(settingName, value));
52+
return this;
5353
}
5454

5555
/**

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

Lines changed: 13 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,7 @@ interface HasAndroidSettings extends HasSettings {
3333
* @return self instance for chaining
3434
*/
3535
default HasAndroidSettings ignoreUnimportantViews(Boolean compress) {
36-
setSetting(Setting.IGNORE_UNIMPORTANT_VIEWS, compress);
37-
return this;
36+
return (HasAndroidSettings) setSetting(Setting.IGNORE_UNIMPORTANT_VIEWS, compress);
3837
}
3938

4039
/**
@@ -45,8 +44,7 @@ default HasAndroidSettings ignoreUnimportantViews(Boolean compress) {
4544
* @return self instance for chaining
4645
*/
4746
default HasAndroidSettings configuratorSetWaitForIdleTimeout(Duration timeout) {
48-
setSetting(Setting.WAIT_FOR_IDLE_TIMEOUT, timeout.toMillis());
49-
return this;
47+
return (HasAndroidSettings) setSetting(Setting.WAIT_FOR_IDLE_TIMEOUT, timeout.toMillis());
5048
}
5149

5250
/**
@@ -57,8 +55,7 @@ default HasAndroidSettings configuratorSetWaitForIdleTimeout(Duration timeout) {
5755
* @return self instance for chaining
5856
*/
5957
default HasAndroidSettings configuratorSetWaitForSelectorTimeout(Duration timeout) {
60-
setSetting(Setting.WAIT_FOR_SELECTOR_TIMEOUT, timeout.toMillis());
61-
return this;
58+
return (HasAndroidSettings) setSetting(Setting.WAIT_FOR_SELECTOR_TIMEOUT, timeout.toMillis());
6259
}
6360

6461
/**
@@ -69,8 +66,7 @@ default HasAndroidSettings configuratorSetWaitForSelectorTimeout(Duration timeou
6966
* @return self instance for chaining
7067
*/
7168
default HasAndroidSettings configuratorSetScrollAcknowledgmentTimeout(Duration timeout) {
72-
setSetting(Setting.WAIT_SCROLL_ACKNOWLEDGMENT_TIMEOUT, timeout.toMillis());
73-
return this;
69+
return (HasAndroidSettings) setSetting(Setting.WAIT_SCROLL_ACKNOWLEDGMENT_TIMEOUT, timeout.toMillis());
7470
}
7571

7672
/**
@@ -81,8 +77,7 @@ default HasAndroidSettings configuratorSetScrollAcknowledgmentTimeout(Duration t
8177
* @return self instance for chaining
8278
*/
8379
default HasAndroidSettings configuratorSetKeyInjectionDelay(Duration delay) {
84-
setSetting(Setting.KEY_INJECTION_DELAY, delay.toMillis());
85-
return this;
80+
return (HasAndroidSettings) setSetting(Setting.KEY_INJECTION_DELAY, delay.toMillis());
8681
}
8782

8883
/**
@@ -93,8 +88,7 @@ default HasAndroidSettings configuratorSetKeyInjectionDelay(Duration delay) {
9388
* @return self instance for chaining
9489
*/
9590
default HasAndroidSettings configuratorSetActionAcknowledgmentTimeout(Duration timeout) {
96-
setSetting(Setting.WAIT_ACTION_ACKNOWLEDGMENT_TIMEOUT, timeout.toMillis());
97-
return this;
91+
return (HasAndroidSettings) setSetting(Setting.WAIT_ACTION_ACKNOWLEDGMENT_TIMEOUT, timeout.toMillis());
9892
}
9993

10094
/**
@@ -111,8 +105,7 @@ default HasAndroidSettings configuratorSetActionAcknowledgmentTimeout(Duration t
111105
* @return self instance for chaining
112106
*/
113107
default HasAndroidSettings normalizeTagNames(boolean enabled) {
114-
setSetting(Setting.NORMALIZE_TAG_NAMES, enabled);
115-
return this;
108+
return (HasAndroidSettings) setSetting(Setting.NORMALIZE_TAG_NAMES, enabled);
116109
}
117110

118111
/**
@@ -124,8 +117,7 @@ default HasAndroidSettings normalizeTagNames(boolean enabled) {
124117
* @return self instance for chaining
125118
*/
126119
default HasAndroidSettings setShouldUseCompactResponses(boolean enabled) {
127-
setSetting(Setting.SHOULD_USE_COMPACT_RESPONSES, enabled);
128-
return this;
120+
return (HasAndroidSettings) setSetting(Setting.SHOULD_USE_COMPACT_RESPONSES, enabled);
129121
}
130122

131123
/**
@@ -136,8 +128,7 @@ default HasAndroidSettings setShouldUseCompactResponses(boolean enabled) {
136128
* @return self instance for chaining
137129
*/
138130
default HasAndroidSettings setElementResponseAttributes(String attrNames) {
139-
setSetting(Setting.ELEMENT_RESPONSE_ATTRIBUTES, attrNames);
140-
return this;
131+
return (HasAndroidSettings) setSetting(Setting.ELEMENT_RESPONSE_ATTRIBUTES, attrNames);
141132
}
142133

143134
/**
@@ -148,8 +139,7 @@ default HasAndroidSettings setElementResponseAttributes(String attrNames) {
148139
* @return self instance for chaining
149140
*/
150141
default HasAndroidSettings allowInvisibleElements(boolean enabled) {
151-
setSetting(Setting.ALLOW_INVISIBLE_ELEMENTS, enabled);
152-
return this;
142+
return (HasAndroidSettings) setSetting(Setting.ALLOW_INVISIBLE_ELEMENTS, enabled);
153143
}
154144

155145
/**
@@ -162,8 +152,7 @@ default HasAndroidSettings allowInvisibleElements(boolean enabled) {
162152
* @return self instance for chaining
163153
*/
164154
default HasAndroidSettings enableNotificationListener(boolean enabled) {
165-
setSetting(Setting.ENABLE_NOTIFICATION_LISTENER, enabled);
166-
return this;
155+
return (HasAndroidSettings) setSetting(Setting.ENABLE_NOTIFICATION_LISTENER, enabled);
167156
}
168157

169158
/**
@@ -174,8 +163,7 @@ default HasAndroidSettings enableNotificationListener(boolean enabled) {
174163
* @return self instance for chaining
175164
*/
176165
default HasAndroidSettings shutdownOnPowerDisconnect(boolean enabled) {
177-
setSetting(Setting.SHUTDOWN_ON_POWER_DISCONNECT, enabled);
178-
return this;
166+
return (HasAndroidSettings) setSetting(Setting.SHUTDOWN_ON_POWER_DISCONNECT, enabled);
179167
}
180168

181169
/**
@@ -188,7 +176,6 @@ default HasAndroidSettings shutdownOnPowerDisconnect(boolean enabled) {
188176
* @return self instance for chaining
189177
*/
190178
default HasAndroidSettings setTrackScrollEvents(boolean enabled) {
191-
setSetting(Setting.TRACK_SCROLL_EVENTS, enabled);
192-
return this;
179+
return (HasAndroidSettings) setSetting(Setting.TRACK_SCROLL_EVENTS, enabled);
193180
}
194181
}

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

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,7 @@ interface HasIOSSettings extends HasSettings {
2828
* @return self instance for chaining
2929
*/
3030
default HasIOSSettings nativeWebTap(Boolean enabled) {
31-
setSetting(Setting.NATIVE_WEB_TAP, enabled);
32-
return this;
31+
return (HasIOSSettings) setSetting(Setting.NATIVE_WEB_TAP, enabled);
3332
}
3433

3534
/**
@@ -41,8 +40,7 @@ default HasIOSSettings nativeWebTap(Boolean enabled) {
4140
* @return self instance for chaining
4241
*/
4342
default HasIOSSettings setShouldUseCompactResponses(boolean enabled) {
44-
setSetting(Setting.SHOULD_USE_COMPACT_RESPONSES, enabled);
45-
return this;
43+
return (HasIOSSettings) setSetting(Setting.SHOULD_USE_COMPACT_RESPONSES, enabled);
4644
}
4745

4846
/**
@@ -53,8 +51,7 @@ default HasIOSSettings setShouldUseCompactResponses(boolean enabled) {
5351
* @return self instance for chaining
5452
*/
5553
default HasIOSSettings setElementResponseAttributes(String attrNames) {
56-
setSetting(Setting.ELEMENT_RESPONSE_ATTRIBUTES, attrNames);
57-
return this;
54+
return (HasIOSSettings) setSetting(Setting.ELEMENT_RESPONSE_ATTRIBUTES, attrNames);
5855
}
5956

6057
/**
@@ -66,8 +63,7 @@ default HasIOSSettings setElementResponseAttributes(String attrNames) {
6663
* @return self instance for chaining
6764
*/
6865
default HasIOSSettings setMjpegServerScreenshotQuality(int quality) {
69-
setSetting(Setting.MJPEG_SERVER_SCREENSHOT_QUALITY, quality);
70-
return this;
66+
return (HasIOSSettings) setSetting(Setting.MJPEG_SERVER_SCREENSHOT_QUALITY, quality);
7167
}
7268

7369
/**
@@ -79,8 +75,7 @@ default HasIOSSettings setMjpegServerScreenshotQuality(int quality) {
7975
* @return self instance for chaining
8076
*/
8177
default HasIOSSettings setMjpegServerFramerate(int framerate) {
82-
setSetting(Setting.MJPEG_SERVER_FRAMERATE, framerate);
83-
return this;
78+
return (HasIOSSettings) setSetting(Setting.MJPEG_SERVER_FRAMERATE, framerate);
8479
}
8580

8681
/**
@@ -92,8 +87,7 @@ default HasIOSSettings setMjpegServerFramerate(int framerate) {
9287
* @return self instance for chaining
9388
*/
9489
default HasIOSSettings setScreenshotQuality(int quality) {
95-
setSetting(Setting.SCREENSHOT_QUALITY, quality);
96-
return this;
90+
return (HasIOSSettings) setSetting(Setting.SCREENSHOT_QUALITY, quality);
9791
}
9892

9993
/**
@@ -104,8 +98,7 @@ default HasIOSSettings setScreenshotQuality(int quality) {
10498
* @return self instance for chaining
10599
*/
106100
default HasIOSSettings setMjpegScalingFactor(int scale) {
107-
setSetting(Setting.MJPEG_SCALING_FACTOR, scale);
108-
return this;
101+
return (HasIOSSettings) setSetting(Setting.MJPEG_SCALING_FACTOR, scale);
109102
}
110103

111104
/**
@@ -115,8 +108,7 @@ default HasIOSSettings setMjpegScalingFactor(int scale) {
115108
* @return self instance for chaining
116109
*/
117110
default HasIOSSettings setKeyboardAutocorrection(boolean enabled) {
118-
setSetting(Setting.KEYBOARD_AUTOCORRECTION, enabled);
119-
return this;
111+
return (HasIOSSettings) setSetting(Setting.KEYBOARD_AUTOCORRECTION, enabled);
120112
}
121113

122114
/**
@@ -126,7 +118,6 @@ default HasIOSSettings setKeyboardAutocorrection(boolean enabled) {
126118
* @return self instance for chaining
127119
*/
128120
default HasIOSSettings setKeyboardPrediction(boolean enabled) {
129-
setSetting(Setting.KEYBOARD_PREDICTION, enabled);
130-
return this;
121+
return (HasIOSSettings) setSetting(Setting.KEYBOARD_PREDICTION, enabled);
131122
}
132123
}

src/test/java/io/appium/java_client/ios/IOSAlertTest.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public class IOSAlertTest extends AppIOSTest {
3838
private static final long ALERT_TIMEOUT_SECONDS = 5;
3939
private static final int CLICK_RETRIES = 2;
4040

41-
private WebDriverWait waiting = new WebDriverWait(driver, ALERT_TIMEOUT_SECONDS);
41+
private final WebDriverWait waiter = new WebDriverWait(driver, ALERT_TIMEOUT_SECONDS);
4242
private static final String iOSAutomationText = "show alert";
4343

4444
private void ensureAlertPresence() {
@@ -47,7 +47,11 @@ private void ensureAlertPresence() {
4747
while (true) {
4848
try {
4949
driver.findElement(MobileBy.AccessibilityId(iOSAutomationText)).click();
50-
waiting.until(alertIsPresent());
50+
} catch (WebDriverException e) {
51+
// ignore
52+
}
53+
try {
54+
waiter.until(alertIsPresent());
5155
return;
5256
} catch (TimeoutException e) {
5357
retry++;

0 commit comments

Comments
 (0)