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

Фотография

Вкладки в Selenium IDE


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

#1 iXAPEK

iXAPEK

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

  • Members
  • Pip
  • 7 сообщений
  • ФИО:Водяков Игорь

Отправлено 23 ноября 2010 - 10:04

Добрый день. На сайте есть несколько ссылок, по клику открывающихся в новом окне (в случае с Firefox в новой вкладке). По завершении проверки кликабельности Selenium открывает тестируемый сайт в последней открытой вкладке и продолжает тест. После теста накапливается около 12-15 вкладок, что есть неудобно. Вопрос такой - есть ли у данного средства возможность закрытия вкладок?
  • 0

#2 stmark

stmark

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

  • Members
  • PipPipPipPip
  • 404 сообщений
  • ФИО:Докучаев Сергей
  • Город:Ярославль


Отправлено 23 ноября 2010 - 10:39

Да, конечно, правда в Selenium IDE для этого нужно знать какой-нибудь идентификатор окна, например id или name:

click | link_locator /*кликаем по ссылке*/
selectPopUp | window_id_or_name /*выбираем появившееся окно или таб*/
close | /*закрываем появившееся окно*/
selectWindow | null /*вновь выбираем прежнее окно и продолжаем работу*/

В случае с Selenium RC и при использовании высокоуровнего языка, знать идентификатор окна не обязательно.

P.S. Открывать страницы в новых окнах или в новых вкладка в Fx настраивается: Инструменты > Настройки > Вкладки > "Вместо новых окон открывать новые вкладки"

Сообщение отредактировал stmark: 23 ноября 2010 - 10:43

  • 0

#3 gri3li

gri3li

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

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

Отправлено 23 ноября 2010 - 10:50

а я чтобы не играться с вкладками, открываю все в одном и том же окне
        public static void openLinkInTheSameWindow(ISelenium selenium, string linkText)
        {
            string jsres = selenium.GetEval("var links = selenium.browserbot.getCurrentWindow().document.body.getElementsByTagName('A');var link = '';for(var i = 0; i < links.length; i++) {var linkText = links.item(i).innerHTML;linkText = linkText.replace(new RegExp('<\\/?[^>]+>', 'gi'), '');if(linkText == '"+linkText+"') {link = links.item(i).href;break;}}link;");
            if (jsres == "") throw new SeleniumException("ne nashel ssliku");
            selenium.Open(jsres);
        }
openLinkInTheSameWindow(selenium, "Подтвердить регистрацию"); -- открывает ссылку "Подтвердить регистрацию" в том же окне.

  • 0

#4 iXAPEK

iXAPEK

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

  • Members
  • Pip
  • 7 сообщений
  • ФИО:Водяков Игорь

Отправлено 01 декабря 2010 - 07:52

2 stmark

click | link_locator /*кликаем по ссылке*/
selectPopUp | window_id_or_name /*выбираем появившееся окно или таб*/
close | /*закрываем появившееся окно*/
selectWindow | null /*вновь выбираем прежнее окно и продолжаем работу*/

Я так понял между selectPopUp и selectWindow разницы нет?
Ввожу как Вы и подсказали. Но проблема - когда просто вручную выполняю эти действия, то все норм, но при запуске автом. теста пишет [error] Could not find window with title window_title
  • 0

#5 stmark

stmark

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

  • Members
  • PipPipPipPip
  • 404 сообщений
  • ФИО:Докучаев Сергей
  • Город:Ярославль


Отправлено 01 декабря 2010 - 09:47

2 stmark
Я так понял между selectPopUp и selectWindow разницы нет?
Ввожу как Вы и подсказали. Но проблема - когда просто вручную выполняю эти действия, то все норм, но при запуске автом. теста пишет [error] Could not find window with title window_title


1. Разница между selectPopUp и selectWindow есть. SelectPopUp может выбирать только что появившееся окно, без указания его id. Правда не всегда это получается правильно. За подробностями обращайтесь к документации по командам Selenium IDE.
2. Что значит "вручную выполняю эти действия"? Скорее всего окно не успевает появится до того, как начинается выполнение команды selectPopUp, поэтому нужно подправить тест:

а) Используем waitForPopUp:

click | link_locator /*кликаем по ссылке*/
waitForPopUp | |1000 /*дожидаемся момента появления нового окна*/
selectPopUp | window_id_or_name /*выбираем появившееся окно или таб*/
close | /*закрываем появившееся окно*/
selectWindow | null /*вновь выбираем прежнее окно и продолжаем работу*/

б) Просто ждём:

click | link_locator /*кликаем по ссылке*/
pause | 1000 /*приостанавливаем выполнение теста на 1 секунду*/
selectPopUp | window_id_or_name /*выбираем появившееся окно или таб*/
close | /*закрываем появившееся окно*/
selectWindow | null /*вновь выбираем прежнее окно и продолжаем работу*/
  • 0

#6 iXAPEK

iXAPEK

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

  • Members
  • Pip
  • 7 сообщений
  • ФИО:Водяков Игорь

Отправлено 01 декабря 2010 - 10:11


2 stmark
Я так понял между selectPopUp и selectWindow разницы нет?
Ввожу как Вы и подсказали. Но проблема - когда просто вручную выполняю эти действия, то все норм, но при запуске автом. теста пишет [error] Could not find window with title window_title


1. Разница между selectPopUp и selectWindow есть. SelectPopUp может выбирать только что появившееся окно, без указания его id. Правда не всегда это получается правильно. За подробностями обращайтесь к документации по командам Selenium IDE.
2. Что значит "вручную выполняю эти действия"? Скорее всего окно не успевает появится до того, как начинается выполнение команды selectPopUp, поэтому нужно подправить тест:

а) Используем waitForPopUp:

click | link_locator /*кликаем по ссылке*/
waitForPopUp | |1000 /*дожидаемся момента появления нового окна*/
selectPopUp | window_id_or_name /*выбираем появившееся окно или таб*/
close | /*закрываем появившееся окно*/
selectWindow | null /*вновь выбираем прежнее окно и продолжаем работу*/

б) Просто ждём:

click | link_locator /*кликаем по ссылке*/
pause | 1000 /*приостанавливаем выполнение теста на 1 секунду*/
selectPopUp | window_id_or_name /*выбираем появившееся окно или таб*/
close | /*закрываем появившееся окно*/
selectWindow | null /*вновь выбираем прежнее окно и продолжаем работу*/



Хорошо. Но как узнать тот самый window_id_or_name? Selenium закрывает вкладку, с которой я пришол, и на все последующие действия говорит

[error] modifyWindow: Window was closed!
[error] Current window or frame is closed!

  • 0

#7 stmark

stmark

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

  • Members
  • PipPipPipPip
  • 404 сообщений
  • ФИО:Докучаев Сергей
  • Город:Ярославль


Отправлено 01 декабря 2010 - 10:16

Хорошо. Но как узнать тот самый window_id_or_name? Selenium закрывает вкладку, с которой я пришол, и на все последующие действия говорит

[error] modifyWindow: Window was closed!
[error] Current window or frame is closed!


Можно просто title указать. И скопируйте весь тест сюда, а то не понятно, что Вы на самом деле выполняете.
  • 0

#8 iXAPEK

iXAPEK

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

  • Members
  • Pip
  • 7 сообщений
  • ФИО:Водяков Игорь

Отправлено 01 декабря 2010 - 10:29

Можно просто title указать. И скопируйте весь тест сюда, а то не понятно, что Вы на самом деле выполняете.


Base URL - http://ntb.mfpa.ru/

<table cellpadding="1" cellspacing="1" border="1">
<tbody>
<tr>
<td>open</td>
<td>/r/</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>link=WWW.XXX.RU</td>
<td></td>
</tr>
<tr>
<td>pause</td>
<td>3000</td>
<td></td>
</tr>
<tr>
<td>selectPopUp</td>
<td>%XXX title%</td>
<td></td>
</tr>
<tr>
<td>close</td>
<td></td>
<td></td>
</tr>
<tr>
<td>selectWindow</td>
<td>null</td>
<td></td>
</tr>
<tr>
<td>open</td>
<td>/r/</td>
<td></td>
</tr>

</tbody></table>

Лог:
# [info] Executing: |open | /r/ | |
# [info] Executing: |click | link=WWW.XXX.RU | |
# [warn] Link has target '_blank', which is not supported in Selenium! Randomizing target to be: selenium_blank10681
# [info] Executing: |pause | 3000 | |
# [info] Executing: |selectPopUp | | |
# [info] Executing: |close | | |
# [info] Executing: |selectWindow | null | |
# [info] Executing: |open | /r/ | |
# [error] modifyWindow: Window was closed!
# [error] Current window or frame is closed!


И после этого я остаюсь на страничке, которая открылась в новой вкладке
  • 0

#9 iXAPEK

iXAPEK

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

  • Members
  • Pip
  • 7 сообщений
  • ФИО:Водяков Игорь

Отправлено 01 декабря 2010 - 10:35

# [info] Executing: |selectPopUp | | |


По поводу этой строчки. Здесь сообщение без title. Если вставляю Title, то получаю:
[error] Could not find window with title %Title%
  • 0

#10 stmark

stmark

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

  • Members
  • PipPipPipPip
  • 404 сообщений
  • ФИО:Докучаев Сергей
  • Город:Ярославль


Отправлено 01 декабря 2010 - 11:08

Напишите в точности какой заголовок у окна, которое появляется. И попробуйте использовать команду selectPopUp вообще без указания тайтла.
  • 0

#11 iXAPEK

iXAPEK

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

  • Members
  • Pip
  • 7 сообщений
  • ФИО:Водяков Игорь

Отправлено 01 декабря 2010 - 12:28

Напишите в точности какой заголовок у окна, которое появляется. И попробуйте использовать команду selectPopUp вообще без указания тайтла.


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

#12 Splinter

Splinter

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

  • Members
  • Pip
  • 25 сообщений
  • ФИО:Гошик

Отправлено 06 мая 2011 - 09:12

Тоже долго мучался игрался с selectpopup, selectwindow, get allwindowsid и все такое... похоже ИДЕ вообще не понимает вкладки и новые окна вызваные openwindow. если это не попап от клика по ссылке. в результате так-же сделал через ж.. разделив тесты и теперь не могу прикрутить gotoif и wile. У кого получилось переключаться по вкладкам? Если хоть у кого-то получилось переключаться по вкалдкам в рамках одного тесткейса - опишите пожалуйста весь процесс подробно с кодом скрипта .. а то шота как-то напряг... :help:
  • 0

#13 Kristall89

Kristall89

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

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


Отправлено 26 февраля 2013 - 05:04

Доброго дня! Та же проблема - в процессе теста (клик по баннеру) открывается новая вкладка, после этого Селениум не может вернуться обратно.
Что нужно: кликнуть по баннеру, открыть новую вкладку, убедиться, что она загрузилась, закрыть вкладку и вернуться к предыдущей, с которой ведется работа.
Мой код выглядит так:
<tr>
	<td>waitForElementPresent</td>
	<td>xpath=id('BANNER-R1')/x:a/x:img</td>
	<td></td>
</tr>
<tr>
	<td>clickAndWait</td>
	<td>xpath=id('BANNER-R1')/x:a/x:img</td>
	<td></td>
</tr>
<tr>
	<td>selectWindow</td>
	<td>title=Быстрые ресурсы - Домашний Интернет - Приморский край - Ростелеком</td>
	<td></td>
</tr>
<tr>
	<td>close</td>
	<td>title=Быстрые ресурсы - Домашний Интернет - Приморский край - Ростелеком</td>
	<td></td>
</tr>
Работаю в selenium IDE, пишу только средствами самого селениума, т.е. языков программирования - не знаю.
Что получается: переход на вкладку происходит, но селениум воспринимает действие
<tr>
	<td>clickAndWait</td>
	<td>xpath=id('BANNER-R1')/x:a/x:img</td>
	<td></td>
</tr>
как ошибку (выделяет красным)
Найти открывшуюся вкладку не может (титл верный, скопирован из файрбага). По команде close - закрывает ту вкладку, с которой работа велась изначально, что в корне неправильно и не дает продолжать тест.
Есть ли возможность как-то заставить его видеть открывшуюся вкладку и возвращаться к предыдущей? Про вариант с разбивкой теста на части поняла, но извращение же :(
  • 0

#14 Kristall89

Kristall89

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

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


Отправлено 26 февраля 2013 - 05:06

Дополнение: при клике на отдельные команды все работает. При выполнении теста целиком, даже в медленном темпе, возникают описанные проблемы. Возможно, следует задать какие либо паузы, что-то подобное?..
  • 0

#15 Kristall89

Kristall89

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

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


Отправлено 26 февраля 2013 - 05:24

И еще дополнение: по кликe на баннер открываются _разные_ страницы одного и того же сайта, можно ли для проверки как-то задать часть адреса, чтобы проверка для всех была одна и та же?
И почему по команде close если кликать каждую команду руками - закрывается верная вкладка, а если запускать тест целиком - изначальная? Можно, конечно, добавить в тест open, но все равно странно...
  • 0


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

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