DEV Community

Cover image for A Comprehensive Guide to Functional Testing with Selenium
Aaditya Kediyal
Aaditya Kediyal

Posted on

A Comprehensive Guide to Functional Testing with Selenium

Functional testing is a crucial aspect of software development, ensuring that applications perform as expected under various conditions. Among the numerous tools available for functional testing, Selenium stands out due to its flexibility and extensive support for web applications. In this blog, we will explore Selenium in depth, including its installation, basic usage, and professional tips to make the most out of this powerful tool.

What is Selenium?

Selenium is an open-source framework for automating web browsers. It provides a suite of tools and libraries that enable the automation of web applications for testing purposes. Selenium supports multiple programming languages like Java, C#, Python, and JavaScript, allowing testers to write test scripts in the language they are most comfortable with.

Selenium Components

Selenium is not just a single tool but a suite of tools, each serving a specific purpose:

  1. Selenium WebDriver: A tool for writing automated tests of websites. It aims to provide a friendly API that's easy to explore and understand, which helps make your tests easier to read and maintain.
  2. Selenium IDE: A Chrome and Firefox plugin that allows you to record and playback tests in the browser.
  3. Selenium Grid: A tool to run tests on different machines against different browsers in parallel.

For this guide, we will focus on Selenium WebDriver, as it is the most widely used component for functional testing.

Installing Selenium

Prerequisites

Before installing Selenium, ensure you have the following:

  • A programming language installed (Python is used in this guide).
  • A web browser (Chrome or Firefox).
  • The respective web driver for your browser (ChromeDriver for Chrome, GeckoDriver for Firefox).

Step-by-Step Installation Guide

  1. Install Python: If you haven't already installed Python, download it from python.org and follow the installation instructions.

  2. Install Selenium: Use pip, Python’s package manager, to install Selenium.

    pip install selenium
    
  3. Download WebDriver: Download the WebDriver for your browser.

- **ChromeDriver**: Download from [ChromeDriver](https://sites.google.com/a/chromium.org/chromedriver/downloads) and place it in a directory that is in your system's PATH.
- **GeckoDriver (Firefox)**: Download from [GeckoDriver](https://github.com/mozilla/geckodriver/releases) and place it in a directory that is in your system's PATH.
Enter fullscreen mode Exit fullscreen mode
  1. Verify Installation: Create a simple Python script to verify the installation.

    from selenium import webdriver
    
    # Initialize the Chrome driver
    driver = webdriver.Chrome()
    
    # Open a website
    driver.get("http://www.google.com")
    
    # Close the browser
    driver.quit()
    

    Save the script as test_selenium.py and run it using the command:

    python test_selenium.py
    

    If everything is set up correctly, a Chrome browser will open, navigate to Google, and then close.

Using Selenium: A Practical Guide

Writing Your First Test

Let's write a basic test script to search for a term on Google.

  1. Initialize WebDriver: Import the necessary modules and initialize the WebDriver.

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.chrome.service import Service as ChromeService
    from webdriver_manager.chrome import ChromeDriverManager
    
    driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
    
  2. Open Google: Use the get method to navigate to Google's homepage.

    driver.get("http://www.google.com")
    
  3. Locate the Search Box: Use Selenium's find_element method to locate the search box element.

    search_box = driver.find_element(By.NAME, "q")
    
  4. Perform a Search: Send a search query and press Enter.

    search_box.send_keys("Selenium WebDriver")
    search_box.send_keys(Keys.RETURN)
    
  5. Close the Browser: Once the search results are displayed, close the browser.

    driver.quit()
    

    Putting it all together, the complete script looks like this:

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.chrome.service import Service as ChromeService
    from webdriver_manager.chrome import ChromeDriverManager
    
    driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
    driver.get("http://www.google.com")
    
    search_box = driver.find_element(By.NAME, "q")
    search_box.send_keys("Selenium WebDriver")
    search_box.send_keys(Keys.RETURN)
    
    driver.quit()
    

Advanced Usage and Best Practices

To use Selenium professionally, consider the following advanced features and best practices:

  1. Implicit and Explicit Waits: These are crucial for handling dynamic content and ensuring that elements are available before interacting with them.
- **Implicit Wait**: Sets a default wait time for the entire WebDriver instance.
Enter fullscreen mode Exit fullscreen mode
    ```python
    driver.implicitly_wait(10)  # seconds
    ```
Enter fullscreen mode Exit fullscreen mode
- **Explicit Wait**: Waits for a specific condition to be met before proceeding.
Enter fullscreen mode Exit fullscreen mode
    ```python
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC

    wait = WebDriverWait(driver, 10)
    element = wait.until(EC.presence_of_element_located((By.NAME, "q")))
    ```
Enter fullscreen mode Exit fullscreen mode
  1. Page Object Model (POM): A design pattern that enhances test maintenance and reduces code duplication by creating an object repository for web elements.

    class GoogleSearchPage:
        def __init__(self, driver):
            self.driver = driver
            self.search_box = driver.find_element(By.NAME, "q")
    
        def search(self, text):
            self.search_box.send_keys(text)
            self.search_box.send_keys(Keys.RETURN)
    
    # Usage
    driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
    driver.get("http://www.google.com")
    search_page = GoogleSearchPage(driver)
    search_page.search("Selenium WebDriver")
    driver.quit()
    
  2. Exception Handling: Properly handle exceptions to make your tests more robust and informative.

    from selenium.common.exceptions import NoSuchElementException
    
    try:
        element = driver.find_element(By.NAME, "non_existent_element")
    except NoSuchElementException:
        print("Element not found!")
    
  3. Logging and Reporting: Implement logging and reporting to keep track of test execution and results.

    import logging
    
    logging.basicConfig(level=logging.INFO)
    logger = logging.getLogger()
    
    logger.info("Starting test")
    # Your test code here
    logger.info("Test finished")
    

Conclusion

Selenium is an indispensable tool for automating web application testing. With its powerful features and support for multiple programming languages, it allows testers to create robust and scalable test suites. By following the installation steps, understanding the basics of WebDriver, and incorporating best practices, you can leverage Selenium to ensure the quality and reliability of your web applications.

Happy testing!

Top comments (0)