Skip to content

Commit f5190d0

Browse files
committed
feat: Add ability to set multiple settings
1 parent 5999ceb commit f5190d0

File tree

4 files changed

+75
-3
lines changed

4 files changed

+75
-3
lines changed

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

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,10 @@
2121

2222
import org.openqa.selenium.remote.Response;
2323

24+
import java.util.EnumMap;
2425
import java.util.Map;
26+
import java.util.Map.Entry;
27+
import java.util.stream.Collectors;
2528

2629
public interface HasSettings extends ExecutesMethod {
2730

@@ -52,6 +55,32 @@ default HasSettings setSetting(String settingName, Object value) {
5255
return this;
5356
}
5457

58+
/**
59+
* Sets settings for this test session.
60+
*
61+
* @param settings a map with settings, where key is the setting name you wish to set and value is the value of
62+
* the setting.
63+
* @return Self instance for chaining.
64+
*/
65+
default HasSettings setSettings(EnumMap<Setting, Object> settings) {
66+
Map<String, Object> convertedSettings = settings.entrySet().stream()
67+
.collect(Collectors.toMap(e -> e.getKey().toString(), Entry::getValue));
68+
CommandExecutionHelper.execute(this, setSettingsCommand(convertedSettings));
69+
return this;
70+
}
71+
72+
/**
73+
* Sets settings for this test session.
74+
*
75+
* @param settings a map with settings, where key is the setting name you wish to set and value is the value of
76+
* the setting.
77+
* @return Self instance for chaining.
78+
*/
79+
default HasSettings setSettings(Map<String, Object> settings) {
80+
CommandExecutionHelper.execute(this, setSettingsCommand(settings));
81+
return this;
82+
}
83+
5584
/**
5685
* Get settings stored for this test session It's probably better to use a
5786
* convenience function, rather than use this function directly. Try finding

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -481,8 +481,11 @@ public static ImmutableMap<String, Object> prepareArguments(String[] params,
481481
}
482482

483483
public static Map.Entry<String, Map<String, ?>> setSettingsCommand(String setting, Object value) {
484-
return new AbstractMap.SimpleEntry<>(SET_SETTINGS, prepareArguments("settings",
485-
prepareArguments(setting, value)));
484+
return setSettingsCommand(prepareArguments(setting, value));
485+
}
486+
487+
public static Map.Entry<String, Map<String, ?>> setSettingsCommand(Map<String, Object> settings) {
488+
return new AbstractMap.SimpleEntry<>(SET_SETTINGS, prepareArguments("settings", settings));
486489
}
487490

488491
/**

src/test/java/io/appium/java_client/android/SettingTest.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
import org.junit.Test;
55

66
import java.time.Duration;
7+
import java.util.EnumMap;
8+
import java.util.HashMap;
9+
import java.util.Map;
710

811
import static org.junit.Assert.assertEquals;
912

@@ -103,6 +106,24 @@ public class SettingTest extends BaseAndroidTest {
103106
.get("shouldUseCompactResponses"));
104107
}
105108

109+
@Test public void setMultipleSettings() {
110+
EnumMap<Setting, Object> enumSettings = new EnumMap<>(Setting.class);
111+
enumSettings.put(Setting.IGNORE_UNIMPORTANT_VIEWS, true);
112+
enumSettings.put(Setting.ELEMENT_RESPONSE_ATTRIBUTES, "type,label");
113+
driver.setSettings(enumSettings);
114+
Map<String, Object> actual = driver.getSettings();
115+
assertEquals(true, actual.get(Setting.IGNORE_UNIMPORTANT_VIEWS.toString()));
116+
assertEquals("type,label", actual.get(Setting.ELEMENT_RESPONSE_ATTRIBUTES.toString()));
117+
118+
Map<String, Object> mapSettings = new HashMap<>();
119+
mapSettings.put(Setting.IGNORE_UNIMPORTANT_VIEWS.toString(), false);
120+
mapSettings.put(Setting.ELEMENT_RESPONSE_ATTRIBUTES.toString(), "");
121+
driver.setSettings(mapSettings);
122+
actual = driver.getSettings();
123+
assertEquals(false, actual.get(Setting.IGNORE_UNIMPORTANT_VIEWS.toString()));
124+
assertEquals("", actual.get(Setting.ELEMENT_RESPONSE_ATTRIBUTES.toString()));
125+
}
126+
106127
private void assertJSONElementContains(Setting setting, long value) {
107128
assertEquals(driver.getSettings().get(setting.toString()), value);
108129
}

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

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@
2222

2323
import static org.junit.Assert.assertEquals;
2424

25+
import java.util.EnumMap;
26+
import java.util.HashMap;
27+
import java.util.Map;
2528

2629
public class SettingTest extends AppIOSTest {
2730

@@ -94,5 +97,21 @@ public class SettingTest extends AppIOSTest {
9497
.get("shouldUseCompactResponses"));
9598
}
9699

97-
100+
@Test public void setMultipleSettings() {
101+
EnumMap<Setting, Object> enumSettings = new EnumMap<>(Setting.class);
102+
enumSettings.put(Setting.IGNORE_UNIMPORTANT_VIEWS, true);
103+
enumSettings.put(Setting.ELEMENT_RESPONSE_ATTRIBUTES, "type,label");
104+
driver.setSettings(enumSettings);
105+
Map<String, Object> actual = driver.getSettings();
106+
assertEquals(true, actual.get(Setting.IGNORE_UNIMPORTANT_VIEWS.toString()));
107+
assertEquals("type,label", actual.get(Setting.ELEMENT_RESPONSE_ATTRIBUTES.toString()));
108+
109+
Map<String, Object> mapSettings = new HashMap<>();
110+
mapSettings.put(Setting.IGNORE_UNIMPORTANT_VIEWS.toString(), false);
111+
mapSettings.put(Setting.ELEMENT_RESPONSE_ATTRIBUTES.toString(), "");
112+
driver.setSettings(mapSettings);
113+
actual = driver.getSettings();
114+
assertEquals(false, actual.get(Setting.IGNORE_UNIMPORTANT_VIEWS.toString()));
115+
assertEquals("", actual.get(Setting.ELEMENT_RESPONSE_ATTRIBUTES.toString()));
116+
}
98117
}

0 commit comments

Comments
 (0)