Understanding System setProperty in Selenium
By Jash Unadkat & Sonal Dwivedi, Community Contributors - March 6, 2023
The first step in automating tests for a website or web app is deciding which browser to test. As a result, defining the system properties and initializing the browser object becomes necessary, especially before writing Selenium test scripts. The setProperty() method helps QAs do precisely that.
This article explains the setProperty method in Selenium with a sample program.
What is System class in Java?
- System is a Java class that belongs to the java.lang package.
- System is a final class and does not provide any public constructors; hence, it cannot be instantiated.
- This means it cannot be inherited to override its methods.
- As a System class restricts to inherit and override, it provides various pre-built class fields and methods facilitating standard input, standard output, access to externally defined properties and environment variables, a means of loading files and libraries, and a utility method for quickly copying a portion of an array.
What is setProperty in Selenium?
As the name suggests, the setProperty method enables QAs to set the properties for the desired browser for test automation.
The system setProperty method has two attributes – “propertyName” and “value.” The propertyName represents the name of the browser-specific driver, and the value points to the path of that browser driver.
The java.lang.System.setProperty() method sets the system property indicated by the specified key.
Syntax:
public static String setProperty(String key, String value)
Parameters:
Key: This is the name of the system property.
Value: This is the value of the system property.
setProperty() method helps to set the system property key to have the value as value.
Returns:
This method would return the previous value of the system property in the form of String, or null if it did not have one.
Throws:
- SecurityException − If a security manager exists and its checkPermission method doesn’t allow setting the specified property.
- NullPointerException − If the key or value is null.
- IllegalArgumentException − If the key is empty.
In Selenium, setProperty() can be used to set the driver path of the respective browser.
What is the use of the setProperty method? (with Examples)
To automate tests for a specific browser, QAs need to download the browser-specific drivers first as browsers do not have built-in servers for test automation. These drivers act as a bridge between test scripts and browsers for test automation.
One can check the complete list of available browser drivers on the official site of Selenium. Once the driver is downloaded for a specific browser, QAs need the setProperty() method to define the path for that driver before writing any test cases.
This helps the Selenium WebDriver identify the browser on which tests will be executed.
Let’s analyze this with examples:
System.setProperty("webdriver.chrome.driver", "D:\\Browser Binaries\\chromedriver_win32\\chromedriver.exe");
Here, setProperty() has two parameters:
Key: “webdriver.chrome.driver” Value: “D:\\Browser Binaries\\chromedriver_win32\\chromedriver.exe” (Path of the executable)
Here, the key implies the Selenium WebDriver uses Google Chrome driver to execute on the Chrome browser.
Value implies the location from where the Chrome executable should be called.
If you wish to run on Firefox browser, download the binary and set the values accordingly. The sample is as below:
Key: “webdriver.gecko.driver” Value: <Firefox binary file location>
Note: Binary file location value should be updated per your system path.
We need to initialize the browser as the system properties are set now.
For Chrome browser:
WebDriver driver = new ChromeDriver();
For Firefox browser:
WebDriver driver = new FirefoxDriver();
Example 1: Launching BrowserStack website using Selenium using setProperty method
public class SetPropertyExample { public static void main(String args[]) { System.setProperty("webdriver.chrome.driver", "D:\\Browser Binaries\\chromedriver_win32\\chromedriver.exe"); // Initializing the browser driver WebDriver driver = new ChromeDriver(); // Navigating to BrowserStack website driver.get("https://www.browserstack.com"); System.out.println("BrowserStack is launched successfully on Chrome!"); driver.close(); } }
Example 2: Passing Key as Null
public class NullPointerExceptionExample { public static void main(String args[]) { System.setProperty(null, "D:\\Browser Binaries\\chromedriver_win32\\chromedriver.exe"); //Initializing the browser driver WebDriver driver = new ChromeDriver(); //Navigating to BrowserStack website driver.get("https://www.browserstack.com"); System.out.println("BrowserStack is launched successfully on Chrome!"); driver.close(); } }
Example 3: Passing Key as Empty
public class SetPropertyExample { public static void main(String args[]) { System.setProperty("", "D:\\Browser Binaries\\chromedriver_win32\\chromedriver.exe"); // Initializing the browser driver WebDriver driver = new ChromeDriver(); // Navigating to BrowserStack website driver.get("https://www.browserstack.com"); System.out.println("BrowserStack is launched successfully on Chrome!"); driver.close(); } }
The System.setProperty() method forms the basis for test case automation on any browser. Naturally, QAs must understand how to use this fundamental method for all automation purposes in Selenium.
QAs can use BrowserStack’s cloud Selenium grid to execute their Selenium test cases for multiple browsers on various devices. BrowserStack also offers integrations with popular frameworks and CI/CD tools like Jenkins, CircleCI, and TeamCity to make the test process faster and more convenient using plugins.