В этой серии руководств по Selenium наша следующая статья посвящена причинам исключения ссылки на устаревший элемент, тому, как преодолеть StaleElementReferenceException в Selenium WebDriver, а также следующим
Что такое StaleElementReferenceException в Selenium Webdriver
Устаревший означает старый, испорченный, уже не свежий. Устаревший элемент означает старый элемент или более недоступный элемент. Предположим, что на веб-странице есть элемент, указанный как WebElement в WebDriver. Если DOM изменяется, то WebElement устареет. Если мы попытаемся взаимодействовать с устаревшим элементом, возникнет StaleElementReferenceException .
Исключения TestNG
Каковы причины исключения StaleElement
Мы сталкиваемся с этим исключением ссылки на устаревший элемент, когда элемент, с которым мы взаимодействуем, уничтожается, а затем снова создается заново. Когда это происходит, ссылка на элемент в DOM становится устаревшей. Следовательно, мы не можем получить ссылку на элемент.
Исключение ссылки на устаревший элемент — это ошибка WebDriver, которая возникает в следующих двух случаях.
Причина 1: указанный веб-элемент был удален полностью.
Предположим, что на веб-странице есть элемент, и страница, частью которой был веб-элемент, была обновлена или скрипт selenium перешел на другую веб-страницу. Это приводит к сбою любого последующего взаимодействия с элементом с исключением ссылки на устаревший элемент.
Причина 2: элемент, на который указывает ссылка, больше не привязан к модели DOM
Предположим, что узел документа удален из DOM, ссылка на его элемент станет недействительной. Это приводит к сбою любого последующего взаимодействия с элементом с исключением ссылки на устаревший элемент.
Из двух вышеуказанных причин первый случай встречается чаще, чем второй.
Как преодолеть исключение ссылки на устаревший элемент в Selenium:
Здесь я расскажу показать вам несколько способов преодоления исключения StaleElementReferenceException. Вы также можете обратиться к официальному сообщению Selenium
Решение 1. Обновление веб-страницы
Вы можете обновить страницу и повторить попытку для того же элемента.
Предположим, вы пытаетесь щелкнуть ссылку и получаете исключение устаревшего элемента.
Пример кода для устранения проблемы
12 | driver.navigate().refersh();driver.findElement(By.xpath(“здесь xpath”)).click(); |
Решение 2 : Использование блока Try Catch
Если элемент не присоединен к DOM, вы можете попробовать использовать блок try-catch в цикле for
1234567891011 | //Используя цикл for, он делает 3 попытки.//Если элемент находится в первый раз, то он прерывается из цикла for и выходит из цикла for(int i=0; i<=2;i++){ try { driver.findElement(By.xpath(“здесь xpath”)).click(); ломать; } catch(Exception e){ Sysout(e.getMessage()); }} |
Решение 3. Использование ExpectedConditions.refreshed
Подождите, пока элемент станет доступным
1 | wait.until(ExpectedConditions.presenceOfElementLocated(By .id(“таблица”))); |
Используйте ExpectedConditions.refreshed, чтобы избежать исключения StaleElementReferenceException и снова получить элемент. Этот метод обновляет элемент, перерисовывая его, и мы можем получить доступ к элементу, на который указывает ссылка. -tab-size:4;-webkit-tab-size:4;tab-size:4;размер шрифта:12px!важно;высота строки:15px!важно>wait.until(ExpectedConditions.refreshed(ExpectedConditions.stalenessOf( "таблица")));
1< тд класс = карандаш-код>wait.until(ExpectedConditions.refreshed(ExpectedConditions.stalenessOf(“table”))); |
Решение 4. Использование POM
Мы можем обрабатывать устаревший элемент Ссылка на исключение при использовании POM.
Обязательно к прочтению: шаблон проектирования объектной модели страницы
Мы могли бы избежать исключения StaleElementException, используя POM. В POM мы используем метод initElements(), который загружает элемент, но не инициализирует элементы. initElements() принимает последний адрес. Он инициализируется во время выполнения, когда мы пытаемся выполнить какое-либо действие над элементом. Этот процесс также известен как Отложенная инициализация.
В заключение:
StaleElementReferenceException — очень распространенное исключение, с которым мы сталкиваемся в наших тестах Selenium. . Надеюсь, теперь вы узнали, что это такое и как это исправить.
Если вы найдете какое-либо другое решение для преодоления исключения StaleElementException, вы можете опубликовать его в разделе комментариев ниже.
Как исправить исключение устаревшего элемента?< /h3>
Чтобы исправить эту ошибку устаревшего элемента, мы используем одно из следующих исправлений
1. Чтобы обновить страницу
2. Использование try-catch
3. Использование ExpectedConditions.refreshed
4. Использование POM
Каков список исключений в Selenium?
Обратитесь к этому, чтобы узнать больше об исключениях в Selenium WebDriver.
Как Python обрабатывает исключение устаревших элементов в селене?
Блок try and exclude в Python используется для обработки устаревших исключение элемента в селене.
TAG: qa