2016-03-11 1 views
4

Я искал много, много мест для решения моей проблемы, но не нашел. Я понял, что к настоящему времени Selenium предоставил бы прямое и простое решение для обработки модальных окон/диалогов из Internet Explorer с использованием Java.Есть ли определенное решение Selenium для модальных всплывающих диалогов в Internet Explorer с Java?

Веб-приложение, которое я тестирование имеет следующие характеристики:

  • Это поддерживается только Internet Explorer (никоим образом вокруг этого)
  • Главная принимает идентификатор пользователя и пароль, с «Логин "
  • При загрузке и при загрузке страницы появляется всплывающее окно« Добро пожаловать - Что нового »с галочкой« Не отображать это снова »и кнопку« ОК », чтобы закрыть окно.
  • Я не могу ничего сделать с родительским окном, пока я не отпущу всплывающее окно.
  • В всплывающем окне отключен щелчок правой кнопкой мыши (однако я вижу исходный код, открывая инструменты F12 перед входом и окном всплывающее)

Это то, что я пробовал:

  • getWindowHandles() всегда возвращает 1 для родительского окна, так что это делает driver.switchTo(handle) не применимой
  • Это не аль ERT, так driver.switchTo().alert() или accept() не работает
  • findElement(By whatever) НЕ найти какие-либо элементы в всплывающем окне (например, кнопка «OK» или флажок, и т.д.)
  • Robot класса является единственной вещью, которую я видел работа, где я могу послать нажатия клавиш для перехода к кнопке «OK» и нажмите на него, чтобы закрыть окно ...

Вот мой вопрос:

  • Поскольку есть флажок, чтобы «Дон 't показать это снова ", есть пользователи, для которых будет отображаться модальное всплывающее окно, а некоторые, для которого оно не будет. Мне нужно учитывать оба случая.
  • Мне нужно найти 100% -ный способ узнать, отображается ли всплывающее окно или нет. Если у меня есть эта информация, я могу использовать класс Robot (хотя и «грязный») для выполнения действий при всплывании при необходимости.
  • Я попытался выяснить, включены ли элементы родительского окна с помощью isEnabled(), но даже если элементы не отображаются вручную, пока отображается модальное всплывающее окно, isEnabled() всегда возвращает TRUE - так что это не сработает - есть ли лучший способ проверить это для «заблокированных» элементов в фоновом режиме?

Мои вопросы:

  • Как проверить на наличие модального всплывающего окна, который не отображает 100% времени? (в Internet Explorer 10, используя Selenium с Java)
  • Помимо использования класса Robot, как вы взаимодействуете с фактическими элементами в модальном всплывающем диалоговом окне (например, динамические кнопки радио, которые не всегда отображают одни и те же параметры пользователю)?

спасибо.

+0

Является ли это яблочным апплетом? Если это так, Selenium не поддерживает эти типы приложений. – AlexCharizamhard

+0

Нет, не апплет. Я фактически автоматизировал это с использованием QTP раньше, и там, очевидно, нет проблемы. Объект в репозитории объектов QTP указан как «Окно» со своим «страничным» дочерним элементом (и «ОК» WebButton как дочерний элемент «Страница») –

ответ

0

Создать оператор If с точки зрения булевой переменной, чтобы проверить наличие модального всплывающего окна, которое не отображается в 100% случаев.

Если модальное HTML генерируется (который он должен быть, если это имеет место динамическое содержимое), а затем попробовать:

driver.switchTo() activeElement();.

driver.switchTo(). DefaultContent();

Кроме того, вам может потребоваться вставить ожидание, чтобы html успел сгенерировать.

Если модальный является предупреждение браузера, затем повторите:

alert.accept();

+0

Я читал где-то, что 3 года назад они рассматривали этот формат: 'driver .findElement (By.active()) '. Интересно, что с этим случилось? – djangofan

+0

Похоже, что он не был главным приоритетом за последние 3 года, поэтому я не знаю, увидит ли это когда-нибудь свет. Если кто-то не проявляет инициативу;) [link] (https://groups.google.com/forum/#!topic/selenium-developers/zRHB73qexoQ) –

+0

Я пробовал все вышеперечисленные строки кода, и никто из них не работал , Любой «переключатель» или попытка доступа к текущему активному диалогу по-прежнему относится к родительскому окну. Это, безусловно, позор, что Selenium с использованием Java не может обрабатывать что-то общее, как модальное диалоговое окно. –

0

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

Thread.sleep (5000);

Имейте в виду, что вы не указали переключатель . Вместо этого вы ожидаете, что HTML будет сгенерирован.

Смежные вопросы