Bird
Raised Fist0
Selenium Javatesting~15 mins

XPath with text() in Selenium Java - Build an Automation Script

Choose your learning style10 modes available
Verify button click using XPath with text()
Preconditions (2)
Step 1: Locate the button with the exact text 'Submit' using XPath with text() function.
Step 2: Click the 'Submit' button.
Step 3: Verify that clicking the button leads to the expected page or changes the page content accordingly.
✅ Expected Result: The 'Submit' button is clicked successfully using XPath with text(), and the expected page or content change occurs.
Automation Requirements - Selenium WebDriver with Java
Assertions Needed:
Verify the 'Submit' button is found using XPath with text()
Verify the button click leads to expected page or content change
Best Practices:
Use explicit waits to wait for the button to be clickable
Use By.xpath with text() function for locating the button
Use assertions from TestNG or JUnit for validation
Close the browser after test execution
Automated Solution
Selenium Java
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

import java.time.Duration;

public class XPathTextTest {
    private WebDriver driver;
    private WebDriverWait wait;

    @BeforeClass
    public void setUp() {
        // Set path to chromedriver if needed
        driver = new ChromeDriver();
        wait = new WebDriverWait(driver, Duration.ofSeconds(10));
        driver.get("https://example.com/sample-buttons"); // Replace with actual URL
    }

    @Test
    public void testClickSubmitButtonUsingXPathText() {
        // Locate the button with exact text 'Submit' using XPath with text()
        By submitButtonLocator = By.xpath("//button[text()='Submit']");

        // Wait until the button is clickable
        WebElement submitButton = wait.until(ExpectedConditions.elementToBeClickable(submitButtonLocator));

        // Verify the button is displayed
        Assert.assertTrue(submitButton.isDisplayed(), "Submit button should be visible");

        // Click the button
        submitButton.click();

        // Verify expected result - for example, URL changed or confirmation message displayed
        // Here we check URL contains 'submitted' as an example
        wait.until(ExpectedConditions.urlContains("submitted"));
        String currentUrl = driver.getCurrentUrl();
        Assert.assertTrue(currentUrl.contains("submitted"), "URL should contain 'submitted' after clicking Submit");
    }

    @AfterClass
    public void tearDown() {
        if (driver != null) {
            driver.quit();
        }
    }
}

This test script uses Selenium WebDriver with Java and TestNG framework.

Setup: The @BeforeClass method initializes the ChromeDriver and opens the sample page.

Test: We locate the 'Submit' button using XPath with the text() function: //button[text()='Submit']. We use an explicit wait to ensure the button is clickable before interacting.

We assert the button is visible, then click it. After clicking, we wait for the URL to contain the word 'submitted' to confirm the expected page change.

Teardown: The @AfterClass method closes the browser to clean up.

This approach ensures the test is stable, readable, and follows best practices like explicit waits and proper assertions.

Common Mistakes - 4 Pitfalls
Using XPath without text() and relying on partial matches
Not using explicit waits before clicking the button
Hardcoding URLs or page content without verification
Not closing the browser after test execution
Bonus Challenge

Now add data-driven testing to click buttons with text 'Submit', 'Cancel', and 'Reset' using XPath with text()

Show Hint

Practice

(1/5)
1. What does the XPath expression //button[text()='Submit'] select in a web page?
easy
A. A button element with the exact visible text 'Submit'
B. Any element with the attribute text='Submit'
C. All buttons regardless of their text
D. Any element containing the word 'Submit' anywhere

Solution

  1. Step 1: Understand the XPath syntax

    The expression //button selects all button elements in the document.
  2. Step 2: Apply the text() condition

    The predicate [text()='Submit'] filters those buttons to only those whose visible text exactly matches 'Submit'.
  3. Final Answer:

    A button element with the exact visible text 'Submit' -> Option A
  4. Quick Check:

    XPath with text() = exact text match [OK]
Hint: Use text() for exact visible text match in XPath [OK]
Common Mistakes:
  • Confusing attribute text with text() function
  • Assuming partial text match without contains()
  • Selecting wrong element types
