Python + Selenium StaleElement с циклом и щелчком - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть ссылки, которые я перебираю, по сути, я делаю, щелкая ссылку и утверждая, что на новой странице есть заголовок текста ссылки на новой странице.

Это прекрасно работает дляПервый, пока я не Driver.back () и не ищу следующую ссылку.

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

 flyoutNavLinkItems = driver.find_elements_by_css_selector(".header-desktop div#megamenu .navLinkItem")
    self.assertEqual(len(flyoutNavLinkItems), constant.FLYOUT_CAT_COUNT)

    for item in flyoutNavLinkItems:
        categoryTitle = driver.find_element_by_css_selector('span.navLinkText').text
        print(f'Category Title {categoryTitle}')
        item.click()

        self.assertIn(categoryTitle, driver.title.upper())
        driver.back()
        time.sleep(2)

1 Ответ

0 голосов
/ 11 декабря 2018

Нашел обходной путь с помощью css-селектора n-го потомка и индекса:

for index, item in enumerate(flyoutNavLinkItems):
    print(f'Index {index}')
    selectorToSearch = f'div#megamenu .navLinkItem:nth-of-type({index + 1})'
    item = driver.find_element_by_css_selector(selectorToSearch)
    categoryTitle = driver.find_element_by_css_selector(selectorToSearch + ' span.navLinkText').text
    print(f'Category Title {categoryTitle}')
    item.click()
    time.sleep(2)
    self.assertIn(categoryTitle, driver.title.upper())
    driver.back()
    time.sleep(2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...