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

selenium webdriver xpath automation