Исключение StaleElementReference
Я борюсь с StaleElementReferenceException
проблема. Я видел довольно много дискуссий по этой теме, но я не смог найти решение проблемы, с которой я столкнулся.
Тест состоит в том, чтобы получить все ссылки в нижнем колонтитуле веб-страницы, а затем проверить, активна ли ссылка или нет, нажав на нее и проверив заголовок страницы.
Прежде всего, я нахожу и храню все ссылки в списке массивов. Я сравниваю имя ссылки со значениями, полученными из базы данных. Затем для каждой ссылки я нажимаю на нее и проверяю заголовок страницы. Затем, используя "driver.navigate.back()", вернитесь на исходную страницу и перейдите к остальным ссылкам.
Однако когда элемент управления возвращается на страницу, StaleElementReferenceException
происходит.
Кто-нибудь может предложить мне выход из этого?
Спасибо анудж
3 ответа
Когда вы сохраняете все ссылки в нижнем колонтитуле, вы захватываете эти элементы такими, какие они есть на данный момент. При переходе на другую страницу эти конкретные элементы больше не существуют. Когда вы вернетесь назад, эти элементы были созданы заново.
Хотя идентификаторы элементов одинаковы, они представляют собой разные экземпляры, и поэтому ваши старые элементы в вашем массиве "устаревшие".
Я бы предложил хранить в качестве строк только идентификаторы ссылок (но не сами элементы ссылок), а затем искать их каждый раз при загрузке страницы.
Вы можете обрабатывать переходы на новую вкладку следующим образом:
String baseHandle = driver.getWindowHandle ();
Set<String> sr = driver.getWindowHandles();
if (sr.size()>1){
Set<String> sr1 = driver.getWindowHandles();
sr1.remove(baseHandle);
Iterator itr = sr1.iterator();
driver.switchTo().window(itr.next().toString());
System.out.println("Page Title is : " + driver.getTitle());
driver.close();
driver.switchTo().window(baseHandle);
Я столкнулся с подобной проблемой, в моем случае, когда я набираю что-то в текстовое поле, он переходит на другую страницу, поэтому, когда я возвращаюсь на предыдущую страницу, этот объект устаревает.
Так что это вызывало исключение, я обработал его, снова инициализировав элементы, как показано ниже:
PageFactory.initElements(driver, Test.class);
Поэтому, когда вы вернетесь назад, убедитесь, что вы снова инициализируете все элементы этой страницы, чтобы объект не устарел.