Bird
Raised Fist0
Selenium Javatesting~5 mins

XPath axes (parent, following-sibling, preceding) in Selenium Java - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What does the XPath axis parent:: select?
The parent:: axis selects the parent node of the current node in the XML or HTML document tree.
Click to reveal answer
beginner
How does following-sibling:: axis work in XPath?
The following-sibling:: axis selects all sibling nodes that come after the current node at the same tree level.
Click to reveal answer
intermediate
What is the difference between preceding:: and preceding-sibling:: axes?
preceding:: selects all nodes that come before the current node in the document, regardless of level, while preceding-sibling:: selects only sibling nodes before the current node at the same level.
Click to reveal answer
beginner
Write an XPath to select the parent of a <span> element with id 'price'.
XPath: //span[@id='price']/parent::* selects the parent node of the <span> with id 'price'.
Click to reveal answer
intermediate
In Selenium Java, how would you locate the next sibling <div> after a <h2> element with text 'Title'?
Use XPath: //h2[text()='Title']/following-sibling::div[1] to find the first <div> sibling after the <h2> with text 'Title'.
Click to reveal answer
Which XPath axis selects the parent node of the current node?
Apreceding::
Bparent::
Cfollowing-sibling::
Dchild::
What does following-sibling::div[1] select?
AThe first <code>&lt;div&gt;</code> sibling after the current node
BThe first <code>&lt;div&gt;</code> sibling before the current node
CThe parent <code>&lt;div&gt;</code> node
DAll <code>&lt;div&gt;</code> descendants
Which axis selects all nodes before the current node regardless of level?
Apreceding::
Bfollowing-sibling::
Cpreceding-sibling::
Dparent::
In XPath, how do you select the parent of the current node?
Achild::*
Bfollowing::*
Cancestor::*
Dparent::*
Which XPath axis would you use to find siblings before the current node?
Aparent::
Bfollowing-sibling::
Cpreceding-sibling::
Dchild::
Explain how the XPath axes parent::, following-sibling::, and preceding:: differ in selecting nodes.
Think about the direction and level of nodes each axis selects.
You got /3 concepts.
    Write an example XPath using following-sibling:: to select the next sibling <li> after a <li> with class 'active'.
    Use the axis with an index to get the first following sibling.
    You got /2 concepts.

      Practice

      (1/5)
      1. Which XPath axis selects the immediate parent of the current node?
      easy
      A. following-sibling::
      B. child::
      C. preceding::
      D. parent::

      Solution

      1. Step 1: Understand XPath axes purpose

        XPath axes define relationships between nodes, like parent or siblings.
      2. Step 2: Identify axis for immediate parent

        The parent:: axis selects the direct parent node of the current element.
      3. Final Answer:

        parent:: -> Option D
      4. Quick Check:

        Parent axis = parent:: [OK]
      Hint: Parent axis always uses 'parent::' prefix [OK]
      Common Mistakes:
      • Confusing parent:: with child:: axis
      • Using following-sibling:: to select parent
      • Using preceding:: which selects previous nodes, not parent
      2. Which of the following is the correct XPath syntax to select all following siblings of a node?
      easy
      A. //div/preceding-sibling::*
      B. //div/following::sibling
      C. //div/following-sibling::*
      D. //div/following-sibling

      Solution

      1. Step 1: Recall correct axis syntax for following siblings

        The axis for following siblings is following-sibling:: and it requires a node test like * for all siblings.
      2. Step 2: Check each option syntax

        //div/following-sibling::* uses following-sibling::* which correctly selects all following siblings. Others are incorrect syntax or wrong axis.
      3. Final Answer:

        //div/following-sibling::* -> Option C
      4. Quick Check:

        Following siblings = following-sibling::* [OK]
      Hint: Use 'following-sibling::*' to select all following siblings [OK]
      Common Mistakes:
      • Omitting '::' after axis name
      • Using 'following::sibling' which is invalid
      • Confusing preceding-sibling with following-sibling
      3. Given the HTML snippet:
      <ul>
        <li id='item1'>First</li>
        <li id='item2'>Second</li>
        <li id='item3'>Third</li>
      </ul>

      What text will this XPath select?
      //li[@id='item1']/following-sibling::li[1]/text()
      medium
      A. Second
      B. No text selected
      C. Third
      D. First

      Solution

      1. Step 1: Understand the XPath expression

        The XPath selects the first li element with id 'item1', then selects its first following sibling li element, and gets its text.
      2. Step 2: Identify the first following sibling of 'item1'

        The first following sibling li after 'item1' is the li with id 'item2' which contains text 'Second'.
      3. Final Answer:

        Second -> Option A
      4. Quick Check:

        Following sibling of item1 is item2 = Second [OK]
      Hint: following-sibling::li[1] selects immediate next sibling [OK]
      Common Mistakes:
      • Selecting the current node text instead of sibling
      • Confusing preceding siblings with following siblings
      • Assuming index [1] means first child, not sibling
      4. Identify the error in this XPath expression:
      //div[@class='menu']/preceding-sibling::div[2]
      What is wrong?
      medium
      A. preceding-sibling axis cannot use index
      B. The index should be inside parentheses like (preceding-sibling::div)[2]
      C. XPath axes cannot be used after predicates
      D. No error, expression is correct

      Solution

      1. Step 1: Understand XPath indexing with axes

        When using an index with axes like preceding-sibling::div, the index applies to the node set returned by the axis, so parentheses are needed.
      2. Step 2: Correct the XPath syntax

        The correct syntax to select the second preceding sibling div is (preceding-sibling::div)[2], not preceding-sibling::div[2].
      3. Final Answer:

        The index should be inside parentheses like (preceding-sibling::div)[2] -> Option B
      4. Quick Check:

        Index with axes needs parentheses [OK]
      Hint: Use parentheses around axis before indexing [OK]
      Common Mistakes:
      • Placing index directly after node test without parentheses
      • Assuming axes do not support indexing
      • Confusing predicate indexing with axis indexing
      5. You want to select the parent div of a span element that has a class 'highlight', but only if the parent div has a following sibling div with class 'footer'. Which XPath expression correctly achieves this?
      hard
      A. //span[@class='highlight']/parent::div[following-sibling::div[@class='footer']]
      B. //span[@class='highlight']/parent::div/following-sibling::div[@class='footer']
      C. //span[@class='highlight']/preceding::div[@class='footer']/parent::div
      D. //span[@class='highlight']/parent::div[preceding-sibling::div[@class='footer']]

      Solution

      1. Step 1: Understand the requirement

        Select the parent div of a span with class 'highlight', but only if that parent div has a following sibling div with class 'footer'.
      2. Step 2: Analyze each XPath option

        //span[@class='highlight']/parent::div[following-sibling::div[@class='footer']] selects the parent div of the span and filters it by checking if it has a following sibling div with class 'footer', which matches the requirement exactly.
      3. Final Answer:

        //span[@class='highlight']/parent::div[following-sibling::div[@class='footer']] -> Option A
      4. Quick Check:

        Parent with following sibling filter = //span[@class='highlight']/parent::div[following-sibling::div[@class='footer']] [OK]
      Hint: Filter parent with predicate checking following sibling [OK]
      Common Mistakes:
      • Selecting following sibling instead of filtering parent
      • Using preceding-sibling instead of following-sibling
      • Misplacing axes order causing wrong node selection
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard