Selenium xpath selector
Selenium web element locating strategy using xpath.
Common xpath selector
- Absolute reference and child reference with "/"
xpath=/html # starting from root
xpath=./div # child div of current element
xpath=/html/body
- Relative reference and descendant reference with "//"
xpath=//input # any input in whole dom
xpath=.//input # any input from current location
xpath=//div//input # input is descendant of div
xpath=//div/input # input is child of div
- Parent element with parent:: and ..
xpath=//div[@id='foo']/parent::div
xpath=//div[@id='foo']/../../div
- Any element and any attribute
xpath=//div/input[@type='text']/*
xpath=//*[text()='foo']
xpath=//div[@*='foo']
- Attribute and attribute value with "@"
1) has attribute:
xpath=//div[@attr]
2) attribute value match:
xpath=//div[@attr='foo']
3) attribute value contains:
xpath=//div[contains(@attr, 'foo')]
4) attribute value starts with:
xpath=//div[starts-with(@attr, 'foo')]
NOTE: ends-with not supported.
- Multiple attributes or conditions
xpath=//div[@attrA='foo' and @attrB='bar']
xpath=//div[@attrA='foo'][@attrB='bar']
xpath=//div[starts-with(@attrA, 'foo')][contains(@attrB, 'bar')]
xpath=//div[starts-with(@attrA, 'foo') or contains(@attrB, 'bar')]
xpath=//div[starts-with(@attrA, 'foo') and contains(@attrB, 'bar')]
- Inner text with text()
xpath=//div[text()='foobar']
xpath=//div[contains(text(), 'foo')]
- Index with [] and position()
xpath=//input[n]
xpath=//input[last()]
xpath=//input[last()-1]
xpath=//div/div[position()=2]
- Child count with count(*)
xpath=//div[count(*)=0] # no child
xpath=//div[count(*)=1] # only 1 child
xpath=//div[count(*)>2] # more than 2 children
- Sibling
xpath=//div[@id='foo']/div[@class]/following-sibling::div
xpath=//div[@id='foo']/div[@class]/preceding-sibling::div
- Nesting condition
xpath=//div[@id='foo']/div[p] # has p child
xpath=//div[@id='foo']/div[following-sibling::div[@id='bar']]
xpath=//div[@id='foo']//div[div[@class='bar']]
References