Python Selenium: обеспечение загрузки нескольких элементов
При работе с динамически загружаемыми элементами через AJAX может быть сложно подтвердить их внешний вид. Чтобы справиться с этим сценарием, мы будем использовать WebDriverWait Selenium и его различные стратегии, чтобы гарантировать наличие нескольких элементов.
Видимость всех элементов:
Чтобы проверить видимость все элементы, соответствующие определенному селектору, мы можем использовать условие видимости_of_all_elements_located():
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
elements = WebDriverWait(driver, 20).until(
EC.visibility_of_all_elements_located(
(By.CSS_SELECTOR, "ul.ltr li[id^='t_b_'] > a[id^='t_a_'][href]")
)
)
Ожидание определенного количества элементов:
Если вам нужно дождаться загрузки определенного количества элементов, вы можете использовать лямбда-функцию с ExpectedConditions класс:
WebDriverWait(driver, 20).until(
lambda driver: len(driver.find_elements_by_xpath(selector)) > int(myLength)
)
XPath для дочерних элементов:
Чтобы дождаться дочерних элементов внутри родительского элемента, вместо поиска по всему DOM, вы можете использовать выражения XPath:
WebDriverWait(driver, 20).until(
EC.presence_of_element_located(
(By.XPATH, "//ul[@class='ltr']//li[starts-with(@id, 't_b_')]/a[starts-with(@id, 't_a_')]")
)
)
Пользовательские условия ожидания:
Если вы предпочитаете создавать собственные условия ожидания, вы можете определить подкласс webdriver.support.ui.ExpectedCondition:
class MoreThanOne(webdriver.support.ui.ExpectedCondition):
def __init__(self, selector):
self.selector = selector
def __call__(self, driver):
elements = driver.find_elements_by_css_selector(self.selector)
return len(elements) > 1
WebDriverWait(driver, 30).until(MoreThanOne('li'))
Предотвращение потери элементов в DOM:
Чтобы не потерять текущий элемент после операции поиска, сохраните его в переменной перед выполнением ожидания:
element = driver.find_element_by_css_selector('ul')
WebDriverWait(element, 30).until(MoreThanOne('li'))
Вывод:
Эти методы обеспечивают гибкий и надежный способ ожидания загрузки несколько элементов в Selenium. В зависимости от ваших требований выберите подход, который лучше всего соответствует вашему варианту использования.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3