XPath (XML Path Language) is one of the most powerful and flexible ways to locate elements in Selenium. The By.xpath() method allows us to find elements based on their structure, attributes, text content, and more.

πŸ”Ž What is XPath?

XPath is a query language used for selecting nodes from an XML or HTML document. It allows for highly precise selection of elements, especially when elements don’t have unique id, name, or class attributes.

<input type="text" id="email" name="userEmail" />

✅ When to Use By.xpath()?

  • ✅ When elements do not have unique attributes
  • ✅ When you need to locate elements based on position, text, or nested structure
  • ✅ When other locator strategies fail

πŸ“Œ Syntax in Java

driver.findElement(By.xpath("xpath_expression"));

πŸ’‘ Common XPath Expressions

  • //tagname[@attribute='value'] – Select element by attribute
  • //tagname[text()='Visible Text'] – Select element by visible text
  • //input[contains(@name, 'user')] – Partial match
  • //div[@class='header']/a – Select anchor inside a div

πŸ’» Selenium + Java Example

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

public class LoginByXPath {
    public static void main(String[] args) {
        System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");
        WebDriver driver = new ChromeDriver();

        driver.get("https://example.com/login");

        // Locate elements using XPath
        WebElement username = driver.findElement(By.xpath("//input[@name='username']"));
        WebElement password = driver.findElement(By.xpath("//input[@name='password']"));
        WebElement loginBtn = driver.findElement(By.xpath("//button[text()='Login']"));

        username.sendKeys("testuser");
        password.sendKeys("testpass");
        loginBtn.click();

        driver.quit();
    }
}

✅ Best Practices

Tip Why?
Use absolute XPath only when necessary Absolute paths (starting with /html) are brittle and break easily
Prefer relative XPath More stable and easier to maintain
Use functions like contains() and starts-with() Helps match dynamic attributes

⚠️ Common Issues

Issue Solution
NoSuchElementException Incorrect XPath or element not loaded – use WebDriverWait
Invalid XPath syntax Double-check brackets, quotes, and tag structure

πŸ§ͺ Example: Contains and Text

// Locate button containing specific text
WebElement btn = driver.findElement(By.xpath("//button[contains(text(), 'Submit')]"));

// Locate input with partial attribute match
WebElement email = driver.findElement(By.xpath("//input[contains(@name, 'email')]"));

πŸ“š Summary

  • By.xpath() is one of the most powerful locator strategies in Selenium.
  • Best for complex DOM structures and dynamic content.
  • Use relative XPath and helpful functions for reliability.

πŸš€ What's Next?

Learn more about other Selenium locators: