Rary发生StaleElementReferenceException错误

时间:2019-10-14 09:13:06

标签: python-3.x selenium

嗨,我有这段代码正在生成selenium.common.exceptions.StaleElementReferenceException: 消息:陈旧元素参考:元素未附加到页面文档中可能是其根本原因?此代码在10种情况下可以正常运行,但在11种情况下不能。有没有机会进行改进以防止此类错误? 导致失败的行是:

compare_announcement_text(context, option_name, element_offer_type)

if element_offer_type.text == option_name

def select_announcement(context, option_name):
    """Select announcement from 'Offer Type' drop down
            :param context:
            :param option_name:
            :return: Announcement page
        """
    offer_type = context.driver.find_element_by_xpath(Locators.offer_type)
    offer_type.click()
    offer_type_list = context.driver.find_elements_by_xpath(Locators.all_elements_buttons_offer_type)
    offer_type_text = []
    for element_offer_type in offer_type_list:
        compare_announcement_text(context, option_name, element_offer_type)
        offer_type_text.append(element_offer_type.text)
    if option_name not in offer_type_text:
        time.sleep(0.5)  # menu not fully rendered - need to wait
        offer_type_list = context.driver.find_elements_by_xpath(Locators.all_elements_buttons_offer_type)
        for element_offer_type in offer_type_list:
            compare_announcement_text(context, option_name, element_offer_type)
    from features.pages.announcement_page import AnnouncementPage
    return AnnouncementPage(context)


def compare_announcement_text(context, option_name, element_offer_type):
    if element_offer_type.text == option_name:
        WebDriverWait(context.driver, 20).until(
            expected_conditions.visibility_of_all_elements_located(
                (By.XPATH, Locators.all_elements_buttons_offer_type)))
        for check in range(4):
            try:
                ActionChains(context.driver).move_to_element(element_offer_type).click(element_offer_type).perform()
                return
            except selenium.common.exceptions.ElementClickInterceptedException:
                time.sleep(0.5)
        else:
            print(f"Tried click {option_name} for 2 seconds - making final click")
            ActionChains(context.driver).move_to_element(element_offer_type).click(element_offer_type).perform()
    else:
        print(f'Element selected in offer type is not {option_name} and is {element_offer_type.text}')


0 个答案:

没有答案