findElement vs findElements in Selenium
By Neha Vaidya, Community Contributor - November 29, 2022
Finding elements on the webpage can be a nightmare due to the complexity of web elements. However, web elements play a vital role in developing and testing any application. To make things easier for testers, this article will offer insights into Selenium findElement vs findElements with the help of an example.
Introduction to Selenium findElement
Selenium defines two methods for identifying web elements:
- findElement: A command to uniquely identify a web element within the web page.
- findElements: A command to identify a list of web elements within the web page.
Let’s understand the difference between these two methods in greater detail.
findElement vs findElements: Core Differences
|Returns the first matching web element if the locator discovers multiple web elements||Returns a list of multiple matching web elements|
|Throws NoSuchElementException if the element is not found||Returns an empty list if no matching element is found|
|Detects a unique web element||Returns a collection of matching elements|
Now that you’ve understood the core difference between Selenium findElement vs findElements, also try to get into some fundamental Selenium commands with Basic Commands of Selenium Webdriver.
Syntax of Selenium findElement
The findElement command returns an object of the type WebElement. It can use various locator strategies such as ID, Name, ClassName, link text, XPath, etc.
Below is the syntax:
WebElement elementName = driver.findElement(By.LocatorStrategy("LocatorValue"));
Locator Strategy comprises the following values:
- Class Name
- Tag Name
- Link Text
Locator Value is the unique method to identify the web element quickly.
Syntax of Selenium findElements
The findElements command returns an empty list if no elements are found using the given locator strategy and locator value.
Below is the syntax of findElements command
List<WebElement> elementName = driver.findElements(By.LocatorStrategy("LocatorValue"));
List<WebElement> listOfElements = driver.findElements(By.xpath("//div"));
Now, let’s delve deeper into understanding how to find web elements with the help of various locators. One can refer to different types of locators in Selenium.
How to use Selenium findElement
1. Find by ID
ID is uniquely defined for each element and is the most common way to locate elements using ID Locator. If a website has dynamically generated ids, then this strategy cannot be used to find an element uniquely. However, it will return the first web element which matches the locator.
Example: Let’s take www.amazon.com for automating and finding the elements. When one navigates through the search box and inspects the element, one can see various web elements, as shown below.
As you can see, it comprises an ID locator whose value is twotabsearchtextbox. The snippet below uses the same locator value to write a program.
from selenium import webdriver driver = webdriver.Chrome(‘./chromedriver’) #instance of Chrome | Firefox | IE driver driver.get(<url>) elementID = driver.findElement(By.id("twotabsearchtextbox")) # will raise NoSuchElementException if not found
2. Find by Name
This is similar to Find By ID except the driver will locate an element by “name” attribute instead of “id”.
Example: Consider the same amazon webpage. The search box also has a name locator whose value is “field-keywords” as shown in the snapshot below.
The entire code remains similar to that of ID locator, except that the difference will be in the findElement syntax.
elementName = driver.findElement(By.name("field-keywords"))
3. Find By LinkText
LinkText helps find links in a webpage. It is the most efficient way of finding web elements containing links.
Now, locate a Returns link as shown below.
When the tester hits that link and inspects it, it locates the link text Returns, as shown in the snapshot below.
This can be located simply by using Selenium findElement with the syntax below:
elementLinktext = driver.findElement(By.linkText(“Returns”))
4. Find By CSS Selector
CSS Selector is used to providing style rules for web pages and also can be used to identify one or more web elements.
Example: Consider the same search box of the Amazon page. It has a class attribute whose value is nav-search-input. Using the same value, the Selenium findElement method can locate the element.
5. Find By XPath
XPath is a Selenium technique to navigate through a page’s HTML structure. XPath enables testers to navigate through the XML structure of any document and can be used on both HTML and XML documents.
Example: Let’s try to locate the same search bar in Amazon with the help of XPath. The code below shows that it contains an ID locator. Note that relative XPath starts with ‘//’.
In the image below, one can see an input tag. Start with //input. Here //input implies a tag name. Use the id attribute and pass twotabsearchtextbox in single quotes as its value. This will give the XPath expression shown below:
Now, using the Selenium findElement method, execute the code below:
elementxpath = driver.findElement(By.xpath("//input[@id=’twotabsearchtextbox’]"))
Locating web elements is the basis of automated Selenium testing of websites and web apps. To learn more about the fundamentals of Selenium, don’t forget to look at Selenium WebDriver Tutorial and what’s new with Selenium Grid 4.