Mastering XPath or CSS is essential for the Selenium test automation engineers to locate dynamic web elements. It is noted that new Selenium automation engineers do not pay much attention to master location strategies. This leads to failure of test automation efforts when web pages with dynamic contents are automated. Most of the testers rely on extracting the XPaths from Firebug/Firepath like tools. The tools cannot be used directly for dynamic web elements. We will discuss XPath in detail with examples.
XPath for locating Web Elements
I have my own way of introducing (explaining) XPath to the trainees in my training sessions.
When A=B and B=C. I ask the students what can be derived from these expressions. Immediately they reply with A=C.
Then I give following two statements
XPath is used for locating the elements in XML documents
XML and HTML has similar syntax (HTML is an XML file)
Hence XPath can be used for locating elements in HTML pages/web pages.
Why do we need to master many XPath syntaxes
We may not be able to locate the elements directly using their unique attributes as some element do not have unique attributes. Some attributes are dynamically changed.[/box] Hence we may have to locate them differently than the static elements.
Locate elements with respective a known element
Locate elements with partial fixed attribute values
Locate element without attributes or without unique attributes
XPath can do bidirectional navigation (Going forward and backward)
XPath is one of most flexible and strongest location strategy
Types of XPath
Absolute XPaths starts with the root of the html pages.
Absolute XPaths are not advisable for most of the time due to following reasons
Absolute XPaths are lengthier and not readable
Absolute XPaths are brittle when minor structural changes are done to the web pages
Absolute XPaths shall be used only when a relative a XPath cannot be constructed. (highly unlikely). Absolute XPaths tends to break as web pages/content is changed. Hence it not recommended to use absolute XPath in Selenium.
Most of the beginners tend use absolute XPaths when they copy them from tools like FireBug. Theses XPaths are tend to break (brittle) most of the time.
Syntax: Absolute XPaths start with /html
Example : /html/body/div/div/div/form/div/input
Relative XPaths is used for locating an element from a known element. The element of your choice is referred relative to a known element.
Syntax : Relative XPaths are started with two forward slashes. //
Example : //div[@id=’divUsername’]/input
Absolute XPaths are faster than the relative XPaths