0% found this document useful (0 votes)
22 views27 pages

Selenium Locators

The document outlines various locators in Selenium WebDriver, including By.id, By.name, By.className, By.tagName, By.linkText, By.partialLinkText, By.cssSelector, and By.xpath, detailing their usage, advantages, limitations, and best use cases. It emphasizes the importance of selecting the right locator for reliable automation scripts and provides best practices for locator selection. Additionally, it compares XPath and CSS Selector in terms of syntax complexity, DOM traversal, performance, cross-browser compatibility, text matching, and functions.

Uploaded by

harish
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
22 views27 pages

Selenium Locators

The document outlines various locators in Selenium WebDriver, including By.id, By.name, By.className, By.tagName, By.linkText, By.partialLinkText, By.cssSelector, and By.xpath, detailing their usage, advantages, limitations, and best use cases. It emphasizes the importance of selecting the right locator for reliable automation scripts and provides best practices for locator selection. Additionally, it compares XPath and CSS Selector in terms of syntax complexity, DOM traversal, performance, cross-browser compatibility, text matching, and functions.

Uploaded by

harish
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 27

‭https://www.linkedin.

com/in/anshulagarwal30‬

‭Different Locators present in Selenium and their Uses‬


I‭n Selenium WebDriver locators are used to find and interact with elements on a web page.‬
‭Selecting the right locator is crucial for creating reliable and maintainable automation scripts.‬

‭1.‬‭By.id‬
‭●‬ ‭Usage‬‭:‬‭driver.findElement(By.id("elementId"));‬
‭●‬ ‭Description‬‭: Locates an element using the value of‬‭its id attribute.‬
‭●‬ ‭Advantages‬‭:‬
‭o‬ ‭Uniqueness‬‭: The id attribute should be unique on an‬‭HTML page.‬
‭o‬ P
‭ erformance‬‭: Fastest locator because browsers are‬‭optimized for finding‬
‭elements by id.‬
‭●‬ ‭Limitations‬‭:‬
‭o‬ ‭Availability‬‭: Not all elements have an id attribute.‬
‭o‬ D
‭ ynamic IDs‬‭: Some web applications generate dynamic‬‭IDs that change on‬
‭each page load.‬
‭●‬ ‭Best Use Case‬‭: When the element has a unique and stable‬‭id attribute.‬

‭2.‬‭By.name‬
‭●‬ ‭Usage‬‭:‬‭driver.findElement(By.name("elementName"));‬
‭●‬ ‭Description‬‭: Locates an element using the value of‬‭its name attribute.‬
‭●‬ ‭Advantages‬‭:‬
‭o‬ ‭Simplicity‬‭: Easy to use when the name attribute is‬‭unique.‬
‭●‬ ‭Limitations‬‭:‬
‭o‬ ‭Non-Uniqueness‬‭: The name attribute is not required‬‭to be unique.‬
‭●‬ ‭Best Use Case‬‭: When id is unavailable but the name attribute is unique and stable.‬

‭3.‬‭By.className‬
‭●‬ ‭Usage‬‭:‬‭driver.findElement(By.className("className"));‬
‭https://www.linkedin.com/in/anshulagarwal30‬

‭●‬ ‭Description‬‭: Locates elements by the value of their class attribute.‬


‭●‬ ‭Advantages‬‭:‬
‭o‬ ‭Grouping‬‭: Useful for finding elements that share a‬‭common style.‬
‭●‬ ‭Limitations‬‭:‬
‭o‬ M
‭ ultiple Classes‬‭: If an element has multiple classes,‬‭this locator may not work as‬
‭expected.‬
‭o‬ ‭Non-Uniqueness‬‭: Classes are often shared among multiple‬‭elements.‬
‭●‬ ‭Best Use Case‬‭: When you need to find elements that‬‭have a unique class name.‬

‭4.‬‭By.tagName‬
‭●‬ ‭Usage‬‭:‬‭driver.findElement(By.tagName("tagName"));‬
‭●‬ ‭Description‬‭: Locates elements by their HTML tag (e.g.,‬‭div, input).‬
‭●‬ ‭Advantages‬‭:‬
‭o‬ ‭Broad Selection‬‭: Can find all elements of a specific‬‭type.‬
‭●‬ ‭Limitations‬‭:‬
‭o‬ O
‭ verly Broad‬‭: Often returns multiple elements; not‬‭suitable for‬
‭unique identification.‬
‭●‬ B
‭ est Use Case‬‭: When dealing with lists or tables where‬‭you need to interact‬
‭with multiple elements of the same type.‬

‭5.‬‭By.linkText‬
‭●‬ ‭Usage‬‭:‬‭driver.findElement(By.linkText("exact link text"));‬
‭●‬ ‭Description‬‭: Locates anchor (<a>) elements by their‬‭exact visible text.‬
‭●‬ ‭Advantages‬‭:‬
‭o‬ ‭Readability‬‭: Easy to understand and maintain.‬
‭●‬ ‭Limitations‬‭:‬
‭o‬ ‭Exact Match Required‬‭: The link text must match exactly,‬‭including whitespace.‬
‭o‬ ‭Case Sensitivity‬‭: Usually case-sensitive.‬
‭https://www.linkedin.com/in/anshulagarwal30‬

‭●‬ ‭Best Use Case‬‭: When you know the exact text of a link‬‭and it is unique on the page.‬

‭6.‬‭By.partialLinkText‬
‭●‬ ‭Usage‬‭:‬‭driver.findElement(By.partialLinkText("partial link text"));‬
‭●‬ ‭Description‬‭: Locates anchor elements that contain‬‭the specified text.‬
‭●‬ ‭Advantages‬‭:‬
‭o‬ ‭Flexibility‬‭: Useful when only part of the link text‬‭is known.‬
‭●‬ ‭Limitations‬‭:‬
‭o‬ ‭Non-Uniqueness‬‭: May match multiple links if the partial‬‭text is common.‬
‭o‬ ‭Performance‬‭: Slightly slower due to partial matching.‬
‭●‬ ‭Best Use Case‬‭: When the exact link text is dynamic‬‭but contains a consistent substring.‬

‭7.‬‭By.cssSelector‬
‭●‬ ‭Usage‬‭:‬‭driver.findElement(By.cssSelector("cssSelector"));‬
‭●‬ D
‭ escription‬‭: Locates elements using CSS selectors,‬‭which define patterns to‬
‭select elements.‬
‭●‬ ‭Advantages‬‭:‬
‭o‬ P
‭ owerful‬‭: Can locate elements based on a variety of‬‭attributes and‬
‭their combinations.‬
‭o‬ ‭Performance‬‭: Generally faster than XPath.‬
‭●‬ ‭Limitations‬‭:‬
‭o‬ ‭Complexity‬‭: Syntax can become complex for advanced‬‭selectors.‬
‭o‬ ‭Cannot Traverse Upwards‬‭: CSS selectors can't select‬‭parent elements.‬
‭●‬ B
‭ est Use Case‬‭: When you need a flexible and efficient‬‭way to locate elements, especially‬
‭when id and name are not available.‬

