The getText()
method is one of the most widely used and powerful techniques for interacting with elements and validating your web apps using Selenium WebDriver. This comprehensive guide will teach you everything you need to know to take full advantage of getText() in your automated tests.
What Does getText() Do?
The getText()
method returns the inner text content of a web element on a page. This allows you to retrieve labels, text content, error messages, headers, and more into a test script for validation and other purposes.
Some key things to know about getText():
- It returns text as a string
- Strips leading and trailing whitespace
- Can be called on any WebElement after locating it
- Useful for assertions, logging, test reporting
For example:
// Store element
WebElement header = driver.findElement(By.id("mainHeader"));
// Get text
String headerText = header.getText();
// Prints "Welcome to My Site!"
System.out.println(headerText);
So rather than trying to match entire elements, you can extract just the parts you need to build reusable, resilient test automation.
When Should You Use getText()?
Here are some of the most common use cases where getText() shines:
Validating labels and text content such as:
- Page titles, headings
- Button and link text
- Form field labels
- Table cell contents
- Text within various elements like divs, spans, paragraphs
Retrieving dynamic text including:
- Error/warning messages
- Form validation text
- Alert popup text
- Region-specific translated text
- User-generated content
Identifying elements to interact with for example:
- Links with specific text
- Form fields by label
- Table rows/columns
Simplifying assertions through:
- Textual equivalency checks
- Containment checks
- Matching against regular expressions
- Length and structure validation
Supporting i18n testing by retrieving:
- UI strings in different languages
- Locale-specific formatting of dates, currencies
Logging and reporting:
- User visible application state
- Before and after screenshots with text overlays
- Failure screenshots with element text callouts
And many other purposes! The text content provides powerful insight into your app.
Code Examples: Get Text in Java, Python, C#, and JavaScript
Let‘s look at some examples of extracting text across multiple languages:
// Java
WebElement label = driver.findElement(By.cssSelector(".label"));
String labelText = label.getText();
# Python
label = driver.find_element_by_css_selector(".label")
label_text = label.text
// C#
IWebElement label = driver.FindElement(By.CssSelector(".label"));
string labelText = label.Text;
// JavaScript
const label = await driver.findElement(By.cssSelector(‘.label‘));
const labelText = await label.getText();
As you can see the pattern is very similar – locate the element then call getText()
or the equivalent text property.
Get Text vs Get Attribute(‘value‘)
You may sometimes see examples using:
element.getAttribute("value");
So when should you use getAttribute("value") vs getText()?
getText()
: Retrieves visible inner content of the elementgetAttribute("value")
: Gets value property of input fields even if not visible
Some key differences:
getText() |
getAttribute("value") |
---|---|
Works on any element | Mainly for form input fields |
Gets visible text | Gets "value" attribute even if not visible |
Better for labels, text | Better for hidden input values |
So in summary:
- For labels, text, links – use getText()
- For input values – use getAttribute("value")
Best Practices for Using getText()
While getText() is very handy, there are some best practices you should follow:
1. Ensure element is visible and ready
Don‘t try to get text from hidden elements, you may get empty or incorrect values. Use waits if needed.
2. Watch for stale elements
If the DOM changes after fetching an element, the reference can go stale. Re-locate before actions.
3. Handle newlines and whitespace properly
Use assertion methods like contains
, matches
etc. to avoid flakiness.
4. Account for text transformations
Does the text change case, get truncated, reshaped for display? Account for variations.
5. Refactor common lookups into helper methods
Keep your tests clean by having reusable text retrieval utilities.
Follow these tips and best practices to build reliable, maintainable test automation leveraging this powerful method!
Common Use Cases and Examples
To give you ideas of how to apply getText() on your projects, let‘s walk through some frequent use cases with examples:
Get Page Title Text
Grabbing the page title text is very common to assert you landed on the expected page:
String pageTitle = driver.getTitle();
// Assert
Assert.assertEquals(pageTitle, "My Page");
You can also directly query the <title>
element:
WebElement titleElement = driver.findElement(By.tagName("title"));
String pageTitle = titleElement.getText();
Assert.assertTrue(pageTitle.contains("My Page"));
Check Error Message Text
Validating error messages is easy with getText():
WebElement errorMessage = driver.findElement(By.id("error"));
String errorText = errorMessage.getText();
Assert.assertTrue(errorText.contains("Invalid zip code"));
This avoids needing to match against the entire error message DOM structure.
Confirm Button Labels
Verifying button text is very common:
WebElement submitButton = driver.findElement(By.cssSelector(".btn-submit"));
String label = submitButton.getText();
Assert.assertEquals(label, "Submit Order");
This helps confirm it‘s the expected button before clicking.
Get Label for Input
To tie labels to inputs, use:
WebElement input = driver.findElement(By.id("email"));
WebElement label = driver.findElement(By.xpath("//label[@for=‘email‘]"));
String labelText = label.getText();
Assert.assertEquals(labelText, "Email:");
This confirms the right label is present to guide the input.
And Much More!
In addition to the examples above, you can leverage getText() for things like:
- Matching link text before clicking
- Parsing complex table cell contents
- Getting text across frames and iframes
- Testing internationalized UI text
- Reading alert and popup text
- Creating automated content monitoring
- Building visualRegression testing suites
The possibilities are endless!
Cross-Browser Considerations
An important thing to consider with any Selenium testing technique is how it behaves across browsers.
Subtle differences in DOM, CSS, and JavaScript handling can cause variation.
To test getText() behavior across browsers:
- Use a cloud testing platform
- Execute your tests on multiple browser and device combinations
- Analyze results for inconsistencies
For example, running your test suite including getText() validations on:
- Chrome, Firefox, Safari
- Edge, IE11
- iOS and Android
- Various device sizes
Look for discrepancies in the text content returned between browsers.
If found, you may need to:
- Adjust string comparisons
- Normalize expected text
- Allow for slight variances
- File browser bugs as needed
Thorough cross-browser testing will help uncover these issues early.
Integration with Test Frameworks
Using getText() with an existing test framework or library helps integrate textual retrieval into your validation workflow.
With TestNG
The TestNG assertions work nicely:
@Test
public void loginValidationsWithTestNG(){
WebElement error = // locate error elm
String errorText = error.getText();
Assert.assertTrue(errorText.contains("Invalid credentials"));
}
The test report will include the assertion failure text.
With JUnit 5
Similarly JUnit 5 has asserts:
@Test
void loginValidationWithJUnit5(){
WebElement error = // find error elm
String errorText = error.getText();
assertTrue(errorText.contains("Invalid credentials"));
}
Within PyTest
For Python PyTest:
def test_login_validations():
error = driver.find_element(By.ID, "error")
error_text = error.text
assert "Invalid credentials" in error_text
And any other test runner – integrate as needed!
Handling Internationalization (i18n)
For global apps, validating internationalized text is important.
To test localized getText() content:
- Use browser language settings
- Configure app language
- Query text in different languages
- Assert expected translations
For example:
// French
driver.executeScript("window.navigator.language = ‘fr‘");
String label = driver.findElement(By.id("submit-btn")).getText();
assertEquals(label, "Soumettre");
// Chinese
driver.executeScript("window.navigator.language = ‘zh-CN‘");
String label = driver.findElement(By.id("submit-btn")).getText();
assertEquals(label, "提交");
This will help ensure your app displays properly translated text correctly.
Avoiding Performance Pitfalls
While extremely useful, overusing getText()
can drag down test performance.
To keep tests fast when retrieving text:
- Limit unnecessary usage
- Cache commonly read elements
- Streamline string handling
-Optimize element location - Parallelize execution
For example cache a header element:
WebElement header = driver.findElement(By.id("header"));
// ...
public void navMenuTest() {
String headerText = header.getText(); // cached lookup
// assert menu items
}
public void layoutTest() {
String headerText = header.getText(); // cached!
// assert layout
}
By optimizing text retrieval you can prevent slowdowns.
Visual Testing Integrations
Retrieving on-screen text helps power visual regression testing using tools like Applitools, Percy, and more.
For example with Applitools:
// Get key text elements
String heading = driver.findElement(By.css("h1")).getText();
String label = driver.findElement(By.css(".label")).getText();
// Visual checkpoint
eyes.check("Homepage", Target.window);
// Textual checkpoints
eyes.check(heading, Target.window.texto(heading));
eyes.check(label, Target.window.texto(label));
// Assert visual + text match
This validates both the visual appearance as well as on-page text.
Cross Browser Testing with BrowserStack
BrowserStack is a great integration for running getText() assertions across 2000+ real devices and browsers:
@Test
public void test_on_browserstack() throws Exception {
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("os", "OS X");
caps.setCapability("os_version", "Big Sur");
caps.setCapability("browser", "Chrome");
WebDriver driver = new RemoteWebDriver(
new URL("https://username:[email protected]/wd/hub"), caps);
driver.get("http://www.google.com");
WebElement search = driver.findElement(By.name("q"));
String placeholder = search.getAttribute("placeholder");
Assert.assertEquals("Search Google", placeholder);
driver.quit();
}
This shows running a simple get text validation on BrowserStack‘s real device cloud!
Containerized Execution
For CI/CD pipelines, retrieving text inside Docker containers is common:
# Dockerfile
FROM selenium/standalone-chrome
COPY TestSuite.java .
# Tests run inside container
RUN java TestSuite.java
// TestSuite.java
@Test
public void containerValidation(){
WebElement header = findHeaderElement();
String heading = header.getText();
Assert.assertEquals(heading, "Hello Docker!");
}
This bakes text retrieval directly into your pipeline environment.
Logging Best Practices
When tests fail, having the element text content helps debugging.
For better logging:
- Log strings before key actions
- On failure, output related text
- Use text values in reports
- Attach screen captures with text overlays
For example:
@Test
public void loginValidation(){
WebElement submitButton = findSubmitButton();
// Log text before clicking
logger.info("Submit button text: " + submitButton.getText());
submitButton.click();
WebElement error = findErrorMessage();
// Log failure text
logger.error("Error message contents: " + error.getText());
}
This provides crucial context to streamline debugging.
The Future of Text Retrieval in Selenium
As Selenium continues evolving, there are some notable directions around text handling:
- WebDriver BiDi – Two-way communication between browser and driver for richer automation
- Native events – Direct browser event generation vs simulation
- Shadow DOM access – Improved support for emerging web standards
- Mobile and native apps – Getting text across more platforms
- CSS integration – Beyond basic text, richer typography and style info
- Async execution – Awaiting text info after actions finish
Upcoming Selenium 5 may incorporate some of these, while BrowserStack and other tools are advancing as well. Exciting times ahead!
Conclusion
This guide covered everything testers need to know to leverage Selenium‘s getText() effectively.
We explored:
✅ Exactly what getText() does and when to apply it
✅ Usage best practices for avoiding pitfalls
✅ Code examples across multiple languages
✅ Integrations with test frameworks
✅ Support for i18n and visual testing
✅ Cross-browser considerations
✅ Performance and logging recommendations
With a strong handle on retrieving element text, you can build more reusable, resilient test automation to validate modern web apps!
Let me know in the comments if you have any other questions on mastering the getText() method in Selenium.