org.openqa.selenium.MutableCapabilities Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of selenium-api Show documentation
Show all versions of selenium-api Show documentation
Selenium automates browsers. That's it! What you do with that power is entirely up to you.
// Licensed to the Software Freedom Conservancy (SFC) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The SFC licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package org.openqa.selenium;
import java.io.Serializable;
import java.util.Collections;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
public class MutableCapabilities extends AbstractCapabilities implements Serializable {
private static final long serialVersionUID = -112816287184979465L;
private static final Set OPTION_KEYS;
static {
HashSet keys = new HashSet<>();
keys.add("chromeOptions");
keys.add("edgeOptions");
keys.add("goog:chromeOptions");
keys.add("moz:firefoxOptions");
keys.add("operaOptions");
keys.add("se:ieOptions");
keys.add("safari.options");
OPTION_KEYS = Collections.unmodifiableSet(keys);
}
public MutableCapabilities() {
// no-arg constructor
}
public MutableCapabilities(Capabilities other) {
this(other.asMap());
}
public MutableCapabilities(Map capabilities) {
capabilities.forEach((key, value) -> {
if (value != null) {
setCapability(key, value);
}
});
}
/**
* Merges the extra capabilities provided into this DesiredCapabilities instance. If capabilities
* with the same name exist in this instance, they will be overridden by the values from the
* extraCapabilities object.
*
* @param extraCapabilities Additional capabilities to be added.
* @return DesiredCapabilities after the merge
*/
@Override
public MutableCapabilities merge(Capabilities extraCapabilities) {
if (extraCapabilities == null) {
return this;
}
extraCapabilities.asMap().forEach(this::setCapability);
return this;
}
public void setCapability(String capabilityName, boolean value) {
setCapability(capabilityName, (Object) value);
}
public void setCapability(String capabilityName, String value) {
setCapability(capabilityName, (Object) value);
}
public void setCapability(String capabilityName, Platform value) {
setCapability(capabilityName, (Object) value);
}
public void setCapability(String key, Object value) {
// We have to special-case some keys and values because of the popular idiom of calling
// something like "capabilities.setCapability(SafariOptions.CAPABILITY, new SafariOptions());
// and this is no longer needed as options are capabilities. There will be a large amount of
// legacy code that will always try and follow this pattern, however.
if (OPTION_KEYS.contains(key) && value instanceof Capabilities) {
merge((Capabilities) value);
return;
}
super.setCapability(key, value);
}
}