Bird
Raised Fist0
Selenium Pythontesting~10 mins

XPath axes (parent, child, sibling) in Selenium Python - Test Execution Trace

Choose your learning style10 modes available
Test Overview

This test verifies locating elements using XPath axes: parent, child, and sibling. It checks if the test can find a child element, then its parent, and a sibling element correctly on a sample webpage.

Test Code - Selenium
Selenium Python
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import unittest

class TestXPathAxes(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.get('https://example.com/xpath-axes-sample')

    def test_xpath_axes(self):
        driver = self.driver
        wait = WebDriverWait(driver, 10)

        # Find child element using child axis
        child = wait.until(EC.presence_of_element_located((By.XPATH, "//div[@id='parent']/child::span[@class='child']")))
        self.assertEqual(child.text, 'Child Element')

        # Find parent element using parent axis
        parent = child.find_element(By.XPATH, "parent::div")
        self.assertEqual(parent.get_attribute('id'), 'parent')

        # Find sibling element using following-sibling axis
        sibling = child.find_element(By.XPATH, "following-sibling::span[@class='sibling']")
        self.assertEqual(sibling.text, 'Sibling Element')

    def tearDown(self):
        self.driver.quit()

if __name__ == '__main__':
    unittest.main()
Execution Trace - 5 Steps
StepActionSystem StateAssertionResult
1Test starts and Chrome browser opensBrowser window opens and navigates to https://example.com/xpath-axes-sample—PASS
2Waits until child element located by XPath using child axis is presentPage loaded with a div#parent containing span.child and span.sibling elementsChecks child.text equals 'Child Element'PASS
3Finds parent element of child using parent axis XPathParent div element with id='parent' foundChecks parent.get_attribute('id') equals 'parent'PASS
4Finds sibling element of child using following-sibling axis XPathSibling span element with class='sibling' found next to childChecks sibling.text equals 'Sibling Element'PASS
5Browser closes and test endsBrowser window closed—PASS
Failure Scenario
Failing Condition: If the XPath does not locate the expected element (child, parent, or sibling) due to incorrect XPath or page structure changes
Execution Trace Quiz - 3 Questions
Test your understanding
Which XPath axis is used to find the parent element of a given node?
Afollowing-sibling
Bchild
Cparent
Ddescendant
Key Result
Using XPath axes like parent, child, and sibling helps navigate complex page structures precisely, making tests more robust and easier to maintain.

Practice

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

Solution

  1. Step 1: Understand XPath axes

    XPath axes describe relationships between nodes, such as parent, child, or siblings.
  2. Step 2: Identify the axis for parent node

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

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

    Parent axis = parent:: [OK]
Hint: Parent axis always uses 'parent::' [OK]
Common Mistakes:
  • Confusing parent:: with child::
  • Using sibling axes to find parent
  • Forgetting axes syntax with double colons
2. Which of the following is the correct XPath syntax to select all child <li> elements of a <ul> element?
easy
A. //ul/parent::li
B. //ul/preceding-sibling::li
C. //ul/following-sibling::li
D. //ul/child::li

Solution

  1. Step 1: Understand child axis usage

    The child:: axis selects direct children of the current node.
  2. Step 2: Apply correct syntax for child li elements

    Using //ul/child::li selects all li children of ul.
  3. Final Answer:

    //ul/child::li -> Option D
  4. Quick Check:

    Child axis syntax = child:: [OK]
Hint: Use 'child::' to select direct children nodes [OK]
Common Mistakes:
  • Using parent:: instead of child::
  • Using sibling axes for children
  • Omitting the axis and expecting child selection
3. Given the following HTML snippet:
<div>
  <h2>Title</h2>
  <p>Paragraph 1</p>
  <p>Paragraph 2</p>
</div>

What does the XPath //h2/following-sibling::p[1] select?
medium
A. No element, XPath is invalid
B. The second p element inside the div
C. The first p element inside the div
D. The h2 element itself

Solution

  1. Step 1: Understand following-sibling axis

    The following-sibling::p[1] selects the first p sibling after the h2 node.
  2. Step 2: Apply to given HTML

    After h2, the first p is "Paragraph 1", so it selects that element.
  3. Final Answer:

    The first <p> element inside the <div> -> Option C
  4. Quick Check:

    following-sibling::p[1] = first p after h2 [OK]
Hint: following-sibling::p[1] picks first p after current node [OK]
Common Mistakes:
  • Selecting the second p instead of the first
  • Confusing preceding-sibling with following-sibling
  • Thinking it selects children instead of siblings
4. You wrote this XPath to select the previous sibling of a div element:
//div/preceding-sibling::div[1]
But it returns no elements. What is the most likely reason?
medium
A. The div has no preceding sibling div elements
B. The syntax is incorrect; axes cannot be used with //
C. You should use parent::div instead
D. preceding-sibling axis selects children, not siblings

Solution

  1. Step 1: Understand preceding-sibling axis

    The preceding-sibling::div[1] selects the immediate previous sibling div element.
  2. Step 2: Reason why no elements returned

    If no elements are returned, it means the current div has no preceding sibling div.
  3. Final Answer:

    The <div> has no preceding sibling <div> elements -> Option A
  4. Quick Check:

    preceding-sibling returns nothing if no previous siblings [OK]
Hint: No preceding sibling means empty result, not syntax error [OK]
Common Mistakes:
  • Thinking axes can't be used with //
  • Confusing parent:: with preceding-sibling::
  • Assuming preceding-sibling selects children
5. You want to select all span elements that are children of a div whose immediate parent is a section. Which XPath expression correctly uses axes to achieve this?
hard
A. //section/child::div/child::span
B. //div/parent::section/child::span
C. //section/parent::div/child::span
D. //span/parent::div/parent::section

Solution

  1. Step 1: Understand the hierarchy

    The span elements are children of div, and that div is a child of section.
  2. Step 2: Build XPath with axes

    //section/child::div/child::span selects span children of div children of section.
  3. Step 3: Check other options

    //div/parent::section/child::span selects span children of section, which is incorrect. //section/parent::div/child::span and D misuse axes or order.
  4. Final Answer:

    //section/child::div/child::span -> Option A
  5. Quick Check:

    Use child axes from section to div to span [OK]
Hint: Chain child:: axes from parent to target child [OK]
Common Mistakes:
  • Using parent:: in wrong direction
  • Selecting wrong node levels
  • Mixing sibling axes instead of child axes
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