带有循环并单击的Python + Selenium StaleElement

时间:2018-12-11 18:14:33

标签: python selenium selenium-webdriver

我有反复访问的链接,本质上我在做的是单击链接并断言新页面具有新页面上链接文本的标题。

对于第一个来说,它工作正常,直到我driver.back()并寻找下一个链接。

当尝试查找第二个元素的标题时,我得到了StaleElementReference。但是我无法重新找到它,因为它是通过循环搜索的。

 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 :(得分:0)

通过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)