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.
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 | 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 |


