Bird
Raised Fist0
Selenium Javatesting~15 mins

Properties file for configuration in Selenium Java - Build an Automation Script

Choose your learning style10 modes available
Verify login functionality using credentials from properties file
Preconditions (2)
Step 1: Open the browser and navigate to http://example.com/login
Step 2: Read 'username' and 'password' values from config.properties file
Step 3: Enter the username into the username input field with id 'username'
Step 4: Enter the password into the password input field with id 'password'
Step 5: Click the login button with id 'loginBtn'
Step 6: Wait for the page to load and verify the URL is http://example.com/dashboard
✅ Expected Result: User is successfully logged in and redirected to the dashboard page
Automation Requirements - Selenium WebDriver with TestNG
Assertions Needed:
Verify the current URL after login matches http://example.com/dashboard
Best Practices:
Use explicit waits to wait for page load or elements
Load configuration from properties file using java.util.Properties
Use Page Object Model to separate page elements and actions
Close the browser after test execution
Automated Solution
Selenium Java
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

import java.io.FileInputStream;
import java.io.IOException;
import java.time.Duration;
import java.util.Properties;

public class LoginTest {
    private WebDriver driver;
    private WebDriverWait wait;
    private Properties config;

    @BeforeClass
    public void setUp() throws IOException {
        // Load properties file
        config = new Properties();
        FileInputStream fis = new FileInputStream("config.properties");
        config.load(fis);
        fis.close();

        // Setup WebDriver
        driver = new ChromeDriver();
        wait = new WebDriverWait(driver, Duration.ofSeconds(10));
    }

    @Test
    public void testLoginWithProperties() {
        driver.get("http://example.com/login");

        // Enter username
        WebElement usernameInput = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("username")));
        usernameInput.sendKeys(config.getProperty("username"));

        // Enter password
        WebElement passwordInput = driver.findElement(By.id("password"));
        passwordInput.sendKeys(config.getProperty("password"));

        // Click login button
        WebElement loginButton = driver.findElement(By.id("loginBtn"));
        loginButton.click();

        // Wait for URL to change to dashboard
        wait.until(ExpectedConditions.urlToBe("http://example.com/dashboard"));

        // Assert URL
        String currentUrl = driver.getCurrentUrl();
        Assert.assertEquals(currentUrl, "http://example.com/dashboard", "User should be redirected to dashboard after login");
    }

    @AfterClass
    public void tearDown() {
        if (driver != null) {
            driver.quit();
        }
    }
}

This test class uses Selenium WebDriver with TestNG to automate login using credentials from a properties file.

setUp(): Loads the config.properties file using Properties class and initializes the ChromeDriver and explicit wait.

testLoginWithProperties(): Opens the login page, waits for username input to be visible, enters username and password from the properties file, clicks login, waits until the URL changes to the dashboard URL, then asserts the URL is correct.

tearDown(): Closes the browser after the test finishes.

Explicit waits ensure elements are ready before interacting. Using properties file keeps credentials outside the code for easy updates.

Common Mistakes - 4 Pitfalls
Hardcoding username and password in the test code
Using Thread.sleep() instead of explicit waits
Not closing the FileInputStream after loading properties
Using brittle XPath selectors instead of stable IDs
Bonus Challenge

Now add data-driven testing with 3 different username and password combinations from the properties file

Show Hint

Practice

(1/5)
1. What is the main purpose of using a .properties file in Selenium Java tests?
easy
A. To compile Java source files automatically
B. To write the test cases in a different programming language
C. To store configuration data like URLs and credentials outside the test code
D. To store screenshots taken during test execution

Solution

  1. Step 1: Understand the role of properties files

    Properties files are used to keep configuration data separate from code, such as URLs, usernames, and passwords.
  2. Step 2: Identify the correct purpose in Selenium tests

    Using properties files makes tests flexible and easier to maintain by avoiding hard-coded values.
  3. Final Answer:

    To store configuration data like URLs and credentials outside the test code -> Option C
  4. Quick Check:

    Properties file = external config storage [OK]
