From a7d453e76f4b02e33f75643d818382191326240f Mon Sep 17 00:00:00 2001 From: Mykola Mokhnach Date: Thu, 19 Mar 2020 15:18:51 +0100 Subject: [PATCH 1/4] feat: Make settings available for all AppiumDriver instances --- .../io/appium/java_client/AppiumDriver.java | 2 +- .../io/appium/java_client/HasSettings.java | 19 ++++----- .../android/HasAndroidSettings.java | 39 +++++++------------ .../java_client/ios/HasIOSSettings.java | 27 +++++-------- 4 files changed, 33 insertions(+), 54 deletions(-) diff --git a/src/main/java/io/appium/java_client/AppiumDriver.java b/src/main/java/io/appium/java_client/AppiumDriver.java index 398779025..049171912 100644 --- a/src/main/java/io/appium/java_client/AppiumDriver.java +++ b/src/main/java/io/appium/java_client/AppiumDriver.java @@ -68,7 +68,7 @@ @SuppressWarnings("unchecked") public class AppiumDriver extends DefaultGenericMobileDriver implements ComparesImages, FindsByImage, FindsByCustom, - ExecutesDriverScript, LogsEvents { + ExecutesDriverScript, LogsEvents, HasSettings { private static final ErrorHandler errorHandler = new ErrorHandler(new ErrorCodesMobile(), true); // frequently used command parameters diff --git a/src/main/java/io/appium/java_client/HasSettings.java b/src/main/java/io/appium/java_client/HasSettings.java index 2db441b57..36de226b5 100644 --- a/src/main/java/io/appium/java_client/HasSettings.java +++ b/src/main/java/io/appium/java_client/HasSettings.java @@ -19,13 +19,10 @@ import static io.appium.java_client.MobileCommand.getSettingsCommand; import static io.appium.java_client.MobileCommand.setSettingsCommand; -import com.google.common.collect.ImmutableMap; - import org.openqa.selenium.remote.Response; import java.util.Map; - public interface HasSettings extends ExecutesMethod { /** @@ -34,10 +31,12 @@ public interface HasSettings extends ExecutesMethod { * the method for the specific setting you want to change. * * @param setting Setting you wish to set. - * @param value value of the setting. + * @param value Value of the setting. + * @return Self instance for chaining. */ - default void setSetting(Setting setting, Object value) { + default HasSettings setSetting(Setting setting, Object value) { CommandExecutionHelper.execute(this, setSettingsCommand(setting.toString(), value)); + return this; } /** @@ -45,11 +44,13 @@ default void setSetting(Setting setting, Object value) { * convenience function, rather than use this function directly. Try finding * the method for the specific setting you want to change. * - * @param setting Setting you wish to set. - * @param value value of the setting. + * @param settingName Setting name you wish to set. + * @param value Value of the setting. + * @return Self instance for chaining. */ - default void setSetting(String setting, Object value) { - CommandExecutionHelper.execute(this, setSettingsCommand(setting, value)); + default HasSettings setSetting(String settingName, Object value) { + CommandExecutionHelper.execute(this, setSettingsCommand(settingName, value)); + return this; } /** diff --git a/src/main/java/io/appium/java_client/android/HasAndroidSettings.java b/src/main/java/io/appium/java_client/android/HasAndroidSettings.java index 977377b42..a2e8a9070 100644 --- a/src/main/java/io/appium/java_client/android/HasAndroidSettings.java +++ b/src/main/java/io/appium/java_client/android/HasAndroidSettings.java @@ -33,8 +33,7 @@ interface HasAndroidSettings extends HasSettings { * @return self instance for chaining */ default HasAndroidSettings ignoreUnimportantViews(Boolean compress) { - setSetting(Setting.IGNORE_UNIMPORTANT_VIEWS, compress); - return this; + return (HasAndroidSettings) setSetting(Setting.IGNORE_UNIMPORTANT_VIEWS, compress); } /** @@ -45,8 +44,7 @@ default HasAndroidSettings ignoreUnimportantViews(Boolean compress) { * @return self instance for chaining */ default HasAndroidSettings configuratorSetWaitForIdleTimeout(Duration timeout) { - setSetting(Setting.WAIT_FOR_IDLE_TIMEOUT, timeout.toMillis()); - return this; + return (HasAndroidSettings) setSetting(Setting.WAIT_FOR_IDLE_TIMEOUT, timeout.toMillis()); } /** @@ -57,8 +55,7 @@ default HasAndroidSettings configuratorSetWaitForIdleTimeout(Duration timeout) { * @return self instance for chaining */ default HasAndroidSettings configuratorSetWaitForSelectorTimeout(Duration timeout) { - setSetting(Setting.WAIT_FOR_SELECTOR_TIMEOUT, timeout.toMillis()); - return this; + return (HasAndroidSettings) setSetting(Setting.WAIT_FOR_SELECTOR_TIMEOUT, timeout.toMillis()); } /** @@ -69,8 +66,7 @@ default HasAndroidSettings configuratorSetWaitForSelectorTimeout(Duration timeou * @return self instance for chaining */ default HasAndroidSettings configuratorSetScrollAcknowledgmentTimeout(Duration timeout) { - setSetting(Setting.WAIT_SCROLL_ACKNOWLEDGMENT_TIMEOUT, timeout.toMillis()); - return this; + return (HasAndroidSettings) setSetting(Setting.WAIT_SCROLL_ACKNOWLEDGMENT_TIMEOUT, timeout.toMillis()); } /** @@ -81,8 +77,7 @@ default HasAndroidSettings configuratorSetScrollAcknowledgmentTimeout(Duration t * @return self instance for chaining */ default HasAndroidSettings configuratorSetKeyInjectionDelay(Duration delay) { - setSetting(Setting.KEY_INJECTION_DELAY, delay.toMillis()); - return this; + return (HasAndroidSettings) setSetting(Setting.KEY_INJECTION_DELAY, delay.toMillis()); } /** @@ -93,8 +88,7 @@ default HasAndroidSettings configuratorSetKeyInjectionDelay(Duration delay) { * @return self instance for chaining */ default HasAndroidSettings configuratorSetActionAcknowledgmentTimeout(Duration timeout) { - setSetting(Setting.WAIT_ACTION_ACKNOWLEDGMENT_TIMEOUT, timeout.toMillis()); - return this; + return (HasAndroidSettings) setSetting(Setting.WAIT_ACTION_ACKNOWLEDGMENT_TIMEOUT, timeout.toMillis()); } /** @@ -111,8 +105,7 @@ default HasAndroidSettings configuratorSetActionAcknowledgmentTimeout(Duration t * @return self instance for chaining */ default HasAndroidSettings normalizeTagNames(boolean enabled) { - setSetting(Setting.NORMALIZE_TAG_NAMES, enabled); - return this; + return (HasAndroidSettings) setSetting(Setting.NORMALIZE_TAG_NAMES, enabled); } /** @@ -124,8 +117,7 @@ default HasAndroidSettings normalizeTagNames(boolean enabled) { * @return self instance for chaining */ default HasAndroidSettings setShouldUseCompactResponses(boolean enabled) { - setSetting(Setting.SHOULD_USE_COMPACT_RESPONSES, enabled); - return this; + return (HasAndroidSettings) setSetting(Setting.SHOULD_USE_COMPACT_RESPONSES, enabled); } /** @@ -136,8 +128,7 @@ default HasAndroidSettings setShouldUseCompactResponses(boolean enabled) { * @return self instance for chaining */ default HasAndroidSettings setElementResponseAttributes(String attrNames) { - setSetting(Setting.ELEMENT_RESPONSE_ATTRIBUTES, attrNames); - return this; + return (HasAndroidSettings) setSetting(Setting.ELEMENT_RESPONSE_ATTRIBUTES, attrNames); } /** @@ -148,8 +139,7 @@ default HasAndroidSettings setElementResponseAttributes(String attrNames) { * @return self instance for chaining */ default HasAndroidSettings allowInvisibleElements(boolean enabled) { - setSetting(Setting.ALLOW_INVISIBLE_ELEMENTS, enabled); - return this; + return (HasAndroidSettings) setSetting(Setting.ALLOW_INVISIBLE_ELEMENTS, enabled); } /** @@ -162,8 +152,7 @@ default HasAndroidSettings allowInvisibleElements(boolean enabled) { * @return self instance for chaining */ default HasAndroidSettings enableNotificationListener(boolean enabled) { - setSetting(Setting.ENABLE_NOTIFICATION_LISTENER, enabled); - return this; + return (HasAndroidSettings) setSetting(Setting.ENABLE_NOTIFICATION_LISTENER, enabled); } /** @@ -174,8 +163,7 @@ default HasAndroidSettings enableNotificationListener(boolean enabled) { * @return self instance for chaining */ default HasAndroidSettings shutdownOnPowerDisconnect(boolean enabled) { - setSetting(Setting.SHUTDOWN_ON_POWER_DISCONNECT, enabled); - return this; + return (HasAndroidSettings) setSetting(Setting.SHUTDOWN_ON_POWER_DISCONNECT, enabled); } /** @@ -188,7 +176,6 @@ default HasAndroidSettings shutdownOnPowerDisconnect(boolean enabled) { * @return self instance for chaining */ default HasAndroidSettings setTrackScrollEvents(boolean enabled) { - setSetting(Setting.TRACK_SCROLL_EVENTS, enabled); - return this; + return (HasAndroidSettings) setSetting(Setting.TRACK_SCROLL_EVENTS, enabled); } } diff --git a/src/main/java/io/appium/java_client/ios/HasIOSSettings.java b/src/main/java/io/appium/java_client/ios/HasIOSSettings.java index 1eda46aa4..83a994a43 100644 --- a/src/main/java/io/appium/java_client/ios/HasIOSSettings.java +++ b/src/main/java/io/appium/java_client/ios/HasIOSSettings.java @@ -28,8 +28,7 @@ interface HasIOSSettings extends HasSettings { * @return self instance for chaining */ default HasIOSSettings nativeWebTap(Boolean enabled) { - setSetting(Setting.NATIVE_WEB_TAP, enabled); - return this; + return (HasIOSSettings) setSetting(Setting.NATIVE_WEB_TAP, enabled); } /** @@ -41,8 +40,7 @@ default HasIOSSettings nativeWebTap(Boolean enabled) { * @return self instance for chaining */ default HasIOSSettings setShouldUseCompactResponses(boolean enabled) { - setSetting(Setting.SHOULD_USE_COMPACT_RESPONSES, enabled); - return this; + return (HasIOSSettings) setSetting(Setting.SHOULD_USE_COMPACT_RESPONSES, enabled); } /** @@ -53,8 +51,7 @@ default HasIOSSettings setShouldUseCompactResponses(boolean enabled) { * @return self instance for chaining */ default HasIOSSettings setElementResponseAttributes(String attrNames) { - setSetting(Setting.ELEMENT_RESPONSE_ATTRIBUTES, attrNames); - return this; + return (HasIOSSettings) setSetting(Setting.ELEMENT_RESPONSE_ATTRIBUTES, attrNames); } /** @@ -66,8 +63,7 @@ default HasIOSSettings setElementResponseAttributes(String attrNames) { * @return self instance for chaining */ default HasIOSSettings setMjpegServerScreenshotQuality(int quality) { - setSetting(Setting.MJPEG_SERVER_SCREENSHOT_QUALITY, quality); - return this; + return (HasIOSSettings) setSetting(Setting.MJPEG_SERVER_SCREENSHOT_QUALITY, quality); } /** @@ -79,8 +75,7 @@ default HasIOSSettings setMjpegServerScreenshotQuality(int quality) { * @return self instance for chaining */ default HasIOSSettings setMjpegServerFramerate(int framerate) { - setSetting(Setting.MJPEG_SERVER_FRAMERATE, framerate); - return this; + return (HasIOSSettings) setSetting(Setting.MJPEG_SERVER_FRAMERATE, framerate); } /** @@ -92,8 +87,7 @@ default HasIOSSettings setMjpegServerFramerate(int framerate) { * @return self instance for chaining */ default HasIOSSettings setScreenshotQuality(int quality) { - setSetting(Setting.SCREENSHOT_QUALITY, quality); - return this; + return (HasIOSSettings) setSetting(Setting.SCREENSHOT_QUALITY, quality); } /** @@ -104,8 +98,7 @@ default HasIOSSettings setScreenshotQuality(int quality) { * @return self instance for chaining */ default HasIOSSettings setMjpegScalingFactor(int scale) { - setSetting(Setting.MJPEG_SCALING_FACTOR, scale); - return this; + return (HasIOSSettings) setSetting(Setting.MJPEG_SCALING_FACTOR, scale); } /** @@ -115,8 +108,7 @@ default HasIOSSettings setMjpegScalingFactor(int scale) { * @return self instance for chaining */ default HasIOSSettings setKeyboardAutocorrection(boolean enabled) { - setSetting(Setting.KEYBOARD_AUTOCORRECTION, enabled); - return this; + return (HasIOSSettings) setSetting(Setting.KEYBOARD_AUTOCORRECTION, enabled); } /** @@ -126,7 +118,6 @@ default HasIOSSettings setKeyboardAutocorrection(boolean enabled) { * @return self instance for chaining */ default HasIOSSettings setKeyboardPrediction(boolean enabled) { - setSetting(Setting.KEYBOARD_PREDICTION, enabled); - return this; + return (HasIOSSettings) setSetting(Setting.KEYBOARD_PREDICTION, enabled); } } From 977f4d3c90c196d9a2d664cf5f69162020967778 Mon Sep 17 00:00:00 2001 From: Mykola Mokhnach Date: Thu, 19 Mar 2020 15:21:35 +0100 Subject: [PATCH 2/4] fix indent --- .../java/io/appium/java_client/android/HasAndroidSettings.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/appium/java_client/android/HasAndroidSettings.java b/src/main/java/io/appium/java_client/android/HasAndroidSettings.java index a2e8a9070..0c0e44f34 100644 --- a/src/main/java/io/appium/java_client/android/HasAndroidSettings.java +++ b/src/main/java/io/appium/java_client/android/HasAndroidSettings.java @@ -88,7 +88,7 @@ default HasAndroidSettings configuratorSetKeyInjectionDelay(Duration delay) { * @return self instance for chaining */ default HasAndroidSettings configuratorSetActionAcknowledgmentTimeout(Duration timeout) { - return (HasAndroidSettings) setSetting(Setting.WAIT_ACTION_ACKNOWLEDGMENT_TIMEOUT, timeout.toMillis()); + return (HasAndroidSettings) setSetting(Setting.WAIT_ACTION_ACKNOWLEDGMENT_TIMEOUT, timeout.toMillis()); } /** From 6db811c52421d00fb02d8dd6c96dd18351aaa354 Mon Sep 17 00:00:00 2001 From: Mykola Mokhnach Date: Thu, 19 Mar 2020 15:29:38 +0100 Subject: [PATCH 3/4] Simplify the call --- src/main/java/io/appium/java_client/HasSettings.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/io/appium/java_client/HasSettings.java b/src/main/java/io/appium/java_client/HasSettings.java index 36de226b5..2d6045846 100644 --- a/src/main/java/io/appium/java_client/HasSettings.java +++ b/src/main/java/io/appium/java_client/HasSettings.java @@ -35,8 +35,7 @@ public interface HasSettings extends ExecutesMethod { * @return Self instance for chaining. */ default HasSettings setSetting(Setting setting, Object value) { - CommandExecutionHelper.execute(this, setSettingsCommand(setting.toString(), value)); - return this; + return setSetting(setting.toString(), value); } /** From 3ecec965756ecf29b6fc0b18e78b729fba11709d Mon Sep 17 00:00:00 2001 From: Mykola Mokhnach Date: Thu, 19 Mar 2020 17:25:48 +0100 Subject: [PATCH 4/4] tune the tests --- src/test/java/io/appium/java_client/ios/IOSAlertTest.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/test/java/io/appium/java_client/ios/IOSAlertTest.java b/src/test/java/io/appium/java_client/ios/IOSAlertTest.java index cb810e4d0..e5a5033bb 100644 --- a/src/test/java/io/appium/java_client/ios/IOSAlertTest.java +++ b/src/test/java/io/appium/java_client/ios/IOSAlertTest.java @@ -38,7 +38,7 @@ public class IOSAlertTest extends AppIOSTest { private static final long ALERT_TIMEOUT_SECONDS = 5; private static final int CLICK_RETRIES = 2; - private WebDriverWait waiting = new WebDriverWait(driver, ALERT_TIMEOUT_SECONDS); + private final WebDriverWait waiter = new WebDriverWait(driver, ALERT_TIMEOUT_SECONDS); private static final String iOSAutomationText = "show alert"; private void ensureAlertPresence() { @@ -47,7 +47,11 @@ private void ensureAlertPresence() { while (true) { try { driver.findElement(MobileBy.AccessibilityId(iOSAutomationText)).click(); - waiting.until(alertIsPresent()); + } catch (WebDriverException e) { + // ignore + } + try { + waiter.until(alertIsPresent()); return; } catch (TimeoutException e) { retry++;