While finding the relative XPath via Firebug : it creates like
.//*[@id='Passwd']
--------- what if we dont use dot at the start what it signifies?
Just add //*
in the Xpath --
it highlights --- various page elements ---------- what does it signify?
Below are XPaths for Gmail password fields. What is significance of *
?
.//*[@id='Passwd']
//child::input[@type='password']
A double slash " // " means any descendant node of the current node in the HTML tree which matches the locator. A single slash " / " means a node which is a direct child of the current.
Single Slash “/” – Single slash is used to create Xpath with absolute path i.e. the xpath would be created to start selection from the document node/start node.
3. What is difference between '/' and '//' in XPath? Single slash represents an absolute location path, starting at the root of the document while double slash represents a relative location path starts from anywhere in XML document.
Using OR & AND This means that any one condition should be true to find the element. In the below XPath expression, it identifies the elements whose single or both conditions are true. Highlight both elements as 'First Name' element having attribute 'id' and 'Last Name' element having attribute 'name'.
There are several distinct, key XPath concepts in play here...
Absolute vs relative XPaths (/
vs .
)
/
introduces an absolute location path, starting at the root of the document..
introduces a relative location path, starting at the context node.Named element vs any element (ename
vs *
)
/ename
selects an ename
root element
./ename
selects all ename
child elements of the context node./*
selects the root element, regardless of name.
./*
or *
selects all child elements of the context node, regardless of name.descendant-or-self axis (//*
)
//ename
selects all ename
elements in a document.
.//ename
selects all ename
elements at or beneath the context node.//*
selects all elements in a document, regardless of name.
.//*
selects all elements, regardless of name, at or beneath the context node.With these concepts in mind, here are answers to your specific questions...
.//*[@id='Passwd']
means to select all elements at or beneath the
context node that have an id
attribute value equal to
'Passwd'
.//child::input[@type='password']
can be simplified to
//input[@type='password']
and means to select all input
elements
in the document that have an type
attribute value equal to 'password'
.These expressions all select different nodesets:
.//*[@id='Passwd']
The '.' at the beginning means, that the current processing starts at the current node. The '*' selects all element nodes descending from this current node with the @id
-attribute-value equal to 'Passwd'.
What if we don't use dot at the start what it signifies?
Then you'd select all element nodes with an @id
-attribute-value equal to 'Passwd' in the whole document.
Just add //* in the XPath -- it highlights --- various page elements
This would select all element nodes in the whole document.
Below mentioned : XPatht's for Gmail Password field are true what is significance of * ?
.//*[@id='Passwd']
This would select all element nodes descending from the current node which @id
-attribute-value is equal to 'Passwd'.
//child::input[@type='password']
This would select all child-element nodes named input
which @type
-attribute-values are equal to 'password'. The child::
axis prefix may be omitted, because it is the default behaviour.
The syntax of choosing the appropriate expression is explained here at w3school.com.
And the Axes(current point in processing) are explained here at another w3school.com page.
The dot in XPath is called a "context item expression". If you put a dot at the beginning of the expression, it would make it context-specific. In other words, it would search the element with id="Passwd"
in the context of the node on which you are calling the "find element by XPath" method.
The *
in the .//*[@id='Passwd']
helps to match any element with id='Passwd'
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With