‭8.‬‭By.xpath‬
‭●‬ ‭Usage‬‭:‬‭driver.findElement(By.xpath("xpathExpression"));‬
‭https://www.linkedin.com/in/anshulagarwal30‬

‭●‬ D
‭ escription‬‭: Locates elements using XPath expressions,‬‭a language for navigating XML‬
‭documents.‬
‭●‬ ‭Advantages‬‭:‬
‭o‬ ‭Flexibility‬‭: Can navigate both up and down the DOM‬‭tree.‬
‭o‬ ‭Rich Functions‬‭: Supports a variety of functions and‬‭axes for complex selections.‬
‭●‬ ‭Limitations‬‭:‬
‭o‬ ‭Performance‬‭: Generally slower than other locators.‬
‭o‬ ‭Complexity‬‭: XPath syntax can be difficult to read‬‭and maintain.‬
‭o‬ ‭Browser Variations‬‭: Some older browsers have inconsistent‬‭XPath support.‬
‭●‬ B
‭ est Use Case‬‭: When no other locator can uniquely‬‭identify an element, or when you‬
‭need to traverse the DOM in complex ways.‬

‭Which Locator is Preferable and Why?‬


‭Preferred Locators:‬
‭1.‬ ‭By.id‬

‭o‬ ‭Reason‬‭: Fastest and most reliable when id is unique‬‭and stable.‬


‭2.‬ ‭By.name‬
‭o‬ ‭Reason‬‭: Useful when id is not available but name is‬‭unique.‬
‭3.‬ ‭By.cssSelector‬
‭o‬ ‭Reason‬‭: Offers a good balance between performance‬‭and flexibility.‬
‭4.‬ ‭By.xpath‬
‭o‬ R
‭ eason‬‭: Most flexible but should be used judiciously‬‭due to performance‬
‭and complexity.‬
‭When to Avoid Certain Locators:‬
‭●‬ B
‭ y.className‬‭: Avoid when classes are not unique or‬‭when elements have multiple‬
‭classes.‬
‭●‬ ‭By.tagName‬‭: Avoid for unique elements; useful for‬‭collections.‬
‭●‬ ‭By.linkText and By.partialLinkText‬‭: Avoid when link‬‭texts are dynamic or not unique.‬
‭https://www.linkedin.com/in/anshulagarwal30‬

‭Factors to Consider When Choosing a Locator:‬


‭1.‬ ‭Uniqueness‬‭: The locator should uniquely identify the‬‭element to avoid ambiguity.‬
‭2.‬ ‭Stability‬‭: The locator should remain valid even if‬‭the page layout changes.‬
‭3.‬ ‭Performance‬‭: Prefer locators that are faster (e.g.,‬‭By.id, By.cssSelector).‬
‭4.‬ ‭Readability and Maintainability‬‭: Locators should be‬‭easy to read and maintain.‬

‭Best Practices:‬
‭●‬ ‭Use IDs When Possible‬‭: Always check if the element‬‭has a unique id.‬
‭●‬ ‭Prefer CSS Selectors Over XPath‬‭: CSS selectors are‬‭faster and more readable.‬
‭●‬ A
‭ void Hardcoding Text‬‭: Using By.linkText or By.partialLinkText‬‭can be brittle if the‬
‭text changes.‬
‭●‬ H
‭ andle Dynamic Elements‬‭: Be cautious with dynamic‬‭IDs or classes; consider‬
‭using stable attributes or relative locators.‬
‭●‬ U
‭ se Descriptive Locators‬‭: If possible, work with developers‬‭to add data-* attributes‬
‭specifically for testing.‬
‭●‬ V
‭ alidate Locators‬‭: Regularly verify that your locators‬‭are still valid as the application‬
‭evolves.‬

‭Examples:‬
‭●‬ ‭Using By.id‬‭:‬
‭WebElement usernameField = driver.findElement(By.id("username"));‬
‭●‬ ‭Using By.cssSelector‬‭:‬
‭// Locate an element with class 'btn' inside a div with id 'container'‬
‭WebElement button = driver.findElement(By.cssSelector("#container .btn"));‬
‭●‬ ‭Using By.xpath‬‭:‬
‭// Locate the third child div of an element with id 'main'‬
‭WebElement thirdDiv = driver.findElement(By.xpath("//div[@id='main']/div[3]"));‬
‭https://www.linkedin.com/in/anshulagarwal30‬

‭ hoosing the right locator strategy is crucial for building robust and efficient UI automation‬
C
‭scripts. While By.id is generally the most preferable due to its uniqueness and speed,‬
‭real-world scenarios often require a mix of locator strategies. Understanding the pros and cons‬
‭of each helps in selecting the most appropriate one for each element.‬
‭Remember‬‭: Always aim for locators that are:‬
‭●‬ ‭Unique‬‭: They uniquely identify a single element.‬
‭●‬ ‭Stable‬‭: They do not change with UI updates.‬
‭●‬ ‭Efficient‬‭: They do not degrade the performance of‬‭your tests.‬
‭●‬ ‭Maintainable‬‭: They are easy to read and update.‬
‭ y adhering to these principles, you'll enhance the reliability and longevity of your automation‬
B
‭suites.‬

T‭ he two most commonly used locators in Selenium—‬‭XPath‬‭and‬‭CSS Selector‬‭—have their own‬


‭strengths and limitations. Here's a detailed comparison of their key differences:‬
‭1.‬‭Syntax Complexity‬
‭●‬ X
‭ Path‬‭: XPath syntax is more verbose and complex, especially‬‭when working‬
‭with dynamic or nested elements.‬
‭o‬ ‭Example‬‭:‬‭//div[@class='example']‬
‭●‬ C
‭ SS Selector‬‭: CSS Selector has a cleaner and more‬‭compact syntax, making it easier to‬
‭read and write in many cases.‬
‭o‬ ‭Example‬‭: div.example‬
‭ ifference‬‭: XPath can become more complex and harder‬‭to maintain, especially in complex‬
D
‭DOM hierarchies, while CSS selectors are generally simpler and easier to read.‬

‭2.‬‭Traversing the DOM‬


‭●‬ X
‭ Path‬‭: XPath can navigate both‬‭upward‬‭(i.e., from‬‭child to parent) and‬‭downward‬‭(i.e.,‬
‭from parent to child) in the DOM tree.‬
‭o‬ ‭Example (upward traversal)‬‭:‬‭//div[@id='childElement']/../parentElement‬
‭https://www.linkedin.com/in/anshulagarwal30‬

