user3679414
user3679414

Reputation: 321

Find next sibling element in Selenium, Python?

I have this HTML:

<body>
    <p id='one'> 1A </p>
    <p id='two'> 2A </p>
    <p id='three'> 3A </p>
    <p id='four'> 4A </p>
    <p id='five'> 5A </p>
    <p id='six'> 6A </p>
    <p id='seven'> 7A </p>
</body>

I use the code below to get the first p tag element:

elem = driver.find_element_by_id('one')

Now, how to find the next sibling of elem?

Upvotes: 31

Views: 49179

Answers (3)

ibodi
ibodi

Reputation: 1746

We need to pass elem to a JavaScript function and execute it. We cannot use it's name inside the JS function when we are passing elem to it, but we can use arguments. Here's an example of how you can get the next sibling of elem:

next_sibling = driver.execute_script("""
    return arguments[0].nextElementSibling
""", elem)

Take a look at this little example of how execute_script() function works:

sum = driver.execute_script("""
    console.log(arguments[0].innerHTML) // will print innerHTML of the element in console logs of the page
    return arguments[1] + arguments[2]
""", elem, 5, 6)

print(sum) # 11

Upvotes: 18

jahr
jahr

Reputation: 631

I want to correct Mark Rowlands's answer,. The correct syntax will be

driver.find_element_by_xpath("//p[@id='one']/following-sibling::p")

Upvotes: 38

Mark Rowlands
Mark Rowlands

Reputation: 5453

Using Xpath:

driver.find_element_by_xpath("//p[@id, 'one']/following-sibling::p")

Upvotes: 13

Related Questions