Python Selenium ожидает изменения атрибута веб-элемента в цикле

Я пытаюсь использовать Selenium с Chrome в Python 3.7, чтобы дождаться раскрытия элемента после имитации щелчка.

<div id = itemArea>
    <div> Heading 1
        <a aria-expanded = "False">
            <span> Expanded Area 1 <span>
        </a>
    </div>
    <div> Heading 2
        <a aria-expanded = "False">
            <span> Expanded Area 2 </span>
        </a>
    </div>

    <!-- More divs to expand... -->
</div>

Поскольку базовые элементы не имеют уникальных идентификаторов или классов, я получаю itemArea div в виде списка, а затем попробуйте перебрать его в цикле for.

# Get button with div itemArea as the parent
itemArea = driver.find_elements(By.CSS_SELECTOR, 'div[id = itemArea] > div')

# For each element, get the anchor element and click it
for elem in itemArea:
    elemBtn = elem.find_element(By.CSS_SELECTOR, 'a')
    elemBtn.click()

    # Code to wait for aria-expanded = "True"
    doStuff

понятно EC.presence_of_element_located((By.ID, "myDynamicElement")) из https://selenium-python.readthedocs.io/waits.html?highlight=EC. Но этот метод использует драйвер.

Как я могу передать свой elem из цикла для этого метода ЕС?

Что-то вроде: EC.presence_of_element_located((elem.find_element(By.ID, "a[aria-expanded = true]"))),

Это однако, возвращает InvalidArgumentException: Message: invalid argument: 'using' must be a string,

Или, может быть, есть лучший подход?

0 ответов

Другие вопросы по тегам