Dans Selenium avec Python, est-il possible d’obtenir tous les enfants d’un WebElement sous forme de liste?
Oui, vous pouvez y parvenir avec find_elements_by_css_selector("*")
ou find_elements_by_xpath(".//*")
.
Cependant, cela ne semble pas être un cas d'utilisation valide pour trouver tous les enfants d'un élément. Obtenir tous les enfants directs/indirects coûte cher. S'il vous plaît expliquer davantage ce que vous essayez de faire. Il devrait y avoir un meilleur moyen.
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))
Oui, vous pouvez utiliser find_elements_by_
pour récupérer des éléments enfants dans une liste. Voir les liaisons python ici: http://Selenium-python.readthedocs.io/locating-elements.html
Exemple HTML:
<ul class="bar">
<li>one</li>
<li>two</li>
<li>three</li>
</ul>
Vous pouvez utiliser le find_elements_by_
ainsi:
parentElement = driver.find_element_by_class_name("bar")
elementList = parentElement.find_elements_by_tag_name("li")
Si vous souhaitez obtenir de l'aide sur un cas particulier, vous pouvez modifier votre message avec le code HTML que vous souhaitez utiliser pour obtenir des éléments parent et enfants.
Voici un code pour obtenir les éléments enfants (en Java):
String childTag = childElement.getTagName();
if(childTag.equals("html"))
{
return "/html[1]"+current;
}
WebElement parentElement = childElement.findElement(By.xpath(".."));
List<WebElement> childrenElements = parentElement.findElements(By.xpath("*"));
int count = 0;
for(int i=0;i<childrenElements.size(); i++)
{
WebElement childrenElement = childrenElements.get(i);
String childrenElementTag = childrenElement.getTagName();
if(childTag.equals(childrenElementTag))
{
count++;
}
}