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

Фотография

selenium не видит новое окно


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

#1 Jenka156

Jenka156

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

  • Members
  • PipPip
  • 137 сообщений
  • ФИО:Женя


Отправлено 23 августа 2011 - 13:42

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

print_r($allWindow = $this->getAllWindowTitles());

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

а если тогда в firefox, например, отключить опцию "Вместо новых окон открывать новые вкладки", это не поможет?
  • 0

#2 barancev

barancev

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

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


Отправлено 23 августа 2011 - 14:53

Поможет.
  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#3 Jenka156

Jenka156

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

  • Members
  • PipPip
  • 137 сообщений
  • ФИО:Женя


Отправлено 24 августа 2011 - 05:34

что то так тоже не работает. все равно в возвращаемом массиве окон, которые видит селениум нет нужного окна.
  • 0

#4 Jenka156

Jenka156

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

  • Members
  • PipPip
  • 137 сообщений
  • ФИО:Женя


Отправлено 25 августа 2011 - 05:21

а кто нибудь может подсказать, почему селениум может не видеть новое открывающееся окно?
во всех браузерах оно открывается как новая вкладка. пробовала изменить в параметрах фаерфокса, чтоб он не открывал окна во вкладках. все равно это не помогает. в массиве окон, который я получаю вот так:
print_r($AllWindow = $this->getAllWindowTitles());
выводится только одно окно - главное....
  • 0

#5 alena b

alena b

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

  • Members
  • Pip
  • 23 сообщений
  • ФИО:Alena

Отправлено 26 августа 2011 - 09:38

пробовала изменить в параметрах фаерфокса, чтоб он не открывал окна

Вы, наверное, меняли параметры вашего фаерфокса. Нужно создать профиль ФФ, настроить его так чтобы он открывал в новом окне, и тесты уже запускать этим профилем. Потому что иначе он просто создает "чистый" экземпляр браузера, который про ваши настройки ничего не знает.
  • 0

#6 Jenka156

Jenka156

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

  • Members
  • PipPip
  • 137 сообщений
  • ФИО:Женя


Отправлено 26 августа 2011 - 10:53

да я в профиле и меняла. потом еще по ходу выполнения теста специально открывала настройки и смотрела. там выключены вкладки...
и во время выполнения теста это окно открывается именно в новом окне, но селениум его title не возвращает
  • 0

#7 selevo

selevo

    Постоянный участник

  • Members
  • PipPipPip
  • 156 сообщений
  • ФИО:Сергей

Отправлено 23 октября 2011 - 19:52

что придумали ?
)))
Тоже застрял
У меня два решения
1) Либо придумать как селениуму сказать что открылось новое окно и что надо бы там теперь жамкать кнопки
2) Как-то обработать ссылку и вставить в комманду селениума open

с вариантом вторым не получается там текст из нескольких ссылок с меняющимся окончанием и по ссылке я кликаю вот так
click
link=http://izhevsk.ru/forummisc/submit_auth_code*

какой коммандой нужно воспользоваться чтоб взять полностью ссылку чтоб потом воспользоваться open ${Link}
типа
----
Спасибо
  • 0
Действительность,собой определяй.
(с)из лучших на свете книг "Звенящие кедры России"

#8 Demetri

Demetri

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

  • Members
  • PipPip
  • 143 сообщений
  • ФИО:Дмитрий
  • Город:Podgorica, MNE


Отправлено 24 октября 2011 - 06:38

Получить ссылку и перейти по ней:
String href = selenium.getAttribute("//a[contains(@href,'forummisc/submit_auth_code')]@href");
selenium.open(href);

А если перейти к Selenium 2 Webdriver, то почти наверняка решится и проблема с распознаванием всплывающих окон
  • 0
Hi! I'm a signature virus. Copy me into your signature to help me spread.

#9 BagoFixer

BagoFixer

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

  • Members
  • Pip
  • 1 сообщений
  • ФИО:Павел

Отправлено 10 августа 2013 - 06:42

но нужного мне окна нет в возвращаемом массиве.

Была такая же проблема.
Выкладываю результат моих трехдневных усилий в эту сторону:
https://docs.google....dit?usp=sharing
Сейчас, в таком варианте, все работает.

Но тема слишком актуальна, по этому предлагаю писать комментарии в файл,
если вдруг что-либо поменяется и перестанет работать.
Также буду рад более простым способам решения этой задачи.
  • 0

#10 PunkLiner

PunkLiner

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

  • Members
  • Pip
  • 73 сообщений


Отправлено 10 августа 2013 - 14:02


пробовала изменить в параметрах фаерфокса, чтоб он не открывал окна

Вы, наверное, меняли параметры вашего фаерфокса. Нужно создать профиль ФФ, настроить его так чтобы он открывал в новом окне, и тесты уже запускать этим профилем. Потому что иначе он просто создает "чистый" экземпляр браузера, который про ваши настройки ничего не знает.

И этого может быть недостаточно. Необходимо эти настройки указать при инициализации драйвера в коде.
Что-то типа такого:
FirefoxProfile profile = new FirefoxProfile()
profile.setPreference("НАСТРОЙКА", true/false)
У меня было что то подобное, посмотрите мою тему, может что то подчеркнете для себя
  • 0

#11 Nwd

Nwd

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

  • Members
  • Pip
  • 28 сообщений

Отправлено 12 августа 2013 - 09:17

Попробуйте с этим примером
//Запоминаем основное окно
String winHandleBefore = driver.getWindowHandle();
//Выполняем действие которое открывает новое окно
driver.findElement(By.xpath("")).click();
//Переключаемся на новое окно
for(String winHandle : driver.getWindowHandles()){
driver.switchTo().window(winHandle);
}
// Выполняем действия в новом окне
driver.findElement(By.xpath("")).click();
driver.findElement(By.id("")).click();
//Закрываем новое окно, если оно больше не нужно
driver.close();
//Переключаемся назад к первоначальному окну
driver.switchTo().window(winHandleBefore);
//Продолжаем с первоначальным окном
driver.findElement(By.linkText("")).click();
  • 0

#12 Petrov.Sergey

Petrov.Sergey

    Опытный участник

  • Members
  • PipPipPipPip
  • 446 сообщений
  • ФИО:Petrov Sergey
  • Город:МО, Лобня


Отправлено 12 августа 2013 - 09:26

//Переключаемся на новое окно
for(String winHandle : driver.getWindowHandles()){
driver.switchTo().window(winHandle);
}

Простите, а зачем форить по всем окнам, если Вам нужно только последнее, только что открывшееся окно?
  • 0
Форум читаю набегами. По возникшим вопросам можно в скайп (в профиле).

#13 Snap

Snap

    Специалист

  • Members
  • PipPipPipPipPip
  • 980 сообщений
  • ФИО:Роман
  • Город:Москва


Отправлено 25 сентября 2013 - 09:39


//Переключаемся на новое окно
for(String winHandle : driver.getWindowHandles()){
driver.switchTo().window(winHandle);
}

Простите, а зачем форить по всем окнам, если Вам нужно только последнее, только что открывшееся окно?

А как получить последнее открывшееся окно без for?
  • 0

#14 vmaximv

vmaximv

    Опытный участник

  • Members
  • PipPipPipPip
  • 350 сообщений

Отправлено 25 сентября 2013 - 10:23

Если грубо:
Set<String> currentWindowHandles = driver.getWindowHandles();
//some actions
String newWindowHandle = currentWindowHandles.removeAll(driver.getWindowhandles()).iterator().next();

  • 0

#15 Snap

Snap

    Специалист

  • Members
  • PipPipPipPipPip
  • 980 сообщений
  • ФИО:Роман
  • Город:Москва


Отправлено 25 сентября 2013 - 11:11

Если грубо:

Set<String> currentWindowHandles = driver.getWindowHandles();
//some actions
String newWindowHandle = currentWindowHandles.removeAll(driver.getWindowhandles()).iterator().next();

Чет у меня не работает... //неверные аргументы или типы
  • 0

#16 vmaximv

vmaximv

    Опытный участник

  • Members
  • PipPipPipPip
  • 350 сообщений

Отправлено 25 сентября 2013 - 11:31

Ну я ж говорил что "грубо" :)
Set<String> windowHandles = driver.getWindowHandles();
//some actions
Set<String> currentWindowHandles = driver.getWindowHandles();
currentWindowHandles.removeAll(windowHandles);
String newWindowHandle = currentWindowHandles.iterator().next();

  • 1

#17 Snap

Snap

    Специалист

  • Members
  • PipPipPipPipPip
  • 980 сообщений
  • ФИО:Роман
  • Город:Москва


Отправлено 25 сентября 2013 - 12:09

Ну я ж говорил что "грубо" :)

Set<String> windowHandles = driver.getWindowHandles();
//some actions
Set<String> currentWindowHandles = driver.getWindowHandles();
currentWindowHandles.removeAll(windowHandles);
String newWindowHandle = currentWindowHandles.iterator().next();

Спасибо, теперь смысл ясен.
Я просто пробовал без удаления:
//запоминаем текущее окно
//открываем новое окно
Set<String> currentWindowHandles = driver.getWindowHandles();
String newWindowHandle = currentWindowHandles.iterator().next();
driver.switchTo().window(newWindowHandle);
но почему-то переключения не происходило...

PS. в C# в этом плане намного легче - просто индекс окна указываешь
  • 0

#18 vmaximv

vmaximv

    Опытный участник

  • Members
  • PipPipPipPip
  • 350 сообщений

Отправлено 25 сентября 2013 - 12:21

PS. в C# в этом плане намного легче - просто индекс окна указываешь

В джаве тоже можно взять последний элемент, но делать так нельзя, и советую избавиться от этого как можно быстрее :)
getWindowHandles не гарантирует хронологический порядок в списке. Особенно это касается IE.
  • 0


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

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