5 Simple Xpath Tips
January 09, 2017
XPath selector language which like swiss army knife. It helps me when i am in tough situation. Using some little helper tips sometimes save your times.
1. Descendant-or-self (//)
You can use that syntax when you want select descendant nodes. For example:
Hello Tester
We can find ‘h1’ element a few different ways.
//article/div/h1
or
//article//b
2. Parent of Element (..)
One of useful expressions is ’..’ (parent of element). It helps to find parent element of a node.
STATUS | active |
amount | ₺100 |
For example first column of table static and second column dynamic, you should refer the first column.
You can use this expression like this:
//table/tr[1]/td[2]
But this probably will be more useful:
//td[@id=‘sample’]/../td[2]
3. Logical Operators (not, or ,and)
Logical operators, many time make your job easy.
3.1 Not Operator
Example:
- Emirates
- Aeroflot
- (Promoted) Turkish Airlines
- KLM
Xpath selector:
//ul/li[not(@class=“company”)]
3.2 AND Operator
Example
- Emirates
- Aeroflot
- (Promoted) Turkish Airlines
- KLM
Xpath selector:
//li[(@class=‘company’) and (@id=‘promoted’)]
3.3 OR Operator
Example
- Emirates
- Aeroflot
- (Promoted) Turkish Airlines
- KLM
We need to select Istanbul flights. Below XPath gets two items.
//li[(@from=‘istanbul’) or (@to=‘istanbul’)]
4. String Functions
Sometimes attributes, id and class names may not be found on the document. So you would be have to get the element with XPath string functions .
4.1 contains(haystack, needle)
Xpath expression at below will return that all li elements contains ‘Airline’.
Example:
- 1. Airline: Turkish Airlines
- 2. Airline: KLM Airlines
- 3. Airline: Lufthansa
XPath Expression:
//li[contains(text(),‘Airline’)]
4.2 starts-with(haystack,needle) / ends-with(haystack,needle)
It is possibly easy to predict that expressions what to do. It will return 2 result (first and second li element as we expect).
Example:
- Airline: Turkish Airlines
- Airline: KLM Airlines
- Airline: Lufthansa
XPath Expression:
//li[ends-with(text(),‘Airlines’)]
4.3 matches(haystack,expression)
‘matches’ function provide to us to use regex. But that function supported by Xpath 2.0. If you search a playground for Xpath 2.0, that XPath 2.0 tester is going to help to you.
Example:
- 2017
- 2016
- 2015
- 1800
- 1700
Expression at below gets only between 2010..2019 years
//li[matches(text(),‘201[0-9]’)]
5. Extras
Probably most of times you will not use these functions but good to know. Keep them mind just in case.
5.1 Ceiling , Floor and Round
Below example will return li element that text with ‘3’.
Example:
- 1
- 2
- 3
- 4
- 5
- 6
You can see casting function like string() at below expression.
XPath Expression:
//li[text()=string(ceiling(2.6))]
5.2 Greather and Smaller
For example:
- 1
- 2
- 3
- 4
- 5
- 6
Expression
//li[number(text()) > 3.8]
5.3 Position
You can get an element by index simply with two ways.
For example:
- 1
- 2
- 3
- 4
- 5
- 6
XPath expression:
//li[4] //li[position()=4]
Sources:
- http://videlibri.sourceforge.net/cgi-bin/xidelcgi
- https://www.w3.org/TR/xpath20/
- https://www.w3.org/TR/xpath30/
- https://en.wikipedia.org/wiki/Comparison_of_layout_engines_(XML)#Query_technologies
- https://gist.github.com/LeCoupa/8c305ec8c713aad07b14#file-xpath-cheatsheet-js-L194
- Cover Image By : https://unsplash.com/@iamkiran