Есть метод, который возвращает набор елементов меню.
def get_menu_elements(self):
manu_elements = self.browser.find_elements(**self.global_locators[‘menu_elements’])
return manu_elements
Я хочу пройтись по этому списку и выполнить click() по каждому.
for link in menu_links:
link.click()
Но тут возникает проблема - при клике на первом элементе остальные перестают существовать, так как страница перезагружается и в итоге вылетает ошибка
stale element reference: element is not attached to the page document
Каждый раз находить элементы после отрисовки страницы не очень хочется, возможно можно сохранить все элементы(или атрибуты) в список, и дальше их искать и кликать в цикле.
Если кто придумает решение - буду очень признателен
А почему бы просто не использовать конструкцию типа: element.click() wait.until(EC.element_to_be_clickable...
? И тогда уже просто циклически кликать по элементам, ожидая пока они отрисутются?
while driver.find_elements_by_id("id"):
driver.find_element_by_id('id').click()
wait.until(EC.element_to_be_clickable((By.ID, "id")))
else:
print('всё!')
menu_elements = get_menu_elements()
number_of_elements = len(menu_elements)
for i in range(number_of_elements):
menu_elements = get_menu_elements()
link = menu_elements[i]
link.click()
Иными словами:
Сначала считаем сколько элементов меню получилось len(menu_elements).
Потом в цикле обновляем список menu_elements, т.к. старые перестают существовать и кликаем по i-му элементу меню.
Ну оно то можно сохранить какие то атрибуты элементов в массив, и потом по этому массиву пройтись, в принципе, работать будет.
тут вот типа такого костыля придумали: