FindElement by XPath in Selenium

โšก Smart Summary

FindElement by XPath in Selenium uniquely identifies a single web element on a page, while FindElements returns a complete list of matching elements. Both commands accept a By locator object covering ID, Name, Class Name, and XPath strategies.

  • โœ… Core Principle: FindElement returns the first matching WebElement; FindElements returns a list indexed from zero, like an array.
  • โš ๏ธ Exception Handling: FindElement throws NoSuchElementException when no match exists, whereas FindElements returns an empty list instead of failing.
  • ๐Ÿงญ Locator Strategies: Choose among ID, Name, Class Name, Tag Name, Link Text, Partial Link Text, and XPath.
  • ๐Ÿงฉ Implementation Focus: Pass a By object with a unique locator value to target elements reliably in WebDriver scripts.
  • ๐Ÿš€ Practical Application: Working Java examples demonstrate clicking a radio button and iterating a list of elements on a demo page.

FindElement by XPath in Selenium

In Selenium WebDriver, FindElement and FindElements are the core commands used to locate web elements on a page before any action, such as a click or text entry, can be performed on them.

Why do you need Find Element(s) command?

Interaction with a web page requires a user to locate the web element first. The Find Element command is used to uniquely identify one web element within the web page, whereas the Find Elements command is used to identify a list of web elements. An element can be identified using multiple locator strategies such as ID, Name, Class Name, Link Text, Partial Link Text, Tag Name and XPath.

FindElement command syntax

Below is the syntax of the FindElement command in Selenium WebDriver:

WebElement elementName = driver.findElement(By.LocatorStrategy("LocatorValue"));

The FindElement command takes the By object as the parameter and returns a single object of type WebElement. The By object, in turn, can be used with various locator strategies such as ID, Name, Class Name, XPath, etc.

Locator Strategy can be any of the following values:

  • ID
  • Name
  • Class Name
  • Tag Name
  • Link Text
  • Partial Link Text
  • XPath

Locator Value is the unique value using which a web element can be identified. It is the responsibility of developers and testers to make sure that web elements are uniquely identifiable using certain properties such as ID or Name.

Example:

WebElement loginLink = driver.findElement(By.linkText("Login"));

Example: Find Element in Selenium

The following demo application is used to show the FindElement command in action:

https://demo.guru99.com/test/ajax.html

Scenario:

Step 1: Open the AUT

Step 2: Find and click the radio button, then click the Check button

package com.sample.stepdefinitions;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class NameDemo {

public static void main(String[] args) {
// TODO Auto-generated method stub

System.setProperty("webdriver.chrome.driver", "D:\\3rdparty\\chrome\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();

driver.get("https://demo.guru99.com/test/ajax.html");

// Find the radio button for โ€œNoโ€ using its ID and click on it
driver.findElement(By.id("no")).click();

//Click on Check Button
driver.findElement(By.id("buttoncheck")).click();

}

}

FindElements command syntax

When you need every element that matches a locator rather than just the first one, use FindElements. Below is its syntax:

List<WebElement> elementName = driver.findElements(By.LocatorStrategy("LocatorValue"));

The FindElements command takes the By object as the parameter and returns a list of web elements. It returns an empty list if there are no elements found using the given locator strategy and locator value.

Example:

List<WebElement> listOfElements = driver.findElements(By.xpath("//div"));

Example: Find Elements in Selenium

The same demo application is used to show how FindElements iterates over a list of matching elements.

Scenario:

Step 1: Open the URL for Application Under Test

Step 2: Find the text of the radio buttons and print it onto the output console

package com.sample.stepdefinitions;

import java.util.List;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class NameDemo {

public static void main(String[] args) {

    System.setProperty("webdriver.chrome.driver", "X://chromedriver.exe");
    WebDriver driver = new ChromeDriver();
    driver.get("https://demo.guru99.com/test/ajax.html");
    List<WebElement> elements = driver.findElements(By.name("name"));
    System.out.println("Number of elements:" +elements.size());

    for (int i=0; i<elements.size();i++){
      System.out.println("Radio button text:" + elements.get(i).getAttribute("value"));
    }
  }
}

Find Element vs Find Elements

Below are the major differences between the Find Element and Find Elements commands:

Find Element vs Find Elements in Selenium

Find Element Find Elements
Returns the first web element if there are multiple web elements found with the same locator Returns a list of web elements
Throws the exception NoSuchElementException if there are no elements matching the locator strategy Returns an empty list if there are no web elements matching the locator strategy
Find Element by XPath will only find one web element It will find a collection of elements that match the locator strategy
Not Applicable Each web element is indexed with a number starting from 0, just like an array

FAQs

Use Selenium implicit or explicit waits so the driver polls the page until the element appears. Explicit waits with WebDriverWait and expected conditions are the most reliable approach for dynamic, AJAX-driven pages.

ID is the fastest and most reliable locator because browsers index it directly. CSS selectors are generally faster than XPath, so reserve XPath for cases where no unique ID, Name, or class is available.

Yes. AI-powered testing assistants can analyze the DOM and suggest stable XPath or CSS locators automatically, reducing manual inspection time. Review generated locators for uniqueness before adding them to production test suites.

Self-healing frameworks use AI to detect when a locator breaks after a UI change and automatically substitute the closest matching element. This reduces test maintenance caused by frequently changing element attributes.

Summarize this post with: