web-dev-qa-db-fra.com

Obtenir tous les éléments enfants

Dans Selenium avec Python, est-il possible d’obtenir tous les enfants d’un WebElement sous forme de liste?

58
walshie4

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))
83
Yi Zeng

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.

46
Richard

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++;
    }
 }
0
shikha nagar