π Introduction to Desired Capabilities
In Selenium WebDriver, Desired Capabilities is a class used to configure browser properties, settings, and features before launching the browser. It allows us to define:
✔️ Browser Name (Chrome, Firefox, Edge, etc.)
✔️ Browser Version
✔️ Platform/Operating System (Windows, macOS, Linux)
✔️ Headless Mode
✔️ Proxy Settings
✔️ Enable/Disable JavaScript, Cookies, Pop-ups
✔️ Custom Preferences & Extensions
π― Why Use Desired Capabilities?
πΉ Helps in cross-browser testing by setting specific browser properties.
πΉ Configures remote execution using Selenium Grid or cloud services.
πΉ Enables testing with custom settings like disabling pop-ups or enabling specific features.
πΉ Used in mobile automation with Appium for setting up device capabilities.
π How to Use Desired Capabilities in Selenium WebDriver
✅ Basic Example (Deprecated in Selenium 4)
In Selenium 3 and earlier, we used DesiredCapabilities
like this:
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
public class DesiredCapabilitiesExample {
public static void main(String[] args) {
// Set desired capabilities for Chrome
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("browserName", "chrome");
caps.setCapability("version", "latest");
caps.setCapability("platform", "Windows 10");
// Initialize Chrome WebDriver
WebDriver driver = new ChromeDriver();
driver.get("https://www.google.com");
System.out.println("Title: " + driver.getTitle());
driver.quit();
}
}
⚠️ Note:
DesiredCapabilities
is deprecated in Selenium 4. Instead, we use Options classes likeChromeOptions
,FirefoxOptions
, etc.
π Using ChromeOptions (Selenium 4)
In Selenium 4, we use ChromeOptions
to set capabilities.
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
public class ChromeOptionsExample {
public static void main(String[] args) {
// Create ChromeOptions
ChromeOptions options = new ChromeOptions();
// Set browser properties
options.addArguments("--start-maximized"); // Open browser in maximized mode
options.addArguments("--incognito"); // Open browser in incognito mode
options.addArguments("--disable-notifications"); // Disable pop-ups
// Launch Chrome with options
WebDriver driver = new ChromeDriver(options);
driver.get("https://www.google.com");
System.out.println("Title: " + driver.getTitle());
driver.quit();
}
}
✔️ Replaces DesiredCapabilities
✔️ More flexible and easier to maintain
π Using Desired Capabilities with Remote WebDriver (Selenium Grid)
If we are using Selenium Grid to run tests on a remote machine, we still need DesiredCapabilities.
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import java.net.MalformedURLException;
import java.net.URL;
public class RemoteTest {
public static void main(String[] args) throws MalformedURLException {
// Define DesiredCapabilities for remote execution
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("browserName", "chrome");
caps.setCapability("platformName", "Windows 10");
// Define Selenium Grid Hub URL
URL hubURL = new URL("http://localhost:4444/wd/hub");
// Initialize RemoteWebDriver
WebDriver driver = new RemoteWebDriver(hubURL, caps);
driver.get("https://www.google.com");
System.out.println("Title: " + driver.getTitle());
driver.quit();
}
}
✔️ Runs Selenium tests on multiple machines using Selenium Grid
✔️ Supports cross-browser testing.
π Desired Capabilities in Firefox and Edge Browser (Selenium WebDriver)
In Selenium WebDriver, we use FirefoxOptions
and EdgeOptions
(instead of DesiredCapabilities
) to set browser properties in Selenium 4.
π¦ Using FirefoxOptions for Firefox Browser
✅ Basic Example (Launching Firefox with Options)
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;
public class FirefoxOptionsExample {
public static void main(String[] args) {
// Set FirefoxOptions
FirefoxOptions options = new FirefoxOptions();
// Start browser in maximized mode
options.addArguments("--start-maximized");
// Run Firefox in private mode
options.addArguments("-private");
// Disable notifications
options.addPreference("dom.webnotifications.enabled", false);
// Initialize WebDriver with options
WebDriver driver = new FirefoxDriver(options);
driver.get("https://www.google.com");
System.out.println("Title: " + driver.getTitle());
driver.quit();
}
}
π₯ Common FirefoxOptions Settings
Option | Description | Example |
---|---|---|
--headless |
Run in headless mode (no UI) | options.addArguments("--headless"); |
--start-maximized |
Start maximized | options.addArguments("--start-maximized"); |
-private |
Open in private mode | options.addArguments("-private"); |
dom.webnotifications.enabled |
Disable pop-ups | options.addPreference("dom.webnotifications.enabled", false); |
browser.download.folderList |
Set download folder | options.addPreference("browser.download.folderList", 2); |
π₯️ Using EdgeOptions for Microsoft Edge Browser
✅ Basic Example (Launching Edge with Options)
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.edge.EdgeOptions;
public class EdgeOptionsExample {
public static void main(String[] args) {
// Set EdgeOptions
EdgeOptions options = new EdgeOptions();
// Open Edge in full screen
options.addArguments("--start-maximized");
// Run in private mode
options.addArguments("--inprivate");
// Disable pop-ups
options.addArguments("--disable-notifications");
// Launch Edge with options
WebDriver driver = new EdgeDriver(options);
driver.get("https://www.google.com");
System.out.println("Title: " + driver.getTitle());
driver.quit();
}
}
π₯ Common EdgeOptions Settings
Option | Description | Example |
---|---|---|
--headless |
Run in headless mode (no UI) | options.addArguments("--headless"); |
--start-maximized |
Start maximized | options.addArguments("--start-maximized"); |
--inprivate |
Open in private mode | options.addArguments("--inprivate"); |
--disable-notifications |
Disable pop-ups | options.addArguments("--disable-notifications"); |
π Using Remote WebDriver for Selenium Grid (Firefox & Edge)
When running tests on a remote machine (Selenium Grid), we need RemoteWebDriver
with DesiredCapabilities.
✅ Example for Remote Firefox Browser
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxOptions;
import org.openqa.selenium.remote.RemoteWebDriver;
import java.net.MalformedURLException;
import java.net.URL;
public class RemoteFirefoxTest {
public static void main(String[] args) throws MalformedURLException {
FirefoxOptions options = new FirefoxOptions();
options.addArguments("--start-maximized");
// Selenium Grid Hub URL
URL hubURL = new URL("http://localhost:4444/wd/hub");
WebDriver driver = new RemoteWebDriver(hubURL, options);
driver.get("https://www.google.com");
System.out.println("Title: " + driver.getTitle());
driver.quit();
}
}
✅ Example for Remote Edge Browser
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.edge.EdgeOptions;
import org.openqa.selenium.remote.RemoteWebDriver;
import java.net.MalformedURLException;
import java.net.URL;
public class RemoteEdgeTest {
public static void main(String[] args) throws MalformedURLException {
EdgeOptions options = new EdgeOptions();
options.addArguments("--start-maximized");
// Selenium Grid Hub URL
URL hubURL = new URL("http://localhost:4444/wd/hub");
WebDriver driver = new RemoteWebDriver(hubURL, options);
driver.get("https://www.google.com");
System.out.println("Title: " + driver.getTitle());
driver.quit();
}
}
π± Using Desired Capabilities in Appium (Mobile Testing)
In mobile automation (Appium), DesiredCapabilities
is required to define the mobile device, platform, and app.
import io.appium.java_client.MobileElement;
import io.appium.java_client.android.AndroidDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import java.net.MalformedURLException;
import java.net.URL;
public class AppiumTest {
public static void main(String[] args) throws MalformedURLException {
// Define capabilities for Android device
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("deviceName", "Android Emulator");
caps.setCapability("platformName", "Android");
caps.setCapability("appPackage", "com.example.app");
caps.setCapability("appActivity", "com.example.app.MainActivity");
// Connect to Appium Server
URL appiumServerURL = new URL("http://localhost:4723/wd/hub");
AndroidDriver<MobileElement> driver = new AndroidDriver<>(appiumServerURL, caps);
System.out.println("App Launched Successfully!");
driver.quit();
}
}
✔️ Used for mobile testing with Appium
✔️ Defines device, platform, and app details
π₯ Commonly Used Capabilities in Selenium
Capability | Description | Example Value |
---|---|---|
browserName |
Name of the browser | "chrome" |
platformName |
OS name (Windows, macOS, Linux) | "Windows 10" |
version |
Browser version | "latest" |
headless |
Run browser in headless mode | true |
acceptInsecureCerts |
Accept SSL certificates | true |
start-maximized |
Open browser in maximized mode | "true" |
incognito |
Run browser in private/incognito mode | "true" |
disable-notifications |
Disable pop-ups | "true" |
π― Key Takeaways
✔️ DesiredCapabilities
is deprecated in Selenium 4 (use ChromeOptions
, FirefoxOptions
).
✔️ Used in Selenium Grid for remote execution.
✔️ Still required for Appium (Mobile Testing).
✔️ Helps in configuring browser settings for automation.
✔️ Supports headless execution, private mode, and browser-specific settings.
π Conclusion
πΉ Desired Capabilities helps configure browsers, remote execution, and mobile testing.
πΉ Selenium 4 replaces it with Options classes like ChromeOptions
.
πΉ Selenium Grid and Appium still use DesiredCapabilities
.
This ensures smooth cross-browser and cross-platform test execution! π