πŸ“Œ 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 like ChromeOptions, 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 executionprivate 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! πŸš€