π 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! π