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

Фотография

QTP > VBScript


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

#1 SQAZ0

SQAZ0

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

  • Members
  • Pip
  • 21 сообщений
  • ФИО:NULL

Отправлено 11 марта 2011 - 21:01

Добрый день.
Подскажите, есть ли принципиальная разница между кодом в случае 1 и случае 2.

Случай 1.

Function GetParentWindowWindow()
   Set GetMainWindow = Window("nativeclass:=a","window id:=b")
End Function

Function GetChildWindow(ByRef ParentWindowRef)
   Set GetChildWindow = ParentWindowRef.Window("nativeclass:=a","window id:=c")
End Function

GetChildWindow(GetParentWindow()).Activate

Случай 2.

Set ChildWindow = Window("nativeclass:=a","window id:=b").Window("nativeclass:=a","window id:=c")
ChildWindow.Activate

В моем разумении в 1 случае создается 2 объекта, при чем работаем только с 1.
В случае 2 объект создается только 1.
  • 0

#2 ch_ip

ch_ip

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

  • Members
  • PipPipPipPipPipPip
  • 1 097 сообщений
  • ФИО:Павел Абдюшев
  • Город:Москва


Отправлено 11 марта 2011 - 22:52

Добрый день.
Подскажите, есть ли принципиальная разница между кодом в случае 1 и случае 2.

Да, есть. Во втором случае код работает. В первом - нет

Случай 1.

Function GetParentWindow()
   Set GetMainWindow = Window("nativeclass:=a","window id:=b")
End Function

Function GetChildWindow(ByRef ParentWindowRef)
   Set GetChildWindow = ParentWindowRef.Window("nativeclass:=a","window id:=c")
End Function

GetChildWindow(GetParentWindow()).Activate

Случай 2.
Set ChildWindow = Window("nativeclass:=a","window id:=b").Window("nativeclass:=a","window id:=c")
ChildWindow.Activate

В моем разумении в 1 случае создается 2 объекта, при чем работаем только с 1.
В случае 2 объект создается только 1.

В обоих случаях создается по 2 обекта. И работаем в обоизх случаях с двумя объектами. Первый объект - родительское окно. Второй объект - дочернее окно. Невозможно работать с дочерним окном, не создав хотя бы один раз объект родительского окна.
Запись Window(<DescPropertyCollection>) это по сути вызов конструктора тестового объекта класса Window
  • 0

#3 SQAZ0

SQAZ0

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

  • Members
  • Pip
  • 21 сообщений
  • ФИО:NULL

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


Добрый день.
Подскажите, есть ли принципиальная разница между кодом в случае 1 и случае 2.

Да, есть. Во втором случае код работает. В первом - нет

Случай 1.

Function GetParentWindow()
   Set GetMainWindow = Window("nativeclass:=a","window id:=b")
End Function

Function GetChildWindow(ByRef ParentWindowRef)
   Set GetChildWindow = ParentWindowRef.Window("nativeclass:=a","window id:=c")
End Function

GetChildWindow(GetParentWindow()).Activate

Случай 2.
Set ChildWindow = Window("nativeclass:=a","window id:=b").Window("nativeclass:=a","window id:=c")
ChildWindow.Activate

В моем разумении в 1 случае создается 2 объекта, при чем работаем только с 1.
В случае 2 объект создается только 1.

В обоих случаях создается по 2 обекта. И работаем в обоизх случаях с двумя объектами. Первый объект - родительское окно. Второй объект - дочернее окно. Невозможно работать с дочерним окном, не создав хотя бы один раз объект родительского окна.
Запись Window(<DescPropertyCollection>) это по сути вызов конструктора тестового объекта класса Window

Ясно, я так и думал, спасибо.
P.S.
Да в первом случае в первой функции у меня закралась ошибка, по сути она неработоспособна.
  • 0

#4 SQAZ0

SQAZ0

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

  • Members
  • Pip
  • 21 сообщений
  • ФИО:NULL

Отправлено 30 марта 2011 - 20:12

Подскажите, почему не работает...
Хочу сделать Checked = FALSE, для этого решил послать SendMessage
Да, знаю про .Set "ON" .Set "OFF".

Extern.Declare micLResult, "SendMessage", "User32.dll", "SendMessage", micHwnd, micUInteger, micWParam, micLParam

