Перейти к содержимому

Фотография

Ошибка при работе с выпадающими меню (webdriver + pytest)


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 7

#1 QAPython

QAPython

    Новый участник

  • Members
  • Pip
  • 13 сообщений


Отправлено 15 июня 2017 - 10:24

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


Есть выпадающее меню со многими субменю. 
Использую webdriver, Python and pytest

 

def menu_menu1_menu2_menu3(self):
menu = driver.find_element_by_css_selector('a.main-menu[title="main-menu"]')
actions = ActionChains(driver)
# place the cursor on menu and click menu1
menu1 = driver.find_element_by_css_selector('#menu1')
actions.move_to_element(menu).click(menu1).perform()
# place the cursor on menu and click menu2
menu2 = driver.find_element_by_css_selector('#menu2')
actions.move_to_element(menu).click(menu2).perform()
# place the cursor on menu and click menu3
menu3 = driver.find_element_by_css_selector('#menu3')
actions.move_to_element(menu).click(menu3).perform()

 

Курсор наводится на меню и кликает меню1. Открывается нужная страница, после этого курсор больше не наводится на menu и появляется ошибка:

 

Chrome: selenium.common.exceptions.StaleElementReferenceException: 
Message: stale element reference: element is not attached to the page document

 

Firefox: selenium.common.exceptions.StaleElementReferenceException: 
Message: Element not found in the cache - perhaps the page has changed since it was looked up

 

Селекторы не меняются, они статические.


  • 0

#2 baxatob

baxatob

    Опытный участник

  • Members
  • PipPipPipPip
  • 258 сообщений
  • ФИО:Юрий
  • Город:Riga

Отправлено 15 июня 2017 - 11:26

Вы же сами написали, что у вас после выбора меню открывается новая страница. И текст ошибки явно говорит об этом. При данной архитектуре теста нужно переназначать переменную menu.


  • 0

#3 QAPython

QAPython

    Новый участник

  • Members
  • Pip
  • 13 сообщений


Отправлено 15 июня 2017 - 13:38

Я это делал, но к сожалению не помогает


  • 0

#4 baxatob

baxatob

    Опытный участник

  • Members
  • PipPipPipPip
  • 258 сообщений
  • ФИО:Юрий
  • Город:Riga

Отправлено 15 июня 2017 - 13:44

А ожидания ставили?


  • 0

#5 QAPython

QAPython

    Новый участник

  • Members
  • Pip
  • 13 сообщений


Отправлено 15 июня 2017 - 14:33

У  меня стоит implicitly_wait. Или нужно еще какие-то добавлять? Если да, то можно пример


  • 0

#6 checo

checo

    Опытный участник

  • Members
  • PipPipPipPip
  • 400 сообщений
  • Город:Н.Новгород

Отправлено 15 июня 2017 - 15:45

При переходе элемент menu устаревает. Надо искать его заново.

Для этого и придуман Page Object, чтоб не обращаться напрямую к элементу и 100 раз не переписывать код его поиска.


  • 0

#7 QAPython

QAPython

    Новый участник

  • Members
  • Pip
  • 13 сообщений


Отправлено 15 июня 2017 - 17:23

При переходе элемент menu устаревает. Надо искать его заново.

Для этого и придуман Page Object, чтоб не обращаться напрямую к элементу и 100 раз не переписывать код его поиска.

Если элемент не находится в переписанном 100 раз коде, который ищет этот элемент заново на новой странице, то проблема не в том, используется Page Object или нет.  А в чем-то другом. Или я заблуждаюсь? Тогда поправьте.


  • 0

#8 checo

checo

    Опытный участник

  • Members
  • PipPipPipPip
  • 400 сообщений
  • Город:Н.Новгород

Отправлено 16 июня 2017 - 09:58

Элемент menu в коде выше ищется ровно 1 раз, проверьте.
А используется после переходов еще 2 раза.
Про Page Object это просто развитие мысли. Если после каждого перехода заново писать menu = ..., то логично это куда-то вынести.
  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных