In Selenium with Python is it possible to get all the children of a WebElement as a list?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
Yes, you can achieve it by find_elements_by_css_selector("*") or find_elements_by_xpath(".//*").
However, this doesn’t sound like a valid use case to find all children of an element. It is an expensive operation to get all direct/indirect children. Please further explain what you are trying to do. There should be a better way.
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("http://www.stackoverflow.com")
header = driver.find_element_by_id("header")
# start from your target element, here for example, "header"
all_children_by_css = header.find_elements_by_css_selector("*")
all_children_by_xpath = header.find_elements_by_xpath(".//*")
print 'len(all_children_by_css): ' + str(len(all_children_by_css))
print 'len(all_children_by_xpath): ' + str(len(all_children_by_xpath))
Method 2
Yes, you can use find_elements_by_ to retrieve children elements into a list. See the python bindings here: http://selenium-python.readthedocs.io/locating-elements.html
Example HTML:
<ul class="bar">
<li>one</li>
<li>two</li>
<li>three</li>
</ul>
You can use the find_elements_by_ like so:
parentElement = driver.find_element_by_class_name("bar")
elementList = parentElement.find_elements_by_tag_name("li")
If you want help with a specific case, you can edit your post with the HTML you’re looking to get parent and children elements from.
Method 3
Another veneration of find_elements_by_xpath(".//*") is:
from selenium.webdriver.common.by import By find_elements(By.XPATH, ".//*")
Method 4
You can’t use
all_children_by_css = header.find_elements_by_css_selector("*")
You now need to use
all_children_by_css = header.find_elements(By.XPATH, "*')
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0