У Selenium з Python чи можна отримати всіх дочірніх елементів WebElement як список?
Відповіді:
Так, ви можете досягти цього за допомогою find_elements_by_css_selector("*")
або find_elements_by_xpath(".//*")
.
Однак це не схоже на дійсний варіант використання для пошуку всіх дочірніх елементів елемента. Це дорога операція, щоб дістати всіх прямих / непрямих дітей. Далі поясніть, що ви намагаєтесь зробити. Має бути кращий спосіб.
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))
Так, ви можете використовувати find_elements_by_
для отримання дочірніх елементів у списку. Дивіться прив’язки python тут: http://selenium-python.readthedocs.io/locating-elements.html
Приклад HTML:
<ul class="bar">
<li>one</li>
<li>two</li>
<li>three</li>
</ul>
Ви можете використовувати find_elements_by_
подібне так:
parentElement = driver.find_element_by_class_name("bar")
elementList = parentElement.find_elements_by_tag_name("li")
Якщо вам потрібна допомога в конкретному випадку, ви можете відредагувати свою публікацію за допомогою HTML-коду, з якого ви хочете отримати елементи батьків та дітей.
Ось код для отримання дочірніх елементів (у 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++;
}
}
.
перед тим//
важливо, якщо точка відсутня, навіть якщо ви викликаєте метод від елемента, він знову обшукати весь HTML