‭●‬ C
‭ SS Selector‬‭: CSS Selector can only navigate‬‭downward‬‭in the DOM (i.e., from parent to‬
‭child), meaning it cannot select parent elements.‬
‭o‬ ‭Example (downward traversal)‬‭:‬‭div #childElement‬
‭ ifference‬‭: XPath allows you to select parent, sibling,‬‭or child elements, making it more flexible‬
D
‭for complex relationships. CSS Selector can only traverse downwards, so it is less flexible in‬
‭complex DOM hierarchies.‬

‭3.‬‭Performance‬
‭●‬ X
‭ Path‬‭: XPath is typically‬‭slower‬‭than CSS Selector,‬‭especially in browsers like Chrome‬
‭and Firefox, because it has to traverse the DOM in more complex ways.‬
‭●‬ C
‭ SS Selector‬‭: CSS Selector is generally‬‭faster‬‭because‬‭browsers are optimized for parsing‬
‭CSS, making it more efficient for locating elements.‬
‭Difference‬‭: CSS Selector is faster, while XPath is‬‭slower, especially in large DOMs.‬

‭4.‬‭Cross-Browser Compatibility‬
‭●‬ X
‭ Path‬‭: XPath is‬‭not fully supported in Internet Explorer‬‭.‬‭It can cause issues or require‬
‭workarounds.‬
‭●‬ C
‭ SS Selector‬‭: CSS Selector works‬‭consistently across‬‭all modern browsers‬‭, including‬
‭Internet Explorer.‬
‭ ifference‬‭: CSS Selectors have better cross-browser‬‭support compared to XPath, especially for‬
D
‭older browsers like IE.‬

‭5.‬‭Text Matching‬
‭●‬ X
‭ Path‬‭: XPath can‬‭find elements by their text content‬‭,‬‭which is useful when you need to‬
‭locate elements based on visible text.‬
‭o‬ ‭Example‬‭:‬‭//a[text()='Login']‬
‭●‬ C
‭ SS Selector‬‭: CSS Selector‬‭cannot locate elements‬‭by text content‬‭. You can only use‬
‭attribute selectors or class names.‬
‭o‬ ‭Example‬‭: Not available in CSS selectors.‬
‭ ifference‬‭: XPath has the advantage of locating elements‬‭based on text content, which is‬
D
‭impossible in CSS Selectors.‬
‭https://www.linkedin.com/in/anshulagarwal30‬

‭6.‬‭Functions and Operators‬


‭●‬ X
‭ Path‬‭: XPath supports various‬‭functions and operators‬‭,‬‭such as contains(), starts-with(),‬
‭and, or, which makes it more powerful for complex queries.‬
‭o‬ ‭Example‬‭:‬‭//input[contains(@name,'username')]‬
‭●‬ C
‭ SS Selector‬‭: CSS Selector lacks advanced functions‬‭like contains(), though you can use‬
‭attribute selectors for partial matches (^=, *=).‬
‭o‬ ‭Example‬‭:‬‭input[name*='username']‬
‭ ifference‬‭: XPath is more feature-rich with functions‬‭like contains() and starts-with(), making it‬
D
‭more powerful for specific matching scenarios.‬

‭7.‬‭Attribute Handling‬
‭●‬ X
‭ Path‬‭: XPath can select elements based on‬‭any attribute‬‭,‬‭even ones that‬
‭are dynamically generated or rarely used.‬
‭o‬ ‭Example‬‭:‬‭//*[@data-test='testValue']‬
‭●‬ C
‭ SS Selector‬‭: CSS Selector can also target elements‬‭based on‬‭any attribute‬‭, though‬
‭certain complex attribute logic (like functions in XPath) may not be supported.‬
‭o‬ ‭Example‬‭:‬‭[data-test='testValue']‬
‭ ifference‬‭: Both XPath and CSS Selectors handle attributes‬‭well, but XPath offers more‬
D
‭flexibility with its ability to use functions like contains().‬

‭8.‬‭Selecting Siblings‬
‭●‬ ‭XPath‬‭: XPath allows you to select‬‭preceding and following‬‭siblings‬‭easily.‬
‭o‬ ‭Example (following sibling)‬‭:‬‭//h3[@id='heading']/following-sibling::p‬
‭●‬ C
‭ SS Selector‬‭: CSS Selector can only select‬‭immediate‬‭following siblings‬‭using the +‬
‭selector or all following siblings using the ~ selector.‬
‭o‬ ‭Example (immediate sibling)‬‭: h3 + p‬
‭o‬ ‭Example (all siblings)‬‭: h3 ~ p‬
‭ ifference‬‭: XPath is more flexible in selecting siblings,‬‭while CSS Selector is limited to selecting‬
D
‭the next sibling.‬
‭https://www.linkedin.com/in/anshulagarwal30‬

‭9.‬‭Positional Indexing‬
‭●‬ X
‭ Path‬‭: XPath allows you to find elements by their‬‭exact position‬‭in the DOM‬
‭using indices.‬
‭o‬ ‭Example‬‭:‬‭//div[@class='example'][2]‬‭(second div with class example)‬
‭●‬ C
‭ SS Selector‬‭: CSS Selector also supports‬‭nth-child‬‭or‬‭nth-of-type‬‭to locate elements‬
‭based on their position in the DOM.‬
‭o‬ ‭Example‬‭:‬‭div.example:nth-child(2)‬
‭ ifference‬‭: Both XPath and CSS Selector support positional‬‭indexing, but XPath provides more‬
D
‭flexible options (e.g., last()).‬

‭10.‬‭Popularity in the Automation Community‬


‭●‬ X
‭ Path‬‭: Historically, XPath has been more widely used‬‭due to its flexibility, especially‬
‭for complex scenarios.‬
‭●‬ C
‭ SS Selector‬‭: CSS Selectors are increasingly becoming‬‭the preferred choice due to‬
‭their simplicity and performance advantages.‬
‭ ifference‬‭: CSS Selector is becoming more popular‬‭for web automation due to its simplicity and‬
D
‭efficiency, though XPath remains crucial for complex cases.‬

‭When to Use XPath vs. CSS Selector:‬


‭●‬ ‭Use XPath‬‭when:‬
‭o‬ ‭You need to traverse‬‭upward‬‭in the DOM (e.g., select‬‭parent elements).‬
‭o‬ ‭You need to locate an element based on‬‭text content‬‭.‬
‭o‬ Y‭ ou are working with‬‭complex or dynamic attributes‬‭and need to use‬
‭functions like contains() or starts-with().‬
‭●‬ ‭Use CSS Selector‬‭when:‬
‭o‬ ‭You need better‬‭performance‬‭.‬
‭o‬ Y‭ our script needs to work across multiple‬‭browsers‬‭,‬‭including older ones like‬
‭Internet Explorer.‬
‭https://www.linkedin.com/in/anshulagarwal30‬

‭o‬ Y‭ ou are looking for a‬‭simpler‬‭syntax, especially for‬‭straightforward cases‬


‭like selecting elements by class or ID.‬

