From cb178f6f307a85e343fc4c8190fb3f0bfdfaf84d Mon Sep 17 00:00:00 2001 From: Valery Yatsynovich Date: Mon, 9 Nov 2020 19:08:04 +0300 Subject: [PATCH] feat: Add ability to set multiple settings --- .../io/appium/java_client/HasSettings.java | 28 +++++++++++++++++++ .../io/appium/java_client/MobileCommand.java | 7 +++-- .../java_client/android/SettingTest.java | 21 ++++++++++++++ .../appium/java_client/ios/SettingTest.java | 27 +++++++++++++++--- 4 files changed, 77 insertions(+), 6 deletions(-) diff --git a/src/main/java/io/appium/java_client/HasSettings.java b/src/main/java/io/appium/java_client/HasSettings.java index 2d6045846..8210123a7 100644 --- a/src/main/java/io/appium/java_client/HasSettings.java +++ b/src/main/java/io/appium/java_client/HasSettings.java @@ -21,7 +21,10 @@ import org.openqa.selenium.remote.Response; +import java.util.EnumMap; import java.util.Map; +import java.util.Map.Entry; +import java.util.stream.Collectors; public interface HasSettings extends ExecutesMethod { @@ -52,6 +55,31 @@ default HasSettings setSetting(String settingName, Object value) { return this; } + /** + * Sets settings for this test session. + * + * @param settings a map with settings, where key is the setting name you wish to set and value is the value of + * the setting. + * @return Self instance for chaining. + */ + default HasSettings setSettings(EnumMap settings) { + Map convertedSettings = settings.entrySet().stream() + .collect(Collectors.toMap(e -> e.getKey().toString(), Entry::getValue)); + return setSettings(convertedSettings); + } + + /** + * Sets settings for this test session. + * + * @param settings a map with settings, where key is the setting name you wish to set and value is the value of + * the setting. + * @return Self instance for chaining. + */ + default HasSettings setSettings(Map settings) { + CommandExecutionHelper.execute(this, setSettingsCommand(settings)); + return this; + } + /** * Get settings stored for this test session It's probably better to use a * convenience function, rather than use this function directly. Try finding diff --git a/src/main/java/io/appium/java_client/MobileCommand.java b/src/main/java/io/appium/java_client/MobileCommand.java index df50c962f..f601aaab7 100644 --- a/src/main/java/io/appium/java_client/MobileCommand.java +++ b/src/main/java/io/appium/java_client/MobileCommand.java @@ -481,8 +481,11 @@ public static ImmutableMap prepareArguments(String[] params, } public static Map.Entry> setSettingsCommand(String setting, Object value) { - return new AbstractMap.SimpleEntry<>(SET_SETTINGS, prepareArguments("settings", - prepareArguments(setting, value))); + return setSettingsCommand(prepareArguments(setting, value)); + } + + public static Map.Entry> setSettingsCommand(Map settings) { + return new AbstractMap.SimpleEntry<>(SET_SETTINGS, prepareArguments("settings", settings)); } /** diff --git a/src/test/java/io/appium/java_client/android/SettingTest.java b/src/test/java/io/appium/java_client/android/SettingTest.java index 559c1ba69..52963e566 100644 --- a/src/test/java/io/appium/java_client/android/SettingTest.java +++ b/src/test/java/io/appium/java_client/android/SettingTest.java @@ -4,6 +4,9 @@ import org.junit.Test; import java.time.Duration; +import java.util.EnumMap; +import java.util.HashMap; +import java.util.Map; import static org.junit.Assert.assertEquals; @@ -103,6 +106,24 @@ public class SettingTest extends BaseAndroidTest { .get("shouldUseCompactResponses")); } + @Test public void setMultipleSettings() { + EnumMap enumSettings = new EnumMap<>(Setting.class); + enumSettings.put(Setting.IGNORE_UNIMPORTANT_VIEWS, true); + enumSettings.put(Setting.ELEMENT_RESPONSE_ATTRIBUTES, "type,label"); + driver.setSettings(enumSettings); + Map actual = driver.getSettings(); + assertEquals(true, actual.get(Setting.IGNORE_UNIMPORTANT_VIEWS.toString())); + assertEquals("type,label", actual.get(Setting.ELEMENT_RESPONSE_ATTRIBUTES.toString())); + + Map mapSettings = new HashMap<>(); + mapSettings.put(Setting.IGNORE_UNIMPORTANT_VIEWS.toString(), false); + mapSettings.put(Setting.ELEMENT_RESPONSE_ATTRIBUTES.toString(), ""); + driver.setSettings(mapSettings); + actual = driver.getSettings(); + assertEquals(false, actual.get(Setting.IGNORE_UNIMPORTANT_VIEWS.toString())); + assertEquals("", actual.get(Setting.ELEMENT_RESPONSE_ATTRIBUTES.toString())); + } + private void assertJSONElementContains(Setting setting, long value) { assertEquals(driver.getSettings().get(setting.toString()), value); } diff --git a/src/test/java/io/appium/java_client/ios/SettingTest.java b/src/test/java/io/appium/java_client/ios/SettingTest.java index d48d2c64d..9d0fbcf80 100644 --- a/src/test/java/io/appium/java_client/ios/SettingTest.java +++ b/src/test/java/io/appium/java_client/ios/SettingTest.java @@ -22,6 +22,9 @@ import static org.junit.Assert.assertEquals; +import java.util.EnumMap; +import java.util.HashMap; +import java.util.Map; public class SettingTest extends AppIOSTest { @@ -34,10 +37,10 @@ public class SettingTest extends AppIOSTest { } @Test public void testSetElementResponseAttributes() { - assertEquals("type,label", driver.getSettings() + assertEquals("", driver.getSettings() .get(Setting.ELEMENT_RESPONSE_ATTRIBUTES.toString())); - driver.setElementResponseAttributes("name"); - assertEquals("name", driver.getSettings() + driver.setElementResponseAttributes("type,label"); + assertEquals("type,label", driver.getSettings() .get(Setting.ELEMENT_RESPONSE_ATTRIBUTES.toString())); } @@ -94,5 +97,21 @@ public class SettingTest extends AppIOSTest { .get("shouldUseCompactResponses")); } - + @Test public void setMultipleSettings() { + EnumMap enumSettings = new EnumMap<>(Setting.class); + enumSettings.put(Setting.IGNORE_UNIMPORTANT_VIEWS, true); + enumSettings.put(Setting.ELEMENT_RESPONSE_ATTRIBUTES, "type,label"); + driver.setSettings(enumSettings); + Map actual = driver.getSettings(); + assertEquals(true, actual.get(Setting.IGNORE_UNIMPORTANT_VIEWS.toString())); + assertEquals("type,label", actual.get(Setting.ELEMENT_RESPONSE_ATTRIBUTES.toString())); + + Map mapSettings = new HashMap<>(); + mapSettings.put(Setting.IGNORE_UNIMPORTANT_VIEWS.toString(), false); + mapSettings.put(Setting.ELEMENT_RESPONSE_ATTRIBUTES.toString(), ""); + driver.setSettings(mapSettings); + actual = driver.getSettings(); + assertEquals(false, actual.get(Setting.IGNORE_UNIMPORTANT_VIEWS.toString())); + assertEquals("", actual.get(Setting.ELEMENT_RESPONSE_ATTRIBUTES.toString())); + } }