Hwnd = 68465 'HWND WinCheckBox в IE'
MsgCode = 1026 'Decimal значение для сообщения TB_CHECKBUTTON (http://msdn.microsoft.com/en-us/library/bb787303%28v=vs.85%29.aspx)'
Checked = FALSE 'Убрать галку'
ID = 303 'ID контрола в QTP - window id, в WinSpy++  Control ID'

Extern.SendMessage(Hwnd, MsgCode, ID, Checked)

Есть подозрения, что засылаю не тот HWND, т.к. в описании TB_CHECKBUTTON присутствует и LParam и WParam, шлю HWND самого контролла, тогда встает вопрос зачем еще и idButton в Wparam, может быть надо HWND родителя?

Прикрепленные файлы

  • Прикрепленный файл  1.JPG   118,76К   14 Количество загрузок:
  • Прикрепленный файл  2.JPG   107,01К   15 Количество загрузок:

  • 0

#5 Alex

Alex

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

  • Members
  • PipPipPip
  • 237 сообщений
  • ФИО:Алексей

Отправлено 31 марта 2011 - 08:24

Подскажите, почему не работает...
Хочу сделать Checked = FALSE, для этого решил послать SendMessage
Да, знаю про .Set "ON" .Set "OFF".

Extern.Declare micLResult, "SendMessage", "User32.dll", "SendMessage", micHwnd, micUInteger, micWParam, micLParam

Hwnd = 68465 'HWND WinCheckBox в IE'
MsgCode = 1026 'Decimal значение для сообщения TB_CHECKBUTTON (http://msdn.microsoft.com/en-us/library/bb787303%28v=vs.85%29.aspx)'
Checked = FALSE 'Убрать галку'
ID = 303 'ID контрола в QTP - window id, в WinSpy++  Control ID'

Extern.SendMessage(Hwnd, MsgCode, ID, Checked)

Есть подозрения, что засылаю не тот HWND, т.к. в описании TB_CHECKBUTTON присутствует и LParam и WParam, шлю HWND самого контролла, тогда встает вопрос зачем еще и idButton в Wparam, может быть надо HWND родителя?


По-моему, используется не тот код сообщения. Почему TB_CHECKBUTTON, а не BM_SETCHECK?
  • 0

#6 SQAZ0

SQAZ0

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

  • Members
  • Pip
  • 21 сообщений
  • ФИО:NULL

Отправлено 01 апреля 2011 - 07:16


Подскажите, почему не работает...
Хочу сделать Checked = FALSE, для этого решил послать SendMessage
Да, знаю про .Set "ON" .Set "OFF".

Extern.Declare micLResult, "SendMessage", "User32.dll", "SendMessage", micHwnd, micUInteger, micWParam, micLParam

Hwnd = 68465 'HWND WinCheckBox в IE'
MsgCode = 1026 'Decimal значение для сообщения TB_CHECKBUTTON (http://msdn.microsoft.com/en-us/library/bb787303%28v=vs.85%29.aspx)'
Checked = FALSE 'Убрать галку'
ID = 303 'ID контрола в QTP - window id, в WinSpy++  Control ID'

Extern.SendMessage(Hwnd, MsgCode, ID, Checked)

Есть подозрения, что засылаю не тот HWND, т.к. в описании TB_CHECKBUTTON присутствует и LParam и WParam, шлю HWND самого контролла, тогда встает вопрос зачем еще и idButton в Wparam, может быть надо HWND родителя?


По-моему, используется не тот код сообщения. Почему TB_CHECKBUTTON, а не BM_SETCHECK?


Задумался...
А как заслать wParam = BST_CHECKED , тут ведь нужно hex или dec значение, просто "BST_CHECKED" не получается.


UPDATED

Написал, заработало так:

Extern.Declare micLResult, "SendMessage", "User32.dll", "SendMessage", micHwnd, micUInteger, micWParam, micLParam 
 
Hwnd = 6164880 'HWND WinCheckBox в IE' 
MsgCode = 241 'Decimal значение для сообщения BM_SETCHECK'

'iChecked = 0
iChecked = 1
Call Extern.SendMessage(Hwnd, MsgCode, iChecked, 0)

  • 0


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

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