Hint: Properties files hold config, not code or screenshots [OK]
Common Mistakes:
  • Thinking properties files contain test scripts
  • Confusing properties files with logs or reports
  • Assuming properties files compile code
2. Which Java class is commonly used to load a .properties file in Selenium tests?
easy
A. Properties
B. FileReader
C. BufferedReader
D. FileInputStream

Solution

  1. Step 1: Identify the class for properties handling

    The Properties class in Java is designed to load and read key-value pairs from .properties files.
  2. Step 2: Differentiate from other classes

    While FileReader and FileInputStream help read files, Properties specifically loads and manages properties data.
  3. Final Answer:

    Properties -> Option A
  4. Quick Check:

    Java Properties class loads config files [OK]
Hint: Use Properties class to load .properties files [OK]
Common Mistakes:
  • Using FileReader alone without Properties
  • Confusing BufferedReader with Properties
  • Trying to load properties without Properties class
3. Given the following code snippet, what will be the output if the config.properties file contains url=https://example.com?
Properties prop = new Properties();
FileInputStream fis = new FileInputStream("config.properties");
prop.load(fis);
System.out.println(prop.getProperty("url"));
medium
A. null
B. https://example.com
C. url=https://example.com
D. FileNotFoundException

Solution

  1. Step 1: Load properties from file

    The Properties object loads key-value pairs from the file using load().
  2. Step 2: Retrieve the value for key 'url'

    Calling getProperty("url") returns the value associated with 'url', which is 'https://example.com'.
  3. Final Answer:

    https://example.com -> Option B
  4. Quick Check:

    getProperty('url') = 'https://example.com' [OK]
Hint: getProperty(key) returns the value for that key [OK]
Common Mistakes:
  • Expecting the whole line instead of just the value
  • Confusing key with value in output
  • Not loading the file before getting property
4. Identify the error in the following code snippet that tries to load a properties file:
Properties prop = new Properties();
FileInputStream fis = new FileInputStream("config.properties");
prop.load();
System.out.println(prop.getProperty("browser"));
medium
A. Missing argument in prop.load() method
B. FileInputStream path is incorrect
C. Properties object not instantiated
D. getProperty method is misspelled

Solution

  1. Step 1: Check method usage for loading properties

    The load() method requires an InputStream argument, but here it is called without any argument.
  2. Step 2: Verify other parts of the code

    The FileInputStream is correctly created, Properties is instantiated, and getProperty is spelled correctly.
  3. Final Answer:

    Missing argument in prop.load() method -> Option A
  4. Quick Check:

    load() needs InputStream argument [OK]
Hint: Always pass InputStream to load() method [OK]
Common Mistakes:
  • Calling load() without argument
  • Assuming load() reads file automatically
  • Ignoring exceptions from FileInputStream
5. You want to switch browsers in your Selenium tests by changing only the browser value in a config.properties file. Which approach correctly reads this value and uses it to launch Chrome or Firefox browsers?
hard
A. Use getProperty('browser') but always launch ChromeDriver regardless of value
B. Hardcode browser choice in test code and ignore properties file
C. Load properties but never read 'browser' key, just launch FirefoxDriver
D. Load properties, get 'browser' value, then use if-else to create ChromeDriver or FirefoxDriver accordingly

Solution

  1. Step 1: Load the properties file and read the 'browser' key

    Use Properties class to load the file and get the value of 'browser' key.
  2. Step 2: Use conditional logic to launch the correct browser driver

    If the value is 'chrome', create a ChromeDriver instance; if 'firefox', create a FirefoxDriver instance.
  3. Final Answer:

    Load properties, get 'browser' value, then use if-else to create ChromeDriver or FirefoxDriver accordingly -> Option D
  4. Quick Check:

    Config-driven browser choice = if-else on getProperty('browser') [OK]
Hint: Use if-else on property value to pick browser driver [OK]
Common Mistakes:
  • Ignoring properties file and hardcoding browser
  • Not using conditional logic for browser selection
  • Loading properties but not reading the key
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard