Skip to content

Commit edb6a01

Browse files
committed
Make OperaOptions a MutableCapability
1 parent 9d7ec56 commit edb6a01

File tree

4 files changed

+36
-59
lines changed

4 files changed

+36
-59
lines changed

java/client/src/org/openqa/selenium/MutableCapabilities.java

+1
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ public class MutableCapabilities implements Capabilities, Serializable {
3434
keys.add("chromeOptions");
3535
keys.add("edgeOptions");
3636
keys.add("goog:chromeOptions");
37+
keys.add("operaOptions");
3738
keys.add("se:ieOptions");
3839
keys.add("safari.options");
3940
OPTION_KEYS = Collections.unmodifiableSet(keys);

java/client/src/org/openqa/selenium/opera/OperaDriver.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,9 @@ public OperaDriver(OperaDriverService service) {
132132
*
133133
* @param capabilities The capabilities required from the OperaDriver.
134134
* @see #OperaDriver(OperaDriverService, Capabilities)
135+
* @deprecated Use {@link OperaDriver(OperaOptions}) instead.
135136
*/
137+
@Deprecated
136138
public OperaDriver(Capabilities capabilities) {
137139
this(OperaDriverService.createDefaultService(), capabilities);
138140
}
@@ -155,7 +157,7 @@ public OperaDriver(OperaOptions options) {
155157
* @param options The options to use.
156158
*/
157159
public OperaDriver(OperaDriverService service, OperaOptions options) {
158-
this(service, options.toCapabilities());
160+
this(service, (Capabilities) options);
159161
}
160162

161163
/**
@@ -164,7 +166,9 @@ public OperaDriver(OperaDriverService service, OperaOptions options) {
164166
*
165167
* @param service The service to use.
166168
* @param capabilities The capabilities required from the OperaDriver.
169+
* @deprecated Use {@link OperaDriver(OperaDriverService, OperaOptions)} instead.
167170
*/
171+
@Deprecated
168172
public OperaDriver(OperaDriverService service, Capabilities capabilities) {
169173
super(new DriverCommandExecutor(service), capabilities);
170174
locationContext = new RemoteLocationContext(getExecuteMethod());

java/client/src/org/openqa/selenium/opera/OperaOptions.java

+29-57
Original file line numberDiff line numberDiff line change
@@ -19,22 +19,24 @@
1919

2020
import static com.google.common.base.Preconditions.checkArgument;
2121
import static com.google.common.base.Preconditions.checkNotNull;
22+
import static org.openqa.selenium.remote.BrowserType.OPERA_BLINK;
23+
import static org.openqa.selenium.remote.CapabilityType.BROWSER_NAME;
2224

23-
import com.google.common.base.Objects;
2425
import com.google.common.collect.ImmutableList;
2526
import com.google.common.collect.Lists;
2627
import com.google.common.collect.Maps;
2728
import com.google.common.io.Files;
28-
import com.google.gson.Gson;
29-
import com.google.gson.JsonElement;
3029

31-
import org.openqa.selenium.remote.DesiredCapabilities;
30+
import org.openqa.selenium.MutableCapabilities;
31+
import org.openqa.selenium.WebDriverException;
3232

3333
import java.io.File;
3434
import java.io.IOException;
3535
import java.util.Base64;
36+
import java.util.Collections;
3637
import java.util.List;
3738
import java.util.Map;
39+
import java.util.TreeMap;
3840

3941
/**
4042
* Class to manage options specific to {@link OperaDriver}.
@@ -48,22 +50,16 @@
4850
* // For use with OperaDriver:
4951
* OperaDriver driver = new OperaDriver(options);
5052
*
51-
* // or alternatively:
52-
* DesiredCapabilities capabilities = DesiredCapabilities.opera();
53-
* capabilities.setCapability(OperaOptions.CAPABILITY, options);
54-
* OperaDriver driver = new OperaDriver(capabilities);
55-
*
5653
* // For use with RemoteWebDriver:
57-
* DesiredCapabilities capabilities = DesiredCapabilities.opera();
58-
* capabilities.setCapability(ChromeOptions.CAPABILITY, options);
54+
* OperaOptions options = new OperaOptions();
5955
* RemoteWebDriver driver = new RemoteWebDriver(
60-
* new URL("http://localhost:4444/wd/hub"), capabilities);
56+
* new URL("http://localhost:4444/wd/hub"), options);
6157
* </code></pre>
6258
*/
63-
public class OperaOptions {
59+
public class OperaOptions extends MutableCapabilities {
6460

6561
/**
66-
* Key used to store a set of OperaOptions in a {@link DesiredCapabilities}
62+
* Key used to store a set of OperaOptions in a {@link org.openqa.selenium.Capabilities}
6763
* object.
6864
*/
6965
public static final String CAPABILITY = "operaOptions";
@@ -74,6 +70,10 @@ public class OperaOptions {
7470
private List<String> extensions = Lists.newArrayList();
7571
private Map<String, Object> experimentalOptions = Maps.newHashMap();
7672

73+
public OperaOptions() {
74+
setCapability(BROWSER_NAME, OPERA_BLINK);
75+
}
76+
7777
/**
7878
* Sets the path to the Opera executable. This path should exist on the
7979
* machine which will launch Opera. The path should either be absolute or
@@ -190,15 +190,12 @@ public Object getExperimentalOption(String name) {
190190
return experimentalOptions.get(checkNotNull(name));
191191
}
192192

193-
/**
194-
* Converts this instance to its JSON representation.
195-
*
196-
* @return The JSON representation of these options.
197-
* @throws IOException If an error occurs while reading the
198-
* {@link #addExtensions(java.util.List) extension files} from disk.
199-
*/
200-
public JsonElement toJson() throws IOException {
201-
Map<String, Object> options = Maps.newHashMap();
193+
@Override
194+
public Map<String, ?> asMap() {
195+
Map<String, Object> toReturn = new TreeMap<>();
196+
toReturn.putAll(super.asMap());
197+
198+
Map<String, Object> options = new TreeMap<>();
202199

203200
for (String key : experimentalOptions.keySet()) {
204201
options.put(key, experimentalOptions.get(key));
@@ -213,44 +210,19 @@ public JsonElement toJson() throws IOException {
213210
List<String> encoded_extensions = Lists.newArrayListWithExpectedSize(
214211
extensionFiles.size() + extensions.size());
215212
for (File path : extensionFiles) {
216-
String encoded = Base64.getEncoder().encodeToString(Files.toByteArray(path));
217-
encoded_extensions.add(encoded);
213+
try {
214+
String encoded = Base64.getEncoder().encodeToString(Files.toByteArray(path));
215+
216+
encoded_extensions.add(encoded);
217+
} catch (IOException e) {
218+
throw new WebDriverException(e);
219+
}
218220
}
219221
encoded_extensions.addAll(extensions);
220222
options.put("extensions", encoded_extensions);
221223

222-
return new Gson().toJsonTree(options);
223-
}
224-
225-
/**
226-
* Returns DesiredCapabilities for Opera with these options included as
227-
* capabilities. This does not copy the options. Further changes will be
228-
* reflected in the returned capabilities.
229-
*
230-
* @return DesiredCapabilities for Opera with these options.
231-
*/
232-
DesiredCapabilities toCapabilities() {
233-
DesiredCapabilities capabilities = DesiredCapabilities.operaBlink();
234-
capabilities.setCapability(CAPABILITY, this);
235-
return capabilities;
236-
}
237-
238-
@Override
239-
public boolean equals(Object other) {
240-
if (!(other instanceof OperaOptions)) {
241-
return false;
242-
}
243-
OperaOptions that = (OperaOptions) other;
244-
return Objects.equal(this.binary, that.binary)
245-
&& Objects.equal(this.args, that.args)
246-
&& Objects.equal(this.extensionFiles, that.extensionFiles)
247-
&& Objects.equal(this.experimentalOptions, that.experimentalOptions)
248-
&& Objects.equal(this.extensions, that.extensions);
249-
}
224+
toReturn.put(CAPABILITY, options);
250225

251-
@Override
252-
public int hashCode() {
253-
return Objects.hashCode(this.binary, this.args, this.extensionFiles, this.experimentalOptions,
254-
this.extensions);
226+
return Collections.unmodifiableMap(toReturn);
255227
}
256228
}

java/client/test/org/openqa/selenium/opera/OperaOptionsFunctionalTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public void optionsStayEqualAfterSerialization() throws Exception {
5656
OperaOptions options1 = new OperaOptions();
5757
OperaOptions options2 = new OperaOptions();
5858
assertTrue("empty opera options should be equal", options1.equals(options2));
59-
options1.toJson();
59+
options1.asMap();
6060
assertTrue("empty opera options after one is .toJson() should be equal",
6161
options1.equals(options2));
6262
}

0 commit comments

Comments
 (0)