Eclipse + TestNG + ui-map.js

54 views
Skip to first unread message

Alexander

unread,
Dec 2, 2010, 1:32:43 PM12/2/10
to Agile Testing
Здравствуйте товарищи,

Поделитесь можалуйста опытом использования "ui-map.js" под TestNG в
Eclipse. Как подключить к проекту этот файл и заставить его работать?
Желательно с примерами т.к. особого опыта в разработке не имею.
Контент файла примерно такой:

var uiMap = new UIMap();

//All pages Pageset
uiMap.addPageset({
name: 'allPages',
description: 'all http://mysite.com pages',
pathRegexp: '.*'
});

uiMap.addElement('orderHistoryPage', {
name: 'ordersList',
description: '[+], [-] buttons to expand and collapse orders by
its index',
args: [
{
name: 'index',
description: 'Order index in the table (min=1)',
defaultValues: range(1,500)
}
],
getLocator: function(args)
{
var index = args['index'];
return "//div[@id='main_content']/div/div/div[7]/div[2]/div["+
index +"]/div[1]/table/tbody/tr/td[1]/a"
}
});

Да и вообще стоит ли это делать?
Было испробовано 2 метода:

Первый:
1) Распаковываем jar файл сервера. Это может сделать любой zip
архиватор
2) Скачиваем ExtJS и кладем ее в распакаванный сервер в папку /core/
lib/
3) Правим файл /core/RemoteRunner.html. Добавляем в него загрузку
новой библиотеки
<script language="JavaScript" type="text/javascript" src="lib/
ext.js"></script>

Второй:
1) назвать файл user-extensions.js
2) подключить к проекту как библиотеку

Положительного результата так и не добился.

Благодарен всем откликнувшимся.

Mikalai Alimenkou

unread,
Dec 2, 2010, 6:29:15 PM12/2/10
to Agile Testing
Если вы используете режим RC, то вы явно используете язык
программирования, а он даст вам гораздо больше, чем UI-Element. Но все
же в качестве ответа на поставленный вопрос нужно передать файл с
помощью специальной опции RC (название можно оставить на домашнее
задание). Эта опция была задумана для запуска тестов, написанных в
режиме Core с помощью UI-Element.

