🚀 NEW FEATURE: Edit & Rewind - Discover a new, smarter way to edit long and complex tests

Close announcement

How to Use XPath in Selenium? XPath Selenium Tutorial

selenium xpath

XPath (XML Path Language) is a powerful tool used in Selenium to navigate and locate elements on a web page. In Selenium, XPath provides a flexible way to write locators for web elements by traversing the HTML DOM (Document Object Model) structure. This XPath Selenium tutorial will walk you through the basics, types, and use of XPath in Selenium WebDriver with Python examples, allowing you to write efficient and dynamic XPath expressions.

TL;DR

  • XPath in Selenium is a powerful query language used to locate web elements when simpler locators like id or class are insufficient.
  • There are two types of XPath: Absolute (from the root node) and Relative (from the current element), with relative being more flexible and preferred.
  • XPath expressions allow for locating elements dynamically by attributes, hierarchy, or using functions like contains() and starts-with().
  • XPath is particularly useful for dynamic web elements in Selenium, helping testers write precise and adaptable locators for automation tests.

Check also:

What is XPath in Selenium?

XPath (XML Path Language) is a query language used for navigating through elements and attributes in an XML document. In Selenium automation, XPath is used to locate specific elements on a web page, especially when simpler locators like id, name, or class are not available or sufficient. XPath provides a robust way to traverse the HTML DOM structure and find elements based on their attributes, hierarchy, or text content.

Key Concepts of XPath in Selenium

  1. XML Document: XPath is commonly used in XML documents to locate nodes. Web pages are structured similarly to XML documents using HTML, so XPath works efficiently to locate elements in Selenium tests by navigating through the DOM.

  2. Using Selenium to Locate Elements: Selenium provides the ability to use XPath to find specific elements on a webpage. Whether you're writing Selenium tests for form inputs, buttons, or dynamic elements, XPath allows for complex queries.

  3. Attribute Value: XPath can locate elements based on their attributes and values. You can use the @attribute='value' syntax to precisely target elements.

    Example:

    //input\[@name='username'\]

    This XPath expression will locate the input element whose name attribute has the value username.

  4. Selenium Automation: XPath plays a crucial role in Selenium automation by providing flexibility in finding elements during test execution. It’s especially useful when automating web applications with dynamic content or complicated HTML structures.

  5. Use the Following XPath Syntax: There are two main types of XPath in Selenium:

    • Absolute XPath: It starts from the root node of the document and follows the full path to the element.
    • Relative XPath: It starts from the current element or node and is much more flexible.
  6. Example of relative XPath:

    //button\[@id='submit'\]

  7. XPath Example: Here's an example of using XPath in Selenium to locate an element by its attribute:

    python

    from selenium import webdriver driver = webdriver.Chrome() driver.get('https://example.com') element = driver.find\_element\_by\_xpath("//input\[@name='email'\]") element.send\_keys('test@example.com')

  8. Name Attribute: XPath expressions can locate elements based on the name attribute, which is commonly used in forms. This allows you to interact with input fields, buttons, and other elements during Selenium automation.

  9. Locating a Specific Element: You can use XPath to find a specific element on a webpage, even when dealing with dynamic elements. By combining multiple attributes or using functions like contains() or starts-with(), you can build more flexible locators.

Check how you can build Xpath Selectors with No-code XPath Selector Builder by BugBug.

Syntax of XPath in Selenium

The basic syntax for writing an XPath expression is:

//tagname\[@attribute='value'\]

Here, tagname is the HTML tag, attribute is the HTML attribute, and value is the attribute's value. This locator helps identify web elements by their attributes.

Types of XPath in Selenium

  1. Absolute XPath: Absolute XPath starts from the root element and moves through the entire DOM tree to reach the target element. It’s less reliable because any change in the HTML structure will break it.

    Example of Absolute XPath:

    /html/body/div\[1\]/div/div\[2\]/input

  2. Relative XPath: Relative XPath starts from the current element and searches the target element. It’s more flexible than absolute XPath and often used in real-world scenarios.

    Example of Relative XPath:

    //input\[@id='search-box'\]

Using XPath in Selenium WebDriver with Python

Here’s an example of how to use XPath to locate elements in Selenium with Python:

Example: Finding an Element by XPath

python

from selenium import webdriver # Initialize the WebDriver driver = webdriver.Chrome() # Navigate to a web page driver.get("https://example.com") # Locate the search box using XPath search\_box = driver.find\_element\_by\_xpath("//input\[@id='search-box'\]") # Perform an action (e.g., typing a query) search\_box.send\_keys("Selenium XPath tutorial")

Locating Dynamic Elements using XPath

When web elements have dynamic attributes, you can use XPath functions like contains() or starts-with() to find elements whose attributes change dynamically.

Example: Using contains() to Find Dynamic Elements

xpath

//button\[contains(@class, 'submit-button')\]

This XPath expression will locate any button whose class name contains submit-button, even if the class name has additional dynamic values.

XPath Axes in Selenium

XPath Axes are used to traverse the HTML DOM structure relative to the current node. These methods can be useful when you need to find elements in relation to other elements.

Example: Using XPath Axes to Traverse the DOM

//div\[@id='container'\]//following-sibling::div\[1\]

This expression finds the first div element that is a sibling of the container div.

Writing Dynamic XPath Expressions in Selenium

Dynamic elements change frequently in modern web applications, and a well-crafted XPath helps in locating these elements even when their attributes or positions change. Using relative paths and functions like contains(), starts-with(), and text(), you can make your XPath more dynamic.

Example: Using starts-with() to Find Dynamic Elements

//input\[starts-with(@id, 'user-input')\]

Chained XPath in Selenium

You can chain multiple conditions in your XPath expression to narrow down the search. Chaining makes XPath locators more specific and reliable.

Example: Chained XPath Expression

//div\[@class='parent'\]//span\[@class='child'\]

This expression finds the span element inside a div with class parent.

Advantages and Disadvantages of Absolute XPath

Advantages:

  • Clear path from the root element.
  • Easy to write for simple DOM structures.

Disadvantages:

  • Any change in the structure of the web page can break the absolute XPath.
  • Less flexible than relative XPath.

XPath Contains vs. CSS Selectors

XPath can be more powerful than CSS selectors because it allows for complex querying using axes and functions like contains(). However, CSS selectors can be faster and simpler when you're working with class names or IDs.

Tips for Using XPath Effectively

  1. Use relative XPath when possible to avoid breaking your locators with minor DOM changes.
  2. Leverage XPath axes for traversing between related elements in the DOM.
  3. Use functions like contains() or starts-with() to handle dynamic elements.
  4. Avoid overly long XPath expressions, as they can become brittle and difficult to maintain.

XPath Locators in Selenium - Conclusion

XPath is one of the most powerful and flexible locators in Selenium, especially for handling dynamic web elements. It offers different types of XPath locators, including absolute and relative XPath expressions, which allow testers to write precise locators for any element on a webpage. While general locators like id, name, or CSS selectors are often simpler, XPath is particularly valuable for more complex and dynamic scenarios where normal locators may fail.

In summary, XPath in Selenium allows you to write long XPath expressions, handle normal XPath element searches, and improve testing efficiency. When used correctly, XPath ensures that Selenium allows testers to create robust and dynamic locators, particularly useful in Selenium Grid for distributed testing. Learning how to use the syntax for creating XPath and understanding its limitations will significantly enhance your testing capabilities in any Selenium automation project.

Happy (automated) testing!

Speed up the entire testing process now

Automate web app testing easier than ever. Without excessive costs. Faster than coding. Free forever.
Dominik Szahidewicz

Technical Writer

Dominik Szahidewicz is a technical writer with experience in data science and application consulting. He's skilled in using tools such as Figma, ServiceNow, ERP, Notepad++ and VM Oracle. His skills also include knowledge of English, French and SQL.

Outside of work, he is an active musician and pianist, playing in several bands of different genres, including jazz/hip-hop, neo-soul and organic dub.

Don't miss any updates
Get more tips and product related content. Zero spam.