2. Which of the following is the correct XPath syntax to select a link (<a>) with visible text exactly 'Home'?
easy
A. //a[text()='Home']
B. //a[contains(text(), 'Home')]
C. //a[text()='home']
D. //a[@text='Home']

Solution

  1. Step 1: Identify exact text match syntax

    The correct syntax for exact text match uses text()='Home' inside brackets.
  2. Step 2: Check each option

    //a[contains(text(), 'Home')] uses contains(), which is partial match, not exact. //a[text()='home'] has wrong case 'home' (case-sensitive). //a[@text='Home'] incorrectly treats text as attribute.
  3. Final Answer:

    //a[text()='Home'] -> Option A
  4. Quick Check:

    Exact text match uses text()='value' [OK]
Hint: Use text()='ExactText' for precise text matching [OK]
Common Mistakes:
  • Using contains() when exact match is needed
  • Ignoring case sensitivity in text()
  • Treating text as an attribute
3. Given the following HTML snippet:
<div>
  <button>Save</button>
  <button>Cancel</button>
  <button>Save As</button>
</div>

What will the XPath //button[text()='Save'] select?
medium
A. All three buttons
B. Both buttons with texts 'Save' and 'Save As'
C. No buttons because 'Save' is part of 'Save As'
D. The first button with text 'Save' only

Solution

  1. Step 1: Understand exact text() matching

    The XPath text()='Save' matches only buttons whose visible text is exactly 'Save'.
  2. Step 2: Analyze the buttons' text

    Only the first button has exactly 'Save'. The third button's text is 'Save As', which does not match exactly.
  3. Final Answer:

    The first button with text 'Save' only -> Option D
  4. Quick Check:

    text()='Save' matches exact text only [OK]
Hint: Exact text() matches full text, not partial [OK]
Common Mistakes:
  • Assuming partial match with text()
  • Selecting multiple elements incorrectly
  • Ignoring spaces or extra words
4. You wrote this XPath to select a label with text 'Username': //label[text()='username']. It does not find the element. What is the likely problem?
medium
A. Missing contains() function for partial match
B. XPath is case-sensitive; 'username' does not match 'Username'
C. text() cannot be used with label elements
D. XPath syntax requires @text attribute instead of text()

Solution

  1. Step 1: Check case sensitivity in XPath text()

    XPath text() matching is case-sensitive, so 'username' does not match 'Username'.
  2. Step 2: Verify other options

    text() works with any element, contains() is optional, and @text is invalid attribute syntax.
  3. Final Answer:

    XPath is case-sensitive; 'username' does not match 'Username' -> Option B
  4. Quick Check:

    XPath text() is case-sensitive [OK]
Hint: Match exact case in text() for correct XPath [OK]
Common Mistakes:
  • Ignoring case sensitivity
  • Using attribute syntax instead of text()
  • Assuming text() only works on certain tags
5. You want to select a <span> element that contains the exact text 'Error: Invalid input' but the page sometimes adds extra spaces before or after the text. Which XPath expression is best to handle this?
hard
A. //span[text()='Error: Invalid input']
B. //span[contains(text(), 'Error: Invalid input')]
C. //span[normalize-space(text())='Error: Invalid input']
D. //span[@text='Error: Invalid input']

Solution

  1. Step 1: Understand the problem with extra spaces

    Extra spaces before or after text cause exact text() match to fail.
  2. Step 2: Use normalize-space() to trim spaces

    Using normalize-space(text())='Error: Invalid input' trims spaces and matches exact text.
  3. Step 3: Evaluate other options

    //span[text()='Error: Invalid input'] fails with spaces, //span[contains(text(), 'Error: Invalid input')] matches partial text (not exact), //span[@text='Error: Invalid input'] is invalid syntax.
  4. Final Answer:

    //span[normalize-space(text())='Error: Invalid input'] -> Option C
  5. Quick Check:

    normalize-space() trims spaces for exact text match [OK]
Hint: Use normalize-space() to ignore extra spaces in text() [OK]
Common Mistakes:
  • Using text() without trimming spaces
  • Using contains() when exact match needed
  • Treating text as attribute
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard