atesting.ru Блог Что такое исключение ссылки на устаревший элемент в Selenium Webdriver и как его исправить

Что такое исключение ссылки на устаревший элемент в Selenium Webdriver и как его исправить

В этой серии руководств по Selenium наша следующая публикация посвящена причинам исключения ссылки на устаревший элемент , способам преодоления StaleElementReferenceException в Selenium WebDriver и следующим

Что такое StaleElementReferenceException в Selenium Webdriver

Несвежий — значит старый, разложившийся, уже не свежий. Устаревший элемент означает старый элемент или более недоступный элемент. Предположим, что существует элемент, который находится на веб-странице, на которую ссылается WebElement в WebDriver. Если DOM изменяется, WebElement устаревает. Если мы пытаемся взаимодействовать с застрявшим элементом, возникает исключение StaleElementReferenceException .

 Что такое исключение ссылки устаревшего элемента в Selenium Webdriver и как его исправить

Каковы причины исключения StaleElement Exception

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

 Что такое исключение ссылки на устаревший элемент в Selenium Webdriver и как это исправить

Исключение ссылки на устаревший элемент — это ошибка WebDriver, которая возникает в следующих двух случаях.

Причина 1. Указанный веб-элемент полностью удален.

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

Причина 2: указанный элемент больше не прикреплен к DOM

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

Из двух вышеупомянутых причин первый случай более распространен, чем второй случай.

Как преодолеть исключение ссылки устаревшего элемента в Selenium:

Здесь я покажу вам несколько способов преодоления исключения StaleElementReferenceException. Вы также можете обратиться к официальному сообщению Selenium

Решение 1. Обновление веб-страницы

Вы можете обновить страницу и повторить попытку для того же элемента.

Предположим, вы пытаетесь щелкнуть ссылку и получаете исключение устаревшего элемента.

Пример кода для решения проблемы

12 driver.navigate (). referh (); driver.findElement (By.xpath (& # 34; xpath здесь & # 34;)). Click ();

Решение 2. Использование Try Catch Block

Если элемент не прикреплен к DOM, вы можете попробовать использовать ' блок try-catch 'внутри' цикла for '

1234567891011 //Используя цикл for, он пытается 3 раза. //Если элемент обнаружен впервые, он прерывается из цикла for и выходит из цикла for (int i = 0; i & lt; = 2; i ++) {try {driver.findElement (By.xpath (& # 34 ; xpath здесь & # 34;)). click (); перерыв; } Catch (исключение e) {Sysout (e.getMessage ()); }}

Решение 3. Использование ExpectedConditions.refreshed

Подождите, пока элемент не станет доступен

1 wait.until (ExpectedConditions.presenceOfElementLocated (By.id (& # 34; table & # 34;)));

Используйте ExpectedConditions.refreshed, чтобы избежать исключения StaleElementReferenceException и снова получить элемент. Этот метод обновляет элемент, перерисовывая его, и мы можем получить доступ к элементу, на который указывает ссылка.

1 wait.until (ExpectedConditions.refreshed (ExpectedConditions.stalenessOf (& # 34; table & # 34;)));

Решение 4. Использование POM

Мы можем обрабатывать ссылку на устаревший элемент Исключение при использовании POM.

Мы могли бы избежать исключения StaleElementException с помощью POM. В POM мы используем метод initElements (), который загружает элемент, но не инициализирует элементы. initElements () принимает последний адрес. Он инициализируется во время выполнения, когда мы пытаемся выполнить какое-либо действие с элементом. Этот процесс также известен как Ленивая инициализация .

В заключение:

StaleElementReferenceException — очень распространенное исключение, с которым мы сталкиваемся в наших тестах Selenium. Надеюсь, теперь вы узнали, что это такое и как это исправить.

Если вы найдете какое-либо другое решение для преодоления StaleElementException, вы можете опубликовать свое решение в разделе комментариев ниже.

Как исправить исключение устаревшего элемента?

Чтобы исправить эту ошибку устаревшего элемента, мы используем любое из следующих исправлений
1. Чтобы обновить страницу
2. Использование try-catch
3. Использование ExpectedConditions.refreshed
4. Использование POM

Каков список исключений в Selenium?

Обратитесь к этому, чтобы узнать больше об исключениях в Selenium WebDriver.

Как Python обрабатывает устаревшие элементы исключение в селене?

Блок try and except в Python используется для обработки исключения устаревшего элемента в селене.

TAG: qa