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