Перейти к содержимому

Фотография

Открытие новой вкладки в IE8


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 4

#1 pixtart

pixtart

    Новый участник

  • Members
  • Pip
  • 11 сообщений
  • ФИО:Михаил

Отправлено 28 февраля 2013 - 11:50

Тесты нужно гонять на IE8 и FF18.

В приложении мы выполняем вход на странице аутентификации, дальше попадаем на стартовую страницу. Жмем на определнную линку и открывается поп-ап, с которым работаем как с отдельным окном. После выполнения определенных действий, нажимаем кнопку в поп-апе. Это приводит к следующим результатам:
1) Закрывается поп-ап.
2) Открывается новая страница.

При выполнении вручную новая страница открывается как вкладка браузера, при выполнении через веб-драйвер - как отдельное окно.
Проблема возникает в том, что в FF18 все действия выполняются нормально, а в IE8 переодически в том самом новом окне открывается не новая страница, а первая страница аутентификации приложения(как будто была потеряна сессия). Не могу понять из-за чего это происходит.
Странно также то, что это новое окно иногда открывается "как-надо", но чаще попадают на страницу для входа в приложение. Чищу куки и временные файлы - ситуация повторяется(то есть может открыть нужную страницу, а может стартовую для входа).

Пробовал использовать версии IEWebDriver'a 2.25, 2.29. Ситуация не изменилась.

Буду благодарен за любые подсказки в каком направлении копать или что пробовать.
  • 0

#2 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 872 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 01 марта 2013 - 08:51

https://code.google..../detail?id=1486
  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#3 pixtart

pixtart

    Новый участник

  • Members
  • Pip
  • 11 сообщений
  • ФИО:Михаил

Отправлено 04 марта 2013 - 10:54

Алексей, спасибо за ссылку
  • 0

#4 owasp

owasp

    Активный участник

  • Members
  • PipPip
  • 87 сообщений

Отправлено 04 марта 2013 - 16:31

Как бы не накликать. Но у меня работает переключение в новое окно и возврат назад тоже работает. Не работало сначала, когда настраивал опции, при старте браузера.
Потом опции настраивать не стал (не стал вообще использовать InternetExplorerOptions):
            var browser = new InternetExplorerDriver();
            browser.SetImplicitTimeout(5);
            TryGoToStartPage(browser);
В IE для всех зон включил "Защищённый режим" (чтобы не пришлось использовать манипуляции с InternetExplorerOptions.IntroduceInstabilityByIgnoringProtectedModeSettings). И всё заработало.

Конкретно код шаблонного метода навигатора, который помогает со страницы перейти на страницу указаного типа по клику на элемент выглядит так (код не самый красивый, но работает):
/// <summary>
        /// Переключение на новую вкладку/окно после щелчка по элементу
        /// </summary>
        /// <typeparam name="TPage"></typeparam>
        /// <param name="clickDestination"></param>
        /// <returns></returns>
        public TPage ToNew<TPage>(IWebElement clickDestination, int waitInSeconds = 20) where TPage : UiComponent, new()
        {
            ReadOnlyCollection<string> prevWindowsCollection = Browser.WindowHandles;
            To(clickDestination);
            /*
            if ((Browser as RemoteWebDriver).Capabilities.BrowserName == "internet explorer")
            {
                Browser.WaitForSeconds(10);
            }         
             */
            IEnumerable<string> newWindowsCollection;
            try
            {
                newWindowsCollection = Browser.WindowHandles.Except<string>(prevWindowsCollection);
            }
            catch (Exception exception)
            {
                throw new Exceptions.SeleniumHelperException(
                    String.Format("При щелчке по элементу {0} ожидалось открытие нового окна или вкладки. Но после щелчка количество окон/вкладок осталось прежним: {1}",
                        clickDestination,
                        prevWindowsCollection.Count
                        ),
                    exception
                    );
            }
            try
            {              
                if (newWindowsCollection.Count() == 1)
                {
                    Browser.SwitchTo().Window(newWindowsCollection.First());
                }
                else
                {
                    throw new Exceptions.SeleniumHelperException(
                        String.Format("При щелчке по элементу {0} ожидалось открытие нового окна или вкладки. Но после щелчка появилось новых окон/вкладок: {1} шт.",
                            clickDestination,
                            newWindowsCollection.Count()
                            )
                        );
                }
            }
            catch (Exception exception)
            {
                throw new Exceptions.SeleniumHelperException(
                    String.Format("При переключении на новую вкладку/окно произошла ошибка"),
                    exception
                    );
            }
            var startTime = DateTime.Now;
            var stopTime = DateTime.Now.AddSeconds(waitInSeconds);
            bool stopWait = false;
            TPage newPage = null;
            do
            {
                try
                {
                    newPage = new TPage();
                    stopWait = true;
                }
                catch (Exception exception)
                {
                    stopWait = false;
                    if (DateTime.Now >= stopTime)
                    {
                        var msg = String.Format("Новая вкладка открылась, но за {0} сек. страница не смогла инициализироваться", waitInSeconds);
                        throw new Exceptions.NotFoundElementException(msg, exception);
                    }
                }
            }
            while (!stopWait);

            return newPage;
        }

Метод возвращения на предыдущую вкладку/окно при закрытии текущей вкладки/окна выглядит так:
/// <summary>
        /// Переключение на предыдущую вкладку/окно после щелчка по элементу
        /// </summary>
        /// <typeparam name="TPage"></typeparam>
        /// <param name="clickDestination"></param>
        /// <returns></returns>
        public TPage ToPrev<TPage>(IWebElement clickDestination) where TPage : UiComponent, new()
        {
            ToPrev(clickDestination);
            return new TPage();
        }

        /// <summary>
        /// Переключение на предыдущую вкладку/окно после щелчка по элементу
        /// </summary>
        /// <typeparam name="TPage"></typeparam>
        /// <param name="clickDestination"></param>
        /// <returns></returns>
        public void ToPrev(IWebElement clickDestination)
        {
            ReadOnlyCollection<string> prevWindowsCollection = Browser.WindowHandles;
            To(clickDestination);
            ReadOnlyCollection<string> newWindowsCollection = Browser.WindowHandles;
            try
            {
                Browser.SwitchTo().Window(newWindowsCollection.Last());
                if (prevWindowsCollection.Count - newWindowsCollection.Count != 1)
                {
                    throw new Exceptions.SeleniumHelperException(
                        String.Format("При закрытии вкладки/окна количество вкладок/окон должно было уменьшиться на 1. Было {0}, стало {1}",
                            prevWindowsCollection.Count,
                            newWindowsCollection.Count
                            )
                        );
                }
            }
            catch (Exception exception)
            {
                throw new Exceptions.SeleniumHelperException(
                    String.Format("При закрытии вкладки/окна произошла ошибка"),
                    exception
                    );
            }
        }

  • 0

#5 pixtart

pixtart

    Новый участник

  • Members
  • Pip
  • 11 сообщений
  • ФИО:Михаил

Отправлено 25 марта 2013 - 10:41

В общем, все работает, если перед началом теста закрыть все существующие окна IE браузер, и вообще эксплорера виндовс(то есть все папки и т.д должны быть закрыты). Этот совет нашел по ссылке Алексея в обсуждении проблемы.

https://code.google..../detail?id=1486
  • 1


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных