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

Фотография

Почему Инвизибл?


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

#1 natali.ancharuk

natali.ancharuk

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

  • Members
  • Pip
  • 72 сообщений
  • ФИО:Анчарук Наталья Владимировна

Отправлено 02 августа 2005 - 04:58

Я тестирую Java приложение. Почему некоторые диалоговые окна инвизибл (невидимые), когда я на них кликаю при записе скрипта и вижу их мена.
Может быть причина в том, что мы не добавляли в майн продедуру строку для открытого приложения. Наш проект нажодится на сервере и мы туда положили библиотеки нужные для отркрытого приложения. Объекты я все вижу.

текст такой:
   Set p = Sys.Process("javaw")
    Set w = p.Window("SunAwtDialog", "", 2)<---1 окно оно видимое и на него компилит кликает.
    w.Activate
    Call w.JButton.Click(45, 15)
    Set w = p.Window("SunAwtDialog", "Выбор плательщика")<---2 окно оно не видимое и не видима кнопка. Хотя все замечательно появляется у меня на экране.
    w.Activate
    Call w.JButton.Click(14, 10)<----не хочет кликать

в свойствах этих объектов "visible" стоит true.

ошибка такая:
Object Sys.Process("javaw").Window("SunAwtDialog", "Âûáîð ïëàòåëüùèêà", 4) is invisible.
Object Process("javaw").Window("SunAwtDialog", "Âûáîð ïëàòåëüùèêà", 4) is invisible.
мы сделали такое:

По этому для подключения TestComplete предлагается использовать библиотеку-обертку, в которой произоводится инициализация тестирования.
Для этого необходимо в каталог C:\taissvr\jboss321\server\default\deploy\setup.war\app\ машины, на которой установлен сервер приложений скопировать прилагающийся файл, так же в этот же каталог необходимо скопировать файл tcjavaspy2.jar. Так же необходимо внести некоторые изменения в конфигурационный файл, что бы клиентское приложение запускалось под управлением TestComplete, а именно:
Необходимо в файле

C:\taissvr\jboss321\server\default\deploy\setup.war\app\client.jnlp
Добавить в секцию
  <resources>
……
  </resources>
2 строки (если они там отсутсвуют):
     <jar href=" tcjavaspy2.jar"/>
     <jar href="tctais.jar"/>
А так же необходимо строку  <application-desc main-class="kz.nat.com.bpm.client.Client"/> исправить на
  <application-desc main-class="kz.nat.com.bpm.client.TCClient"/>


Не подскажите в чем причина?
  • 0

#2 Dmitry N

Dmitry N

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 742 сообщений
  • ФИО:Николаев Дмитрий
  • Город:Где-то в России

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

Здравствуйте Натали.

Довольно странное поведение. Насколько я понял, ошибка выскакивает на строке 'Call w.JButton.Click(14, 10)'. Попробуйте сделать следующее:
1. Перед данной строкой вывести в лог состояние формы и кнопки:
  Set p = Sys.Process("javaw")
   Set w = p.Window("SunAwtDialog", "", 2)
   w.Activate
   Call w.JButton.Click(45, 15)
   Set w = p.Window("SunAwtDialog", "Выбор плательщика")
   w.Activate
   Log.Message w.Name, "Visible = " & w.Visible & VbCrLf & "VisibleOnScreen = " & w.VisibleOnScreen
   Log.Message w.JButton.Name, "Visible = " & w.JButton.Visible & VbCrLf & "VisibleOnScreen = " & w.JButton.VisibleOnScreen
   Call w.JButton.Click(14, 10)<----не хочет кликать

2. Воспользоваться инструментом Finder для того, чтобы определить правильно ли TestComplete находит окно и кнопку. Для этого откройте диалог 'Object Properties' (можно открыть через контекстное меню панели Object Browser) и перетащите мишень внизу диалога на интересующий контрол. Объект, пойманный TestComplete'ом должен быть обведен красной рамкой - убедитесь, что TestComplete выделяет правильный объект. Как только отпустите кнопку мыши, в диалоге станут видны свойства и методы выбрвнного контрола.
  • 0
С уважением,
Дмитрий

#3 natali.ancharuk

natali.ancharuk

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

  • Members
  • Pip
  • 72 сообщений
  • ФИО:Анчарук Наталья Владимировна

Отправлено 02 августа 2005 - 11:22

Я написала строки
Set p = Sys.Process("javaw")
  Set w = p.Window("SunAwtDialog", "", 2)
  w.Activate
  Call w.JButton.Click(45, 15)
  Set w = p.Window("SunAwtDialog", "Выбор плательщика")
  w.Activate
  Log.Message w.Name, "Visible = " & w.Visible & VbCrLf & "VisibleOnScreen = " & w.VisibleOnScreen
  Log.Message w.JButton.Name, "Visible = " & w.JButton.Visible & VbCrLf & "VisibleOnScreen = " & w.JButton.VisibleOnScreen
  Call w.JButton.Click(14, 10)<----не хочет кликать

лог такой:

Error executing Activate 17:05:49 2
Object Sys.Process("javaw").Window("SunAwtDialog", "Âûáîð ïëàòåëüùèêà", 43) is invisible.

Window("SunAwtDialog", "Âûáîð ïëàòåëüùèêà", 43) 17:05:49 2
Visible = False
VisibleOnScreen = False

JButton 17:05:50 2
Visible = True
VisibleOnScreen = False

Error executing Click 17:06:00 2
Object Window("SunAwtDialog", "Âûáîð ïëàòåëüùèêà", 43).JButton is invisible.



А свойства проверила при записи скрипта все объекты visible =true, но когда я кликнула на

Set w = p.Window("SunAwtDialog", "Выбор плательщика")<---2 окно оно не видимое и не видима кнопка. Хотя все замечательно появляется у меня на экране.

вылезло окно "Do you want to save the properties of child objects"
и в окне "Save Object Properties" в Group было куча объектов.
Хотя данное окно напоминает обычный мессадж с двумя кнопками "да и нет".

вот еще что, в браузере почемуто все объекты SunAwtDialog имеют свойство visible = false. Хотя такой же объект Window("kz.nat.com.bpm.client.Client", "ÒÀÈÑ - 50300 - Ïîëüçîâàòåëü: lara", 1)имеет свойство Visible =true.
оба этих объектов являются родителями из иерархии.
  • 0

#4 natali.ancharuk

natali.ancharuk

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

  • Members
  • Pip
  • 72 сообщений
  • ФИО:Анчарук Наталья Владимировна

Отправлено 03 августа 2005 - 08:39

Неужеле никто не знает в чем проблема? :lol:
  • 0

#5 Dmitry N

Dmitry N

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 742 сообщений
  • ФИО:Николаев Дмитрий
  • Город:Где-то в России

Отправлено 03 августа 2005 - 13:34

Здравствуйте.

Очень странная ситуация - при записи окно видимо, а при воспроизведении нет.

вылезло окно "Do you want to save the properties of child objects"

Это вы случайно не туда нажали, по всей видимости. Эта фича позволяет сохранить значения свойств объекта для того, чтобы потом сравнить их с текущими свойствами.

Кстати, а что получилось с инструментом Finder? Правильные объекты показал?

Я могу предложить вам обойти проблему написав свой собственный метод Click. Его можно будет использовать для таких "проблематичных" окон. Например (не проверял):
[VBScript]
Sub ClickJavaControl(control)
  Dim x, y
  x = control.LocationOnScreen.x + (control.bounds.centerX - control.bounds.x)
  y = control.LocationOnScreen.y + (control.bounds.centerY - control.bounds.y)
  Call Sys.MouseDown(VK_LBUTTON, x, y)
  Call Sys.MouseUp(VK_LBUTTON, x, y)
End Sub

А вообще-то рекомендую обратиться в службу поддержки AutomatedQA (support@automatedqa.com), может они смогут вам помочь.
  • 0
С уважением,
Дмитрий

#6 natali.ancharuk

natali.ancharuk

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

  • Members
  • Pip
  • 72 сообщений
  • ФИО:Анчарук Наталья Владимировна

Отправлено 08 августа 2005 - 06:43

Да .... обратилась я на Support Automated QA. Там сначала сказали написать между моих строчек:
[VBScript]
   Set p = Sys.Process("javaw")
   Set w = p.Window("SunAwtDialog", "", 2)
   w.Activate
   LogAppStructure p
   Call w.JButton.Click(45, 15)
   Set w = p.Window("SunAwtDialog", "Выбор плательщика")
   w.Activate
   LogAppStructure p
   Call w.JButton.Click(14, 10)

[VBScript]
Sub LogAppStructure(Obj)
  If BuiltIn.IsSupported(Obj, "WndClass") Then
    Str = "WndClass = " & Obj.WndClass
  Else
    Str = ""
  End If
  
  If (BuiltIn.IsSupported(Obj, "WndCaption")) Then Str = Str & VbCrLf & "WndCaption = " & VarToStr(Obj.WndCaption)
  If (BuiltIn.IsSupported(Obj, "WndIndex")) Then Str = Str & VbCrLf & "WndIndex = " & VarToStr(Obj.WndIndex)
  If (BuiltIn.IsSupported(Obj, "Exists")) Then Str = Str & VbCrLf & "Exists = " & VarToStr(Obj.Exists)
  If (BuiltIn.IsSupported(Obj, "Visible")) Then Str = Str & VbCrLf & "Visible = " & VarToStr(Obj.Visible)                            
  If (BuiltIn.IsSupported(Obj, "VisibleOnScreen")) Then Str = Str & VbCrLf & "VisibleOnScreen = " & VarToStr(Obj.VisibleOnScreen)                            
  If (BuiltIn.IsSupported(Obj, "Enabled")) Then Str = Str & VbCrLf & "Enabled = " & VarToStr(Obj.Enabled)       
  If (BuiltIn.IsSupported(Obj, "ChildCount")) Then Str = Str & VbCrLf & "ChildCount = " & VarToStr(Obj.ChildCount)       
  If (BuiltIn.IsSupported(Obj, "getClass")) Then Str = Str & VbCrLf & "class = " & VarToStr(Obj.getClass.name)       
  count = Obj.ChildCount
  If count Then
    Call Log.CreateNode(Obj.Name, Str)
    For i=0 To count-1
      LogAppStructure(Obj.Child(i))
    Next
    Log.CloseNode
  Else
    Call Log.Message(Obj.Name, Str)
  End If
End Sub

потом запросили мой проект. Потом оценили и сказали:

Спасибо за результаты - они помогли мне понять в чем причина проблемы. Дело в том, что у вас в приложение (MDI приложение, как я думаю) одновременно существует несколько окон с классом "SunAwtDialog" и названием "Выбор плательщика". TestComplete сообщает об этом предупреждением 'Ambiguous recognition' в логе.

>>
  Set w = p.Window("SunAwtDialog", "Выбор плательщика") << В данной ситуации, TestComplete в этой строке возвращает объект с минимальным индексом, то есть вот этот:
Window("SunAwtDialog", "Выбор плательщика", 3)

Этот объект действительно невидим на экране, в отличии от того объекта, который вам нужен - Window("SunAwtDialog", "Выбор плательщика", 7).


Для того, чтобы избежать данной ситуации, вы можете:
1. Всегда работать только с одним окном Window("SunAwtDialog", "Выбор плательщика"), чтобы не возникала ситуация 'Ambiguous recognition' (неопределенный объект).

2. Всегда использовать в имени объекта индекс. Это может быть не очень удобно, так как индекс нужного окна может меняться от запуска к запуску. Как вариант, можно всегда брать окно с, например, максимальным индексом:
[VBScript]
Function GetMaxIndexWindow(parent, wndClass, wndCaption)
  Set GetMaxIndexWindow = parent.WaitChild("Несуществующий объект")
  For i = 0 To parent.ChildCount - 1
    Set item = parent.Child(i)
    If (item.WndClass = wndClass) And (item.WndCaption = wndCaption) Then
      Set GetMaxIndexWindow = item
    End If
  Next
End Function


Как вы думаете вообще мне нужно тестировать Java приложение или может мне легче его будет протестировать руками?????????????????????

Прошу оценить!!!!!!!!!!!!!!!
:help:
  • 0

#7 Dmitry N

Dmitry N

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 742 сообщений
  • ФИО:Николаев Дмитрий
  • Город:Где-то в России

Отправлено 08 августа 2005 - 07:40

Здравствуйте.

Я думаю, что тестировать с TestComplete все-таки лучше - это в перспективе съэкономит массу времени.

Что касается вашей проблемы с одинаковыми окнами, думаю лучшим выходом здесь будет просто перебирать все окна и находить видимое. Как я понимаю, только одно окно должно быть видимым, правильно?
Например так:
function GetVisibleWindow(parent)
{
  for (i = 0; i < parent.ChildCount; i++) {
    wnd = parent.Child(i);
    if ((wnd.WndClass == "SunAwtDialog") && (wnd.WndCaption == "Выбор плательщика"))
      if (wnd.Visible) return wnd;
  }
  return null;
}

  • 0
С уважением,
Дмитрий


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

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