‭●‬ X
‭ Path‬‭is more powerful and flexible, especially for‬‭complex DOM traversals, text-based‬
‭element location, and handling dynamic elements.‬
‭●‬ C
‭ SS Selector‬‭is faster, simpler, and more readable,‬‭making it ideal for most basic‬
‭to moderately complex scenarios.‬
F‭ or most use cases in UI automation,‬‭CSS Selector‬‭is preferable due to its speed and simplicity,‬
‭but‬‭XPath‬‭is indispensable when dealing with complex‬‭DOM structures or selecting elements‬
‭based on text.‬
‭Functions present in Xpath :‬

‭ Path in Selenium provides a set of powerful functions that allow for flexible element‬
X
‭identification and manipulation. These functions can be categorized based on their use cases,‬
‭such as locating elements based on text, attributes, or relationships with other elements. Here’s‬
‭a breakdown of the most common functions in XPath used in Selenium, along with their‬
‭explanations:‬
‭1.‬‭contains()‬
‭●‬ ‭Syntax‬‭:‬‭//*[contains(@attribute, 'value')]‬
‭●‬ D
‭ escription‬‭: This function is used to locate elements‬‭whose attribute value contains‬
‭a specified substring.‬
‭●‬ U
‭ se Case‬‭: Useful when you only know part of an attribute‬‭value and it might‬
‭be dynamic.‬
‭o‬ E‭ xample‬‭:‬‭//input[contains(@id, 'login')]‬‭will find any <input> elements where‬
‭the id contains the substring "login."‬
‭2.‬‭starts-with()‬
‭●‬ ‭Syntax‬‭:‬‭//*[starts-with(@attribute, 'value')]‬
‭●‬ D
‭ escription‬‭: This function selects elements whose‬‭attribute value begins with a‬
‭specified substring.‬
‭●‬ U
‭ se Case‬‭: Helpful when the start of an attribute is‬‭consistent, but the rest of the‬
‭value might be dynamic.‬
‭o‬ E‭ xample‬‭:‬‭//div[starts-with(@class, 'header')]‬‭will select all div elements where‬
‭the class starts with "header."‬
‭https://www.linkedin.com/in/anshulagarwal30‬

‭3.‬‭text()‬
‭●‬ ‭Syntax‬‭:‬‭//*[text()='textValue']‬
‭●‬ ‭Description‬‭: Locates elements that match the exact‬‭visible text.‬
‭●‬ ‭Use Case‬‭: Used when you need to find elements based‬‭on their visible text.‬
‭o‬ E‭ xample‬‭:‬‭//a[text()='Login']‬‭will find an anchor (<a>) element with the exact‬
‭text "Login."‬
‭4.‬‭normalize-space()‬
‭●‬ ‭Syntax‬‭:‬‭//*[normalize-space(text())='textValue']‬
‭●‬ D
‭ escription‬‭: This function removes leading and trailing‬‭whitespace from a string‬
‭and collapses multiple spaces into a single space.‬
‭●‬ ‭Use Case‬‭: Useful when the text contains extra or irregular‬‭spacing.‬
‭o‬ E‭ xample‬‭:‬‭//span[normalize-space(text())='Submit']‬‭will find the element with the‬
‭exact text "Submit" even if it has extra spaces.‬
‭5.‬‭last()‬
‭●‬ ‭Syntax‬‭:‬‭(//element)[last()]‬
‭●‬ ‭Description‬‭: Selects the last element in a set of‬‭matching nodes.‬
‭●‬ ‭Use Case‬‭: When you need to select the last element‬‭in a group.‬
‭o‬ ‭Example‬‭:‬‭(//div)[last()]‬‭will find the last <div> on the page.‬
‭6.‬‭position()‬
‭●‬ ‭Syntax‬‭:‬‭(//element)[position()=n]‬
‭●‬ ‭Description‬‭: This function returns elements at a specific‬‭position in a node set.‬
‭●‬ U
‭ se Case‬‭: Useful for selecting elements based on their‬‭position in a set of‬
‭similar elements.‬
‭o‬ E‭ xample‬‭:‬‭(//input)[position()=3]‬‭will select the third <input> element in‬
‭the document.‬
‭7.‬‭count()‬
‭●‬ ‭Syntax‬‭:‬‭count(//element)‬
‭●‬ ‭Description‬‭: Counts the number of elements that match‬‭the given XPath expression.‬
‭●‬ ‭Use Case‬‭: Helpful for verifying the number of occurrences‬‭of a certain type of element.‬
‭https://www.linkedin.com/in/anshulagarwal30‬

‭o‬ ‭Example‬‭:‬‭count(//div)‬‭will return the number of <div> elements on the page.‬


‭8.‬‭substring()‬
‭●‬ ‭Syntax‬‭:‬‭substring(string, start, length)‬
‭●‬ ‭Description‬‭: Extracts a substring from the input string‬‭starting at the given position.‬
‭●‬ ‭Use Case‬‭: Used for selecting part of a string from‬‭an element or attribute value.‬
‭o‬ E‭ xample‬‭:‬‭//div[substring(@id, 1, 3)='log']‬‭will find any <div> element whose‬
‭id starts with "log."‬
‭9.‬‭substring-before()‬
‭●‬ ‭Syntax‬‭:‬‭substring-before(string1, string2)‬
‭●‬ ‭Description‬‭: Returns the part of the string before‬‭a given substring.‬
‭●‬ ‭Use Case‬‭: Useful when you want to extract the text‬‭before a certain character or string.‬
‭o‬ ‭Example‬‭:‬‭substring-before('login-form', '-')‬‭will return "login."‬
‭10.‬‭substring-after()‬
‭●‬ ‭Syntax‬‭:‬‭substring-after(string1, string2)‬
‭●‬ ‭Description‬‭: Returns the part of the string after‬‭a given substring.‬
‭●‬ ‭Use Case‬‭: Similar to substring-before(), but it extracts‬‭the part after the specified string.‬
‭o‬ ‭Example‬‭:‬‭substring-after('login-form', '-')‬‭will return "form."‬
‭11.‬‭not()‬
‭●‬ ‭Syntax‬‭: //element[not(@attribute)]‬
‭●‬ ‭Description‬‭: Selects elements that do not have a specified‬‭attribute or value.‬
‭●‬ ‭Use Case‬‭: Useful when filtering out elements that‬‭have a certain attribute.‬
‭o‬ E‭ xample‬‭: //input[not(@type='submit')] will find all‬‭<input> elements that are not‬
‭of type "submit."‬
‭12.‬‭and‬
‭●‬ ‭Syntax‬‭:‬‭//element[@attribute1='value1' and @attribute2='value2']‬
‭●‬ ‭Description‬‭: Allows you to combine multiple conditions.‬
‭●‬ U
‭ se Case‬‭: Use this when you want to combine multiple attribute conditions in a‬
‭single XPath query.‬
‭https://www.linkedin.com/in/anshulagarwal30‬

‭o‬ E‭ xample‬‭: //input[@type='text' and‬


‭@name='username'] will find an‬
‭<input> element where type is‬
‭13.‬‭or‬ ‭"text" and name is "username."‬

‭●‬ ‭Syntax‬‭:‬‭//element[@attribute1='value1' or @attribute2='value2']‬


‭●‬ D
‭ escription‬‭: Allows multiple conditions to be evaluated,‬‭returning elements that‬
‭match at least one condition.‬
‭●‬ U
‭ se Case‬‭: Used when you want to match elements that‬‭meet at least one of‬
‭the specified conditions.‬
‭o‬ E‭ xample‬‭: /‬‭/input[@type='submit' or @type='button']‬‭will find all‬
‭<input> elements that are either of type "submit" or "button."‬
‭14.‬‭ancestor::‬
‭●‬ ‭Syntax‬‭:‬‭//element/ancestor::ancestorElement‬
‭●‬ ‭Description‬‭: Selects all ancestor elements of a given‬‭element.‬
‭●‬ ‭Use Case‬‭: Useful for selecting parent or grandparent‬‭elements.‬
‭o‬ E‭ xample‬‭:‬‭//span/ancestor::div‬‭will select all the <div> ancestors of a <span>‬
‭element.‬
‭15.‬‭descendant::‬
‭●‬ ‭Syntax‬‭:‬‭//element/descendant::descendantElement‬
‭●‬ D
‭ escription‬‭: Selects all descendants of a given element,‬‭including children‬
‭and grandchildren.‬
‭●‬ ‭Use Case‬‭: When you need to locate child elements at‬‭any depth.‬
‭o‬ E‭ xample‬‭:‬‭//div[@id='main']/descendant::input‬‭will find all <input>‬
‭elements within the div with id="main".‬
‭16.‬‭following-sibling::‬
‭●‬ ‭Syntax‬‭:‬‭//element/following-sibling::siblingElement‬
‭●‬ ‭Description‬‭: Selects all sibling elements that follow‬‭the current element.‬
‭●‬ ‭Use Case‬‭: Used to locate elements that come immediately‬‭after a given element.‬
‭o‬ E‭ xample‬‭: //h1/following-sibling::p will select all‬‭<p> elements that are‬
‭siblings following an <h1> element.‬
‭17.‬‭preceding-sibling::‬
‭https://www.linkedin.com/in/anshulagarwal30‬

‭●‬ ‭Syntax‬‭:‬‭//element/preceding-sibling::siblingElement‬
‭●‬ ‭Description‬‭: Selects all sibling elements that precede‬‭the current element.‬
‭●‬ ‭Use Case‬‭: Used to locate elements that come before‬‭a given element.‬
‭o‬ E‭ xample‬‭:‬‭//h1/preceding-sibling::p‬‭will select all <p> elements that are siblings‬
‭preceding an <h1> element.‬
‭18.‬‭self::‬
‭●‬ ‭Syntax‬‭:‬‭//element/self::element‬
‭●‬ ‭Description‬‭: Refers to the current node itself.‬
‭●‬ U
‭ se Case‬‭: Useful when you need to confirm that the‬‭current node matches certain‬
‭criteria.‬
‭o‬ E‭ xample‬‭:‬‭//div/self::div[@class='highlight']‬‭will select <div> elements that are‬
‭self and have a class of "highlight."‬
‭19.‬‭parent::‬
‭●‬ ‭Syntax‬‭:‬‭//element/parent::parentElement‬
‭●‬ ‭Description‬‭: Selects the parent of a given element.‬
‭●‬ ‭Use Case‬‭: When you need to traverse upward and select‬‭the parent node.‬
‭o‬ E‭ xample‬‭:‬‭//span[@class='child']/parent::div‬‭will select the parent <div> of a‬
‭<span> element with the class "child."‬
‭20.‬‭preceding::‬
‭●‬ ‭Syntax‬‭:‬‭//element/preceding::precedingElement‬
‭●‬ ‭Description‬‭: Selects all nodes that precede the current‬‭node in the document.‬
‭●‬ U
‭ se Case‬‭: When you want to locate any nodes that come‬‭before a given node in‬
‭the document.‬
‭o‬ E‭ xample‬‭:‬‭//div[@id='main']/preceding::input‬‭will find all <input> elements that‬
‭precede the <div> with id="main".‬

‭ Path functions in Selenium provide a powerful and flexible way to locate elements, especially‬
X
‭in complex or dynamic DOM structures. Some key functions to remember are:‬
‭●‬ ‭Text Matching‬‭: contains(), starts-with(), text()‬
‭https://www.linkedin.com/in/anshulagarwal30‬

‭●‬ ‭Traversing the DOM‬‭: ancestor::, descendant::, parent::,‬‭following-sibling::‬


‭●‬ ‭Attribute Matching‬‭: contains(), starts-with(), not()‬
‭●‬ ‭Handling Positions‬‭: position(), last()‬
‭ hoosing‬ ‭the‬ ‭right‬ ‭XPath‬ ‭function‬ ‭depends‬ ‭on‬ ‭the‬ ‭structure‬ ‭of‬ ‭the‬ ‭web‬ ‭page‬ ‭and‬ ‭how‬
C
‭dynamic‬ ‭the‬ ‭elements‬ ‭are.‬ ‭These‬ ‭functions‬ ‭allow‬ ‭you‬ ‭to‬‭handle‬‭a‬‭wide‬‭variety‬‭of‬‭scenarios,‬
‭from simple attribute matching to complex DOM traversals.‬

‭Traversal in Xpath:‬

‭ Path traversal is the process of navigating through the Document Object Model (DOM)‬
X
‭structure of a web page to locate elements based on their relationships to other elements, such‬
‭as parents, children, siblings, or ancestors. In Selenium, XPath traversal helps in identifying‬
‭elements when they cannot be found using simpler locators like id, name, or className. XPath‬
‭traversal uses axes such as parent, child, ancestor, descendant, sibling, and more.‬

‭1.‬‭Traversing to a Parent Element (parent::)‬


‭●‬ ‭Usage‬‭: Traverse upward to find the parent of the current‬‭element.‬
‭●‬ ‭Example‬‭: Assume you want to find the parent <div>‬‭of an <input> element.‬
E‭ xample:‬
‭// Find the parent of the input element with id "username"‬

‭WebElement parentElement =‬

‭driver.findElement(By.xpath("//input[@id='username']/parent::div"));‬

‭●‬ E‭ xplanation‬‭: This XPath expression selects the parent‬‭<div> of the <input> element‬
‭with id="username".‬

‭2.‬‭Traversing to Child Elements (child::)‬


‭●‬ ‭Usage‬‭: Traverse downward to find the child elements‬‭of the current element.‬
‭●‬ ‭Example‬‭: Assume you want to find the child <span>‬‭elements inside a <div> element.‬
‭Example:‬
‭// Find all child span elements of a div with id "container"‬
‭https://www.linkedin.com/in/anshulagarwal30‬

L‭ ist<WebElement> childSpans =‬
‭driver.findElements(By.xpath("//div[@id='container']/child::span"));‬
‭●‬ E‭ xplanation‬‭: This XPath expression selects all <span>‬‭elements that are children of the‬
‭<div> with id="container".‬

‭3.‬‭Traversing to Ancestor Elements (ancestor::)‬


‭●‬ ‭Usage‬‭: Traverse upward to find any ancestor element‬‭(e.g., parent, grandparent).‬
‭●‬ E‭ xample‬‭: Suppose you need to find a <form> element‬‭that is an ancestor of an‬
‭<input> element.‬
E‭ xample:‬
‭// Find the form ancestor of the input element with name "email"‬
‭WebElement formElement =‬
‭driver.findElement(By.xpath("//input[@name='email']/ancestor::form"));‬
‭●‬ E‭ xplanation‬‭: This XPath expression selects the nearest‬‭<form> ancestor of the‬
‭<input> element with the name "email".‬

‭4.‬‭Traversing to Descendant Elements (descendant::)‬


‭●‬ ‭Usage‬‭: Traverse downward to find any descendant element‬‭(e.g., child, grandchild).‬
‭●‬ ‭Example‬‭: Assume you want to find all <a> tags that‬‭are descendants of a <div> element.‬
E‭ xample:‬
‭// Find all descendant anchor tags inside a div with id "main"‬
‭List<WebElement> descendantLinks =‬
‭driver.findElements(By.xpath("//div[@id='main']/descendant::a"));‬
‭●‬ E‭ xplanation‬‭: This XPath expression selects all <a>‬‭elements that are descendants‬
‭(children, grandchildren, etc.) of the <div> with id="main".‬

‭5.‬‭Traversing to Sibling Elements (following-sibling:: and preceding-sibling::)‬


‭●‬ ‭Usage‬‭:‬
‭o‬ ‭Following-sibling‬‭: Traverse to siblings that come‬‭after the current element.‬
‭https://www.linkedin.com/in/anshulagarwal30‬

‭o‬ ‭Preceding-sibling‬‭: Traverse to siblings that come‬‭before the current element.‬


‭Example 1 (Following Sibling):‬
‭// Find the first sibling <p> that follows an <h1> element‬
‭WebElement followingParagraph = driver.findElement(By.xpath("//h1/following-sibling::p[1]"));‬
‭●‬ E‭ xplanation‬‭: This XPath expression selects the first‬‭<p> element that comes after an‬
‭<h1> element.‬
‭Example 2 (Preceding Sibling):‬
‭// Find the first sibling <h3> that precedes an <h1> element‬
‭WebElement precedingHeading = driver.findElement(By.xpath("//h1/preceding-sibling::h3[1]"));‬
‭●‬ E‭ xplanation‬‭: This XPath expression selects the first‬‭<h3> element that comes before an‬
‭<h1> element.‬

‭6.‬‭Traversing to All Descendants (//)‬


‭●‬ U
‭ sage‬‭: The // syntax allows you to select all descendants‬‭of a node, no matter how‬
‭deep they are.‬
‭●‬ ‭Example‬‭: Find all <input> elements inside a <div>.‬
‭Example:‬
‭// Find all input elements anywhere inside a div with class "form-group"‬
L‭ ist<WebElement> allInputs = driver.findElements(By.xpath("//div[@class='form-‬
‭group']//input"));‬
‭●‬ E‭ xplanation‬‭: This XPath expression selects all <input>‬‭elements inside the <div>‬
‭with class "form-group", regardless of how deep they are nested.‬

‭7.‬‭Traversing to All Ancestors (ancestor::)‬


‭●‬ ‭Usage‬‭: Selects all ancestor nodes of the current element.‬
E‭ xample:‬
‭// Find all ancestor div elements of an input element with id "email"‬
‭List<WebElement> allAncestorDivs =‬
‭driver.findElements(By.xpath("//input[@id='email']/ancestor::div"));‬
‭https://www.linkedin.com/in/anshulagarwal30‬

‭●‬ E‭ xplanation‬‭: This XPath expression selects all <div>‬‭elements that are ancestors of the‬
‭<input> element with id="email".‬

‭8.‬‭Traversing to Following Elements (following::)‬


‭●‬ U
‭ sage‬‭: Selects all elements that appear after the‬‭current element in the document,‬
‭not necessarily siblings.‬
E‭ xample:‬
‭// Find all elements that follow a <div> element with class "header"‬

‭List<WebElement> followingElements =‬

‭driver.findElements(By.xpath("//div[@class='header']/following::*"));‬

‭●‬ E‭ xplanation‬‭: This XPath expression selects all elements‬‭that appear after the <div>‬
‭with class "header" in the DOM, regardless of their structure or relation.‬

‭9.‬‭Traversing to Preceding Elements (preceding::)‬


‭●‬ U
‭ sage‬‭: Selects all elements that appear before the‬‭current element in the document,‬
‭not necessarily siblings.‬
E‭ xample:‬
‭// Find all elements that precede a div with class "content"‬

‭List<WebElement> precedingElements =‬

‭driver.findElements(By.xpath("//div[@class='content']/preceding::*"));‬

‭●‬ E‭ xplanation‬‭: This XPath expression selects all elements‬‭that appear before the <div>‬
‭with class "content" in the DOM.‬

‭10.‬‭Selecting Specific Positions ([position()])‬


‭●‬ ‭Usage‬‭: XPath allows you to select elements based on‬‭their position in a list of nodes.‬
‭Example:‬
‭// Find the third <li> element inside a <ul>‬
‭WebElement thirdListItem = driver.findElement(By.xpath("//ul/li[position()=3]"));‬
‭●‬ ‭Explanation‬‭: This XPath expression selects the third‬‭<li> element inside the <ul>.‬
‭https://www.linkedin.com/in/anshulagarwal30‬

‭11.‬‭Traversing to the Current Element (self::)‬


‭●‬ ‭Usage‬‭: The self:: axis refers to the current node‬‭itself.‬
E‭ xample:‬
‭// Find an element where the current element is itself‬
‭WebElement currentElement =‬
‭driver.findElement(By.xpath("//input[@id='search']/self::input"));‬
‭●‬ E‭ xplanation‬‭: This XPath expression selects the current‬‭<input> element‬
‭with id="search".‬

‭12.‬‭Combining Multiple Traversals‬


‭You can combine different XPath axes in a single expression for complex DOM traversal.‬
E‭ xample:‬
‭// Find a sibling of an input element, traverse to its parent, then find a descendant‬
‭WebElement complexElement =‬
‭driver.findElement(By.xpath("//input[@id='username']/following-‬
‭sibling::label/parent::div/descendant::button"));‬
‭●‬ ‭Explanation‬‭: This XPath expression does the following:‬
‭1.‬ ‭Selects the <label> sibling of the <input> with id="username".‬
‭2.‬ ‭Traverses up to the parent <div>.‬
‭3.‬ ‭Selects the <button> descendant of that <div>.‬

‭Key Takeaways:‬
‭●‬ ‭Parent (parent::)‬‭: Selects the immediate parent of‬‭an element.‬
‭●‬ ‭Child (child::)‬‭: Selects the immediate children of‬‭an element.‬
‭●‬ ‭Ancestor (ancestor::)‬‭: Selects all ancestor elements‬‭(parent, grandparent, etc.).‬
‭●‬ ‭Descendant (descendant::)‬‭: Selects all descendants‬‭(children, grandchildren, etc.).‬
‭●‬ F‭ ollowing-sibling (following-sibling::)‬‭: Selects siblings‬‭that appear after the current‬
‭element.‬
‭https://www.linkedin.com/in/anshulagarwal30‬

‭●‬ P
‭ receding-sibling (preceding-sibling::)‬‭: Selects siblings‬‭that appear before the current‬
‭element.‬
‭●‬ ‭Following (following::)‬‭: Selects all elements that‬‭come after the current element.‬
‭●‬ ‭Preceding (preceding::)‬‭: Selects all elements that‬‭come before the current element.‬
‭●‬ ‭Self (self::)‬‭: Refers to the current node itself.‬

‭Xpath Traversal in a Detailed way‬‭:‬

‭ Path traversal in Selenium is a powerful way to navigate through the DOM, allowing you to‬
X
‭select elements based on their hierarchical relationships. The flexibility of XPath traversal makes‬
‭it a valuable tool when simpler locators like id or name are insufficient. By mastering traversal‬
‭axes like ancestor::, descendant::, following-sibling::, and others, you can handle even the most‬
‭complex web structures in your automation scripts.‬
‭1.‬‭Parent Traversal (parent::)‬
‭Goal‬‭: Move‬‭upwards‬‭from the current element to its‬‭parent.‬
‭●‬ W
‭ hat it does‬‭: If you have a child element (e.g., an‬‭<input> inside a <div>), this helps you‬
‭find the parent <div> of the <input> element.‬
‭Example:‬
‭HTML snippet:‬
‭<div class="form-group">‬
‭<input id="username" type="text" />‬
‭</div>‬
‭Step-by-step‬‭:‬
‭1.‬ ‭Identify the child element (<input id="username">).‬
‭2.‬ ‭Use the XPath to move‬‭up‬‭to the parent <div>.‬
‭XPath Expression‬‭:‬
‭WebElement parentDiv = driver.findElement(By.xpath("//input[@id='username']/parent::div"));‬
‭Explanation‬‭:‬
‭●‬ ‭We are finding the <input> element by id="username".‬
‭https://www.linkedin.com/in/anshulagarwal30‬

‭●‬ ‭Then, we move up to its parent element (<div>).‬

‭2.‬‭Child Traversal (child::)‬


‭Goal‬‭: Move‬‭downwards‬‭from the current element to its‬‭immediate child elements.‬
‭●‬ W
‭ hat it does‬‭: If you have a parent element (e.g.,‬‭a <div>), you can find its direct children‬
‭(e.g., <span>, <input>).‬
‭Example:‬
‭HTML snippet:‬
‭<div id="container">‬
‭<span>Item 1</span>‬
‭<span>Item 2</span>‬
‭</div>‬
‭Step-by-step‬‭:‬
‭1.‬ ‭Identify the parent element (<div id="container">).‬
‭2.‬ ‭Use the XPath to move‬‭down‬‭to its child <span> elements.‬
‭XPath Expression‬‭:‬
L‭ ist<WebElement> childSpans =‬
‭driver.findElements(By.xpath("//div[@id='container']/child::span"));‬
‭Explanation‬‭:‬
‭●‬ ‭We are finding the <div> with id="container".‬
‭●‬ ‭Then, we move down to select all its child <span> elements.‬

‭3.‬‭Ancestor Traversal (ancestor::)‬


‭Goal‬‭: Move‬‭upwards‬‭to find any ancestor (e.g., parent,‬‭grandparent) of the current element.‬
‭●‬ W
‭ hat it does‬‭: This helps you find not just the parent,‬‭but any element higher up in‬
‭the DOM tree (like grandparents).‬
‭Example:‬
‭HTML snippet:‬
‭https://www.linkedin.com/in/anshulagarwal30‬

‭<form id="loginForm">‬
‭<div class="form-group">‬
‭<input id="email" type="text" />‬
‭</div>‬
‭</form>‬
‭Step-by-step‬‭:‬
‭1.‬ ‭Identify the child element (<input id="email">).‬
‭2.‬ ‭Use the XPath to move‬‭up‬‭to its ancestor <form>.‬
‭XPath Expression‬‭:‬
‭ ebElement formElement =‬
W
‭driver.findElement(By.xpath("//input[@id='email']/ancestor::form"));‬
‭Explanation‬‭:‬
‭●‬ ‭We are finding the <input> with id="email".‬
‭●‬ ‭Then, we move up to its ancestor <form> element.‬

‭4.‬‭Descendant Traversal (descendant::)‬


‭Goal‬‭: Move‬‭downwards‬‭to find any descendant (child,‬‭grandchild) of the current element.‬
‭●‬ W
‭ hat it does‬‭: It allows you to find all elements nested‬‭inside a parent, no matter‬
‭how deeply they are nested.‬
‭Example:‬
‭HTML snippet:‬
‭<div id="main">‬
‭<div>‬
‭<a href="#">Link 1</a>‬
‭</div>‬
‭<div>‬
‭<a href="#">Link 2</a>‬
‭</div>‬
‭https://www.linkedin.com/in/anshulagarwal30‬

‭</div>‬
‭Step-by-step‬‭:‬
‭1.‬ ‭Identify the parent element (<div id="main">).‬
‭2.‬ ‭Use the XPath to move‬‭down‬‭to all the <a> descendants.‬
‭XPath Expression‬‭:‬
L‭ ist<WebElement> descendantLinks =‬
‭driver.findElements(By.xpath("//div[@id='main']/descendant::a"));‬
‭Explanation‬‭:‬
‭●‬ ‭We are finding the <div> with id="main".‬
‭●‬ ‭Then, we select all its descendant <a> elements, no matter how deeply they are nested.‬

‭5.‬‭Following-Sibling Traversal (following-sibling::)‬


‭Goal‬‭: Move to‬‭next sibling elements‬‭that follow the‬‭current element.‬
‭●‬ W
‭ hat it does‬‭: If you want to find a sibling element‬‭that comes after the current‬
‭element, you can use this.‬
‭Example:‬
‭HTML snippet:‬
‭<h1>Main Heading</h1>‬
‭<p>First paragraph.</p>‬
‭<p>Second paragraph.</p>‬
‭Step-by-step‬‭:‬
‭1.‬ ‭Identify the first element (<h1>Main Heading</h1>).‬
‭2.‬ ‭Use the XPath to find the‬‭next‬‭sibling <p> element.‬
‭XPath Expression‬‭:‬
‭WebElement followingParagraph = driver.findElement(By.xpath("//h1/following-sibling::p[1]"));‬
‭Explanation‬‭:‬
‭●‬ ‭We are finding the <h1> element.‬
‭●‬ ‭Then, we select the first <p> sibling that comes immediately after it.‬
‭https://www.linkedin.com/in/anshulagarwal30‬

‭6.‬‭Preceding-Sibling Traversal (preceding-sibling::)‬


‭Goal‬‭: Move to‬‭previous sibling elements‬‭that come‬‭before the current element.‬
‭●‬ W
‭ hat it does‬‭: This is the opposite of following-sibling.‬‭It lets you find a sibling‬
‭element that comes before the current element.‬
‭Example:‬
‭HTML snippet:‬
‭<h3>Subheading</h3>‬
‭<h1>Main Heading</h1>‬
‭Step-by-step‬‭:‬
‭1.‬ ‭Identify the second element (<h1>Main Heading</h1>).‬
‭2.‬ ‭Use the XPath to find the‬‭previous‬‭sibling <h3> element.‬
‭XPath Expression‬‭:‬
‭WebElement precedingHeading = driver.findElement(By.xpath("//h1/preceding-sibling::h3[1]"));‬
‭Explanation‬‭:‬
‭●‬ ‭We are finding the <h1> element.‬
‭●‬ ‭Then, we select the preceding <h3> sibling element.‬

‭7.‬‭Following Traversal (following::)‬


‭Goal‬‭: Move to all elements that appear‬‭after‬‭the current‬‭element in the document.‬
‭●‬ W
‭ hat it does‬‭: This finds any elements that come after‬‭the current element in the HTML‬
‭document, not just siblings.‬
‭Example:‬
‭HTML snippet:‬
‭<div class="header">Header</div>‬
‭<p>Paragraph after header.</p>‬
‭<div>Another div after header.</div>‬
‭Step-by-step‬‭:‬
‭https://www.linkedin.com/in/anshulagarwal30‬

‭1.‬ ‭Identify the element (<div class="header">).‬


‭2.‬ ‭Use the XPath to select‬‭all elements‬‭that appear after‬‭it.‬
‭XPath Expression‬‭:‬
L‭ ist<WebElement> followingElements =‬
‭driver.findElements(By.xpath("//div[@class='header']/following::*"));‬
‭Explanation‬‭:‬
‭●‬ ‭We are finding the <div> with class "header".‬
‭●‬ ‭Then, we select all the elements that appear after this <div>.‬

‭8.‬‭Preceding Traversal (preceding::)‬


‭Goal‬‭: Move to all elements that appear‬‭before‬‭the‬‭current element in the document.‬
‭●‬ W
‭ hat it does‬‭: This finds any elements that come before‬‭the current element in the‬
‭HTML document, not just siblings.‬
‭Example:‬
‭HTML snippet:‬
‭<div>First div</div>‬
‭<p>First paragraph</p>‬
‭<div class="content">Second div</div>‬
‭Step-by-step‬‭:‬
‭1.‬ ‭Identify the second element (<div class="content">).‬
‭2.‬ ‭Use the XPath to select all elements that appear‬‭before‬‭it.‬
‭XPath Expression‬‭:‬
L‭ ist<WebElement> precedingElements =‬
‭driver.findElements(By.xpath("//div[@class='content']/preceding::*"));‬
‭Explanation‬‭:‬
‭●‬ ‭We are finding the <div> with class "content".‬
‭●‬ ‭Then, we select all the elements that appear before it.‬
‭https://www.linkedin.com/in/anshulagarwal30‬

‭9.‬‭Self Traversal (self::)‬


‭Goal‬‭: Select the current element itself.‬
‭●‬ ‭What it does‬‭: This is used to reference the element‬‭itself.‬
‭Example:‬
‭HTML snippet:‬
‭<input id="search" type="text" />‬
‭Step-by-step‬‭:‬
‭1.‬ ‭Identify the element (<input id="search">).‬
‭2.‬ ‭Use the XPath to refer to the element itself.‬
‭XPath Expression‬‭:‬
‭WebElement searchInput = driver.findElement(By.xpath("//input[@id='search']/self::input"));‬
‭Explanation‬‭:‬
‭●‬ ‭We are finding the <input> element with id="search".‬
‭●‬ ‭The self::input refers to the element itself, confirming that it’s an <input>.‬

‭10.‬‭Position Traversal (position())‬


‭Goal‬‭: Select an element based on its‬‭position‬‭in a‬‭group of elements.‬
‭●‬ W
‭ hat it does‬‭: This lets you choose elements based‬‭on their order, like "select the 3rd‬
‭element."‬
‭Example:‬
‭HTML snippet:‬
‭<ul>‬
‭<li>Item 1</li>‬
‭<li>Item 2</li>‬
‭<li>Item 3</li>‬
‭</ul>‬
‭Step-by-step‬‭:‬
‭https://www.linkedin.com/in/anshulagarwal30‬

‭1.‬ ‭Identify the parent list (<ul>).‬


‭2.‬ ‭Use the XPath to select the‬‭3rd <li>‬‭element.‬
‭XPath Expression‬‭:‬
‭WebElement thirdListItem = driver.findElement(By.xpath("//ul/li[position()=3]"));‬
‭Explanation‬‭:‬
‭●‬ ‭We are selecting the 3rd <li> inside the <ul> by using position()=3.‬

‭ Path traversal is about moving up, down, or sideways in the DOM to find elements based on‬
X
‭their relationships. Here's a quick summary:‬

‭●‬ ‭parent::‬‭– Moves to the parent element.‬


‭●‬ ‭child::‬‭– Moves to child elements.‬
‭●‬ ‭ancestor::‬‭– Moves to ancestors (parents, grandparents).‬
‭●‬ ‭descendant::‬‭– Moves to descendants (children, grandchildren).‬
‭●‬ ‭following-sibling::‬‭– Moves to next siblings.‬
‭●‬ ‭preceding-sibling::‬‭– Moves to previous siblings.‬
‭●‬ ‭following::‬‭– Selects all elements that follow the‬‭current element in the document.‬
‭●‬ p
‭ receding::‬‭– Selects all elements that come before‬‭the current element in‬
‭the document.‬
‭●‬ ‭self::‬‭– Refers to the current element.‬
‭●‬ ‭position()‬‭– Selects elements based on their position‬‭in a group.‬

‭ y mastering these traversal techniques, we can handle even the most complex DOM structures‬
B
‭in Selenium testing!‬

You might also like