Проблема с «Элементом больше не действителен» в Selenium- Python - IE 11 - PullRequest
0 голосов
/ 24 апреля 2020

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

selenium.common.exceptions.StaleElementReferenceException: Message: Element is no longer valid

Это самая частая проблема.

В другой раз ошибка при выполнении javascript и Командная строка для IE драйвер перестал работать (закройте программу)

Это код html, который я должен нажать

<div class="body">
    <div id="sidebar">
    <ul class="nav nav-list">
        <li class="nav-header">
            PAGOS
        </li>
        <li>
            <a tabindex="-1" href="../../inputNewOutgoing">
                 <span>Crear Pago Saliente</span> 
            </a>
        </li>
...

Это мой код python:

WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.LINK_TEXT,'Crear Pago Saliente'))).click();

Кроме того, я пытался с этим:

WebDriverWait(driver, 30).until(EC.visibility_of_element_located((By.XPATH, "//*[@id='sidebar']/ul/li[2]/a/span"))).click()

Что не так с этим? Я должен добавить еще ожидания или попробовать с другим видом ожидания?

Ответы [ 2 ]

0 голосов
/ 29 апреля 2020

Я решил эту проблему с помощью этого кода:

try:
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH,"//*[@id='sidebar']/ul/li[2]/a/span"))).click()
except StaleElementReferenceException as Exception:
    print('StaleElementReferenceException while trying to click the hyperlink, trying to click again')
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH,"//*[@id='sidebar']/ul/li[2]/a/span"))).click()
0 голосов
/ 25 апреля 2020

Ссылка на устаревший элемент Исключение вызвано тем, что ваш элемент не подключен к DOM. Много раз ожидание может быть решением этой проблемы, но лучшее решение - реинициализировать элемент в блоке перехвата .

try:
    element = driver.find_element(By.XPATH, '//*[@id='sidebar']/ul/li[2]/a/span')
    element.click()
except StaleElementReferenceException as error:
    print(error)
    print('The stale element reference occurred')
    element = driver.find_element(By.XPATH, '//*[@id='sidebar']/ul/li[2]/a/span')
    element.click()
...