Skip to main content

Normalize Space XPath Selenium

normalize-space is a function in XPath which ignores all redundant spaces in a target string HTML element and and returns the resulting string. Here redundant space means:

  1. Leading Space
  2. Trailing Space
  3. Repeated White Space (replaces sequences of whitespace characters by a single space)

Also, it Removes all new lines and tabs present in a string

Syntax

normalize-space( [string] )
  • Argument: string (optional). The string to be normalized. If omitted, string used will be the same as the context node converted to a string.
  • Returns: The normalized string. normalize-space() function takes a string argument and matches the attribute values present on the webpage.

Link for demo website: Auto Pract Normalize Page

HTML for practice website

<div id = "container">
    <div class=" my class 1"> space in beginning and end </div>
    <div class=" my     class 2"> space      in             between </div>
    <div class = "my class 3">auto <b>pract</b></div>
    <div class = "my class 4"><b>programs</b> buzz</div>
</div>

Note: Here, I have tested several scenarios for different function(method) combination to understand the usage of normalize-space function. XPath which is working I have marked it with Pass otherwise fail.

1. contains()

Scenario 1: Text with space in beginning and end (PASS)

//div[contains(text(),'space in beginning and end')]

Scenario 2: Text with space in between (FAIL)

//div[contains(text(),'space in between')]

Scenario 3: Text with nested elements with inner text (FAIL)

/div[contains(text(),'auto pract')]
//div[contains(text(),'programs buzz')]

Scenario 4: Attribute with space in beginning and end (PASS)

//div[contains(@class,'my class 1')]

Scenario 5: Attribute with space in between (FAIL)

//div[contains(@class,'my class 2')]

2. Normalize-space with text() function

Scenario 1: Text with space in beginning and end (PASS)

//div[text()[normalize-space() = 'space in beginning and end']] 
//div[normalize-space(text()) = 'space in beginning and end']

Scenario 2: Text with space in between (PASS)

//div[text()[normalize-space() = 'space in between']] 
//div[normalize-space(text()) = 'space in between']

Scenario 3: Text with nested elements with inner text (PASS)

//div[text()[normalize-space() = 'auto']]
//div[text()[normalize-space() = 'buzz']]

Scenario 4: Text with nested elements with inner text (FAIL)

//div[text()[normalize-space() = 'auto pract']] 
//div[normalize-space(text()) = 'programs buzz']

3. Normalize-space with contains() function

Scenario 1: Text with space in beginning and end (PASS)

//div[contains(normalize-space(),'space in beginning and')] 

Scenario 2: Text with space in between (PASS)

//div[contains(normalize-space(),'space in')] 

Scenario 3: Text with nested elements with inner text (PASS)

//div[contains(normalize-space(),'auto pract')]  
//div[contains(normalize-space(),'programs buzz')] 

4. Normalize-space with attribute

Scenario 1: attribute with space in beginning and end (PASS)

//div[normalize-space(@class)='my class 1']

Scenario 2: attribute with space in between (PASS)

//div[normalize-space(@class)='my class 2']

5. Normalize-space with attribute and contains

//div[contains(normalize-space(@class),'my class')]

Video Tutorial: normalize-space selenium

Submitted by tgoswami on January 8, 2022

Tarun has 11+ years of experience in Quality Assurance in different domains like Banking, E-commerce, Health and Education.

About

At ProgramsBuzz, you can learn, share and grow with millions of techie around the world from different domain like Data Science, Software Development, QA and Digital Marketing. You can ask doubt and get the answer for your queries from our experts.