Порядок найденных элементов в Selenium - PullRequest
1 голос
/ 22 января 2020

Я использую селен с python для взаимодействия с веб-страницей.
На веб-странице есть таблица. Я пытаюсь получить доступ к его строкам с помощью этого кода:

rows = driver.find_elements_by_class_name("data-row")

Это работает, как ожидалось. Он возвращает все элементы таблицы.
Вопрос в том, гарантированно ли порядок возвращаемых элементов совпадает с их отображением на странице?
Например, будет ли первая строка, которую я вижу в таблице в браузере ВСЕГДА будет 0-й индекс в массиве?

1 Ответ

1 голос
/ 22 января 2020

Вы не должны зависеть от того, возвращает ли Selenium элементы в том же порядке, в каком они отображаются на веб-странице, или Дерево DOM .

Каждый WebElement в пределах HTML DOM может быть однозначно идентифицирован с помощью одной из стратегий локатора .

Хотя вы смогли вытащить все необходимые элементы, используя find_elements_by_class_name(), следующим образом:

rows = driver.find_elements_by_class_name("data-row")

В идеале вам нужно вызвать WebDriverWait для visibility_of_all_elements_located(), и вы можете использовать любую из следующих Стратегий локатора :

  • Использование CLASS_NAME:

    element = WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CLASS_NAME, "data-row")))
    
  • Использование CSS_SELECTOR:

    element = WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, ".data-row")))
    
  • Использование XPATH:

    element = WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//*[@class='data-row']")))
    
  • Примечание : необходимо добавить следующие операции импорта:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

Подробное обсуждение можно найти в WebDriverWait не работает должным образом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...