Тесты нужно гонять на IE8 и FF18.
В приложении мы выполняем вход на странице аутентификации, дальше попадаем на стартовую страницу. Жмем на определнную линку и открывается поп-ап, с которым работаем как с отдельным окном. После выполнения определенных действий, нажимаем кнопку в поп-апе. Это приводит к следующим результатам:
1) Закрывается поп-ап.
2) Открывается новая страница.
При выполнении вручную новая страница открывается как вкладка браузера, при выполнении через веб-драйвер - как отдельное окно.
Проблема возникает в том, что в FF18 все действия выполняются нормально, а в IE8 переодически в том самом новом окне открывается не новая страница, а первая страница аутентификации приложения(как будто была потеряна сессия). Не могу понять из-за чего это происходит.
Странно также то, что это новое окно иногда открывается "как-надо", но чаще попадают на страницу для входа в приложение. Чищу куки и временные файлы - ситуация повторяется(то есть может открыть нужную страницу, а может стартовую для входа).
Пробовал использовать версии IEWebDriver'a 2.25, 2.29. Ситуация не изменилась.
Буду благодарен за любые подсказки в каком направлении копать или что пробовать.
Открытие новой вкладки в IE8
Автор pixtart, 28 фев 2013 11:50
Сообщений в теме: 4
#1
Отправлено 28 февраля 2013 - 11:50
#2
Отправлено 01 марта 2013 - 08:51
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium
#3
Отправлено 04 марта 2013 - 10:54
Алексей, спасибо за ссылку
#4
Отправлено 04 марта 2013 - 16:31
Как бы не накликать. Но у меня работает переключение в новое окно и возврат назад тоже работает. Не работало сначала, когда настраивал опции, при старте браузера.
Потом опции настраивать не стал (не стал вообще использовать InternetExplorerOptions):
Конкретно код шаблонного метода навигатора, который помогает со страницы перейти на страницу указаного типа по клику на элемент выглядит так (код не самый красивый, но работает):
Метод возвращения на предыдущую вкладку/окно при закрытии текущей вкладки/окна выглядит так:
Потом опции настраивать не стал (не стал вообще использовать 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 ); } }
#5
Отправлено 25 марта 2013 - 10:41
В общем, все работает, если перед началом теста закрыть все существующие окна IE браузер, и вообще эксплорера виндовс(то есть все папки и т.д должны быть закрыты). Этот совет нашел по ссылке Алексея в обсуждении проблемы.
https://code.google..../detail?id=1486
https://code.google..../detail?id=1486
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных