We have already discussed the technique to create dynamic XPath in Selenium WebDriver. Just for the revision, we discussed earlier- basics & definition of XPath, various XPath methods like contains, following, preceding and different uses of operators within the dynamic XPath. As we all know XPath is a language to lookup attributes in an XML file. Today we are going to discuss some advanced dynamic XPath technique in Selenium. These methods will help you to traverse in DOM very efficiently.
If you find web elements perfectly or if you create perfect locators through XPath then you are done with 40% part of your Selenium test case. Further, remaining things are easier as you only have to call the required methods which are written within the Selenium library with little programming logic in Java, Python, Ruby or any other programming language which you wish to use for the Automation testing.
Before we start further, I’d recommend you to go through following tutorials which helps you in solving most of your problems relating to XPath, CSS Selector, and different locators. It is highly recommended that you go through below tutorials first then you come again to this tutorial on advanced dynamic XPath Selenium.
-
-
A complete guide to writing dynamic CSS Selector in Selenium WebDriver
-
A complete guide to writing dynamic XPath in Selenium WebDriver
Hope you have finished reading tutorials. Let’s start with the advanced dynamic XPath guide.
List of Advanced dynamic XPath methods to identify elements efficiently
Here is list of some of the advanced dynamic XPath methods that we are going to discuss today. Let’s have a look:
- ancestor
- ancestor-or-self
- descendant
- descendant-or-self
- parent
- child
- preceding-sibling
- following-sibling
These methods look-up in DOM based on their defined axis. Let’s begin with the ancestor in details, further, we will discuss rest of the methods too.
Don’t Miss: Actions class in Selenium for Mouse and Keyboard events
Dynamic XPath using- ‘ancestor’
It sends us up to the parent node and above. Simply, it looks up web elements up to the root node.
//tagname[@attribute='value]/ancestor::index[] //*[@id='identifierId']/ancestor::div //*[@id='value']/ancestor::div[1]/img
Dynamic XPath using- ‘ancestor-or-self’
It sends us to the current node and its ancestor only.
//tagname[@attribute='value]/ancestor-or-self::index[] //*[@id='identifierId']/ancestor-or-self::div //*[@id='value']/ancestor-or-self::div[1]/img
It displays same number of elements as the ancestor.
Dynamic XPath using- ‘descendant’
It traverses opposite to the parent node. It sends us to the children and up to their children’s node until it reaches to the leaf.
//tagname[@attribute='value]/descendant::index[] //*[@id='main']/div/descendant::a
Dynamic XPath using- ‘descendant-or-self’
It traverses the current node and its children only.
//tagname[@attribute='value]/descendant-or-self::index[] //*[@id='main']/div/descendant-or-self::a
Dynamic XPath using- ‘parent’
It traverses to the parent node of the context node.
//tagname[@attribute='value]/parent::index[] //*[@id='identifierId']/parent::div //*[@id='value']/parent::div[1]/img
Dynamic XPath using- ‘child’
It sends us to the child of the context node.
//tagname[@attribute='value]/child::index[] //*[@id='main']/div/child::div
Dynamic XPath using- ‘preceding-sibling’
It sends you to the left of the parent node. Simply, it traverses to the elder siblings of the context element.
//tagname[@attribute='value]/preceding-sibling::index[] .//*[@id='post-4335']/div[2]/span/a[4]/preceding-sibling::a
Dynamic XPath using- ‘following-sibling’
It sends you to the right of the parent node. Simply, it traverses to the younger siblings of the context element.
//tagname[@attribute='value]/following-sibling::index[] //*[@id='identifierId']/following-sibling::div
Note: preceding-sibling & following-sibling shares the common parents.
By looking to the above XPath methods, we see how they help to establish a relative connection among rest of the elements. It looks like a family and their strong bonding. This is why they named relation XPath.
Apart from above methods, there are few more methods like namespace, self, and attribute. But, you don’t need to use these two since most of your work will be done by above discussed advanced dynamic XPath methods and some methods which have been discussed in the previous post on dynamic XPath.