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

Фотография

RFT, JAVA и find()


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

#1 Gaiver

Gaiver

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

  • Members
  • Pip
  • 10 сообщений
  • ФИО:Петров Сергей

Отправлено 30 июня 2010 - 11:24

День добрый. Подскажите, пожалуйста, в верном ли направлении копаю, и если нет, то как лучше сделать (идейно).

Есть вебприложение с меняющейся менюшкой. При наведении мыши на пункт меню появляется подменю с несколькими пунктами.

Проблема:
На определённой странице менюшка содержит пункт "Создать" -> "уведомление". На других страницах пункта "Создать" нет.
Я могу попасть на эту определённую страницу двумя способами, принципиально отличающимися (в одном случае "с нуля", во втором - грубо говоря "повторный приход").
Страница содержит контент для 24 типов договоров, с большинством из которых можно делать одно и то же с вариациями. То есть вариантов 2*24. На самом деле, больше, но не суть.

Сначала я написал скрипты для прохождения по одному пути с посещением этой страницы.
link_создать().hover();
link_уведомление().click();
Всё работало прекрасно со всеми 24 типами договоров, работало быстро, и я был доволен.

Потом приступил к скриптованию второго пути. Так как страница одна и та же, то и скрипт для выполнения действий на этой странице тот же. Логично. Однако RFT упорно не хотел видеть объект "link_уведомление()", хотя при выполнении первого пути этот момент проскакивал без сучка и без задоринки.

Решил добавить для второго пути своё определение нужного мне объекта:
link_создать().hover();
if (Constant.isRetro) {link_уведомление2().click();}
else {link_уведомление().click();}
Однако, на одном типе договора (на котором добавлял этот второй объект в RFT) объект виден и выполняется .click(). А на всех остальных типах RFT не видит его!

Решил пойти путём "из пушки по воробьям": чтобы не плодить количество объектов захотел использовать find() с параметрами.
Кусок исходника страницы:
<td style="white-space:nowrap;width:100%;"><a class="ctl00_MainMenu_1 MasterMenuSubItemStyle ctl00_MainMenu_6" href="OCInputForms/OCInput.aspx?Type=Decision" style="border-style:none;font-size:1em;"><img src="Images/mail_folder16.gif" alt="" style="border-style:none;vertical-align:middle;" /> Уведомление</a></td>
Скрипт:
link_создать().hover();
TestObject[] foundTOs = browser_htmlBrowser().find(atList(atProperty(".text","Уведомление"),atDescendant(".class", "Html.A")));

System.out.println("kol-vo elementov = " + foundTOs.length); //лично для себя выводил в процессе дебага
GuiTestObject link_notice = new GuiTestObject(foundTOs[0]);

link_niotice.hover();
link_notice.click();
Ура! RFT объект находит и выполняет клик! Но ищет 20 секунд :(((

Вопрос: Что я делаю не так? Или как можно ускорить FIND? Может быть (что скорее всего), я неправильно понимаю метод FIND? В смысле какие параметры в нём указывать для ускорения.

Посоветуйте, пожалуйста. Заранее благодарен.
  • 0

#2 McStar

McStar

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

  • Members
  • Pip
  • 40 сообщений
  • ФИО:Максим


Отправлено 05 июля 2010 - 08:09

Думаю проблема решиться конкретизированием поиска. Например, можно использовать значения "ctl00_MainMenu_1 MasterMenuSubItemStyle ctl00_MainMenu_6". Если они уникальны и не генерятся динамически. В каких конкретно свойствах их искать, думаю, лучше посмотреть в репозитории объектов.
  • 0

#3 Gaiver

Gaiver

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

  • Members
  • Pip
  • 10 сообщений
  • ФИО:Петров Сергей

Отправлено 22 сентября 2010 - 11:17

В общем, всё было гораздо проще.

Первая ошибка: надо искать не по всему browser_HtmlBrowser, а по отдельному объекту, включающему в себя нужный мне. В данном случае - объект "МЕНЮ". И искать в нём.
Вторая ошибка: зачем громоздить кучу лишнего, если можно использовать только atProperty(".text","Уведомление"). Идеологически выглядит так:
GuiTestObject menu = ...; //объект добавляется через ObjectMap -> Insert New Object
TestObject[] foundTOs = menu.find(atProperty(".text","Уведомление"));
System.out.println("kol-vo elementov = " + foundTOs.length);
GuiTestObject link_notice = new GuiTestObject(foundTOs[0]);
link_notice.hover();
link_notice.click();
Время выполнения кода - меньше секунды.
  • 0

#4 Gaiver

Gaiver

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

  • Members
  • Pip
  • 10 сообщений
  • ФИО:Петров Сергей

Отправлено 22 сентября 2010 - 11:17

Тема закрыта.
  • 0


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

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