2013-03-19 1 views
0

Я борюсь с проблемой StaleElementReferenceException. Я видел довольно много дискуссий по этой теме, но мне не удалось найти решение проблемы, с которой я столкнулся.StaleElementReference Exception

Тест состоит в том, чтобы получить все ссылки на нижнем колонтитуле веб-страницы, а затем проверить, активна ли ссылка или нет, щелкнув по ней и подтвердив название страницы.

Прежде всего, я нахожу & хранить все ссылки в списке массивов. Я сравниваю имя ссылки со значениями, полученными из базы данных. Затем для каждой ссылки я нажимаю на нее и проверяю заголовок страницы. Затем, используя «driver.navigate.back()», вернитесь к исходной странице и продолжайте с остальными ссылками.

Однако, когда управление возвращается к странице, происходит StaleElementReferenceException.

Может ли кто-нибудь предложить мне выход из этого?

Спасибо, Anuj

ответ

2

Когда вы храните все ссылки в футере вы захватывая те элементы, так как они в этот момент времени. При переходе на другую страницу эти конкретные элементы больше не существуют. Когда вы возвращаетесь назад, эти элементы создаются заново.

Хотя элементы одинаковы по идентификаторам, они представляют собой разные экземпляры, и, таким образом, ваши старые элементы в вашем массиве являются «устаревшими».

Я предлагаю хранить только идентификаторы ссылок (а не сами элементы ссылок) в виде строк, а затем искать их каждый раз, когда страница загружается.

+1

Это абсолютно правильно. Другой вариант - открыть ссылки в новых окнах или вкладках. Таким образом, главное окно все равно будет содержать правильные экземпляры элементов. – aimbire

0

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

Так что это вызывает исключение, я обращался с этим еще раз инициализацией элементов, как показано ниже -

PageFactory.initElements(driver, Test.class); 

Итак, когда вы вернуться обратно, убедитесь, что вы инициализация всех элементов этой страницы снова, так что объект не устареет.

0

Вы можете обрабатывать и приходящий на новую вкладку следующим образом:

Строка 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);