On Dec 2, 8:32 pm, Alexander <brext2...@gmail.com> wrote:
> Здравствуйте товарищи,
>
> Поделитесь можалуйста опытом использования "ui-map.js" под TestNG в
> Eclipse. Как подключить к проекту этот файл и заставить его работать?
> Желательно с примерами т.к. особого опыта в разработке не имею.
> Контент файла примерно такой:
>
> var uiMap = new UIMap();
>
> //All pages Pageset
> uiMap.addPageset({
>     name: 'allPages',

>         description: 'allhttp://mysite.compages',

Alexander Krysko

unread,
Dec 3, 2010, 6:12:44 AM12/3/10
to acceptanc...@googlegroups.com
Спасибо за быстрый отклик,
Думаю что не лишним будет добавить немного конкретики. В данный момент я стараюсь использовать Java для написания тестовых сценариев. Если можно пожалуйста напишите подход как можно отказаться от использования "uimap.js", тоесть идея чтобы осталась но реализовать её по-другому.

По поводу домашнего задания... Я изначально запуская RC сервер передавал ему параметр "-userExtensions". Предварительно добавив ui-map код сюда: core\scripts\user-extensions.js
Теперь осталась задача как правильно обращаться к этому ui-map.


2010/12/3 Mikalai Alimenkou <lumii.su...@gmail.com>
--
Вы получили это сообщение, поскольку подписаны на группу Agile Testing.

Чтобы добавлять сообщения в эту группу, отправьте письмо по адресу acceptanc...@googlegroups.com.
Чтобы отменить подписку на эту группу, отправьте сообщение по адресу acceptance-test...@googlegroups.com.
О дополнительных функциях можно узнать в группе по адресу http://groups.google.com/group/acceptance-testing?hl=ru.




--
Best Regards,
Alexander Krysko

Mikalai Alimenkou

unread,
Dec 3, 2010, 3:07:29 PM12/3/10
to Agile Testing
Что же, добавим конкретики. Для того, чтобы идея осталась вместо
понятия page в UI-Element нужно использовать концепцию PageObject -
класс в Java, который полностью отвечает за одну страницу. У него есть
методы, которые описывают возможные операции на этой странице, а
локаторы и все остальное спрятано от теста. Тест просто вызывает
методы страницы. При переходе на другую страницу, к примеру по ссылке
или отправке формы, метод возвращает объект класса этой страницы и
тест продолжает использовать его для работы. Таким образом разделяются
детали реализации от тестовой логики. Дальше почитать про данную
концепцию можно тут: http://www.cheezyworld.com/2010/11/09/ui-tests-not-brittle,
на сайте Tellurium, на infoq, да и просто поискав в интернете.

По поводу начального вопроса думаю стоит глянуть сюда:
http://functionaltestautomation.blogspot.com/2009/09/using-ui-elements-with-selenium-rc.html.
Использование сильно зависит от того как вы запускаете сервер, если
прямо из Java, то нужно передавать File прямо в API как в статье (там
немного сложно, можно сделать проще). Если сервер запускается
отдельно, то нужно передать с параметром путь к файлу и он будет
подтянут. А использовать его так же как и в режиме IDE и Core. Просто
применяем локаторы.

On 3 Грд, 13:12, Alexander Krysko <brext2...@gmail.com> wrote:
> Спасибо за быстрый отклик,
> Думаю что не лишним будет добавить немного конкретики. В данный момент я
> стараюсь использовать Java для написания тестовых сценариев. Если можно
> пожалуйста напишите подход как можно отказаться от использования "uimap.js",
> тоесть идея чтобы осталась но реализовать её по-другому.
>
> По поводу домашнего задания... Я изначально запуская RC сервер передавал ему
> параметр "-userExtensions". Предварительно добавив ui-map код сюда:
> core\scripts\user-extensions.js
> Теперь осталась задача как правильно обращаться к этому ui-map.
>

> 2010/12/3 Mikalai Alimenkou <lumii.subscri...@gmail.com>

> > acceptance-test...@googlegroups.com<acceptance-testing%2Bunsubs cr...@googlegroups.com>

Alexander Zhovnuvaty

unread,
Mar 16, 2011, 9:48:02 AM3/16/11
to acceptanc...@googlegroups.com
По поводу PageObject концепции: наткнулся на проблему для которой пока не нашел красивого решения. Допустим на странице есть список линков (скажем список мужской одежды: рубашки, налстуки, штаны и т.д.). Клик по любому из этих линков переводит пользователя на другую страницу. Страницы для этих объектов - разные, то есть должны иметь разные классы. Вопрос: эта концепция предполагает получение объекта класса той другой страницы в зависимости от выбранного элемента в списке (то есть параметризированный выбор). Например при выборе элемента "Галстуки" - возвращается объект класса ГалстукПейдж, при выборе элемента "Рубашки" - возвращается объект РубашкиПейдж. Или же надо реализовывать несколько не параметризированных методов которые подходят для каждого конктерного случая? То есть для получения всех типов одежд есть независимые методы.

Mikalai Alimenkou

unread,
Mar 16, 2011, 10:03:15 AM3/16/11
to Agile Testing
Очень хороший вопрос. Ответ на него зависит от специфики вашего
приложения:

1. Если страницы на которые вы попадаете совершенно разные, то я бы
советовал иметь различные методы для перехода по разным ссылкам.
2. Если же это страницы похожие (к примеру страницы со списками
продукции), то я бы сделал из них иерархию с некоей базовой страницей.
Базовая страница содержала бы общие операции и данные, а каждый
наследник возможно добавлял бы что-то еще. Тогда для перехода по
ссылке я бы сделал один метод, который принимал бы имя ссылки
(желательно через enum) и работал бы на Generics. Тогда каждый, кто
его вызывает знает на какую страницу ему нужно и указывает ее класс,
чтобы не было кастов. Это очень удобно. Такой способ часто также
используют, когда вариантов перехода много. Пример на псевдокоде
(писал быстро, не проверял компилируется ли):

public <T extends ProductPage> T openProductPage(ProductType product)
{...}

BagsPage bagsPage =
mainPage.<BagsPage>openProductPage(ProductType.BAGS);

Главное - это понимать, что иметь несколько отдельных методов неплохо.
Они будут разделять условную логику в случае использования различных
типов (вместо if или switch).

On Mar 16, 3:48 pm, Alexander Zhovnuvaty <azhov...@voliacable.com>
wrote:

Alexander Zhovnuvaty

unread,
Mar 16, 2011, 10:29:37 AM3/16/11
to acceptanc...@googlegroups.com
Ок. Спасибо. Это как раз то что я искал.
Reply all
Reply to author
Forward
0 new messages