Skip to content

Commit c4060ef

Browse files
authored
feat: Add ability to set multiple settings (#1409)
1 parent 5999ceb commit c4060ef

File tree

4 files changed

+77
-6
lines changed

4 files changed

+77
-6
lines changed

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

Lines changed: 28 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,31 @@ 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+
return setSettings(convertedSettings);
69+
}
70+
71+
/**
72+
* Sets settings for this test session.
73+
*
74+
* @param settings a map with settings, where key is the setting name you wish to set and value is the value of
75+
* the setting.
76+
* @return Self instance for chaining.
77+
*/
78+
default HasSettings setSettings(Map<String, Object> settings) {
79+
CommandExecutionHelper.execute(this, setSettingsCommand(settings));
80+
return this;
81+
}
82+
5583
/**
5684
* Get settings stored for this test session It's probably better to use a
5785
* 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: 23 additions & 4 deletions
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

@@ -34,10 +37,10 @@ public class SettingTest extends AppIOSTest {
3437
}
3538

3639
@Test public void testSetElementResponseAttributes() {
37-
assertEquals("type,label", driver.getSettings()
40+
assertEquals("", driver.getSettings()
3841
.get(Setting.ELEMENT_RESPONSE_ATTRIBUTES.toString()));
39-
driver.setElementResponseAttributes("name");
40-
assertEquals("name", driver.getSettings()
42+
driver.setElementResponseAttributes("type,label");
43+
assertEquals("type,label", driver.getSettings()
4144
.get(Setting.ELEMENT_RESPONSE_ATTRIBUTES.toString()));
4245
}
4346

@@ -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)