Что нового

UIAutomate - автоматизация нестандартных элементов GUI

alberts1972

Новичок
Сообщения
16
Репутация
0
Стесняюсь спросить что за консоль SciTe. А так ошибок нет. В коде , где идёт нажатие на вкладку "Лист рассылки" функция _UIA_ElementMouseClick не срабатывает а срабатывает _UIA_ElementDoDefaultAction. Почему так?
И почему на левой панеле Inspect не показывает где объект вложен. Это происходит именно с кнопками.
Сейчас проверить не могу, завтра только, но что то берут сомнения что получится.
 
Автор
I

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
alberts1972 [?]
что за консоль SciTe
Вы скрипт в редакторе SciTE набираете? Если да, то по нажатию F5 скрипт запустится и в нижней части редактора откроется панель (консоль). При наличии ошибок в эту панель будут выводиться сообщения с префиксом !> , именем функции и описанием проблемы.

функция _UIA_ElementMouseClick не срабатывает а срабатывает _UIA_ElementDoDefaultAction. Почему так?
Не знаю. Нужно смотреть дерево элементов и ошибки в консоли.

почему на левой панеле Inspect не показывает где объект вложен
Встречал я такие элементы. Они определяются только фокусировкой или наведением курсора мыши, а через поиск по дереву не находятся. Это особенность работы конкретного контейнера (окна), содержащего данный элемент.
 

alberts1972

Новичок
Сообщения
16
Репутация
0
Встречал я такие элементы. Они определяются только фокусировкой или наведением курсора мыши, а через поиск по дереву не находятся. Это особенность работы конкретного контейнера (окна), содержащего данный элемент.
А почему эти элементы не находятся перебором массива от родителя?
 
Автор
I

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
alberts1972 [?]
А почему эти элементы не находятся перебором массива от родителя?
Это вам у Microsoft нужно спросить или у разработчика приложения.
 

alberts1972

Новичок
Сообщения
16
Репутация
0
Есть оказ-ся ошибки:
!> _UIA_GetControlTypeElement : значение указанного свойства найденных элементов не соответствует заданному
!> _UIA_ElementMouseClick : первый параметр не является объектом

Получается такого объекта нет.


Добавлено:
Сообщение автоматически объединено:

Как вычислить родителя?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Тема и первое сообщение закреплены в самом верху.
 
Автор
I

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
alberts1972 [?]
А в моем случае?
Если я правильно понимаю, то ваша проблема в поиске самого элемента (кнопки). Найдёте элемент - найдёте и родителя. Да и зачем вам родитель?
Или я чего-то не понимаю? :scratch:
 

alberts1972

Новичок
Сообщения
16
Репутация
0
Ancestors: ""
"" таблицу
"Исходящий - черновик" документ
"" панель
"" панель
"" панель
"" панель
"" панель
"(УДАЛЕН) Исходящий - черновик" панель
"" панель
"" панель
"" панель
"" панель
"(УДАЛЕН) Исходящий - черновик - IBM Lotus Notes" окно
"Рабочий стол" панель
[ No Parent ]

Вот Inspect выодит родителей.


Добавлено:
Сообщение автоматически объединено:

Да мне нужно нажать на эту кнопку. От родителя же находиться, разве нет? Хендл родителя берется, потом перебор по массиву всех детей по имени кнопки и инициируем нажатие.
 
Автор
I

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
alberts1972 [?]
От родителя же находиться, разве нет?
Да, от любого предка. Но вы утверждаете, что у вас путём перечисления потомков не находит. И я вам говорю, что бывают такие элементы, которые не перечисляют потомков. Такую вот неполную поддержку интерфейса реализовали разработчики.

Вот Inspect выодит родителей.
Потому что Inspect находит элемент. Вы тоже можете найти этот элемент "напрямую" - через _UIA_GetElementFromPoint() и перечислить его родителей.
Вот пример. Запустите скрипт, наведите курсор мыши на элемент, нажмите F1 и смотрите в консоли SciTE перечисление родителей
Код:
#include <UIAutomate.au3>

HotKeySet("{F1}", "GetAncestors")

While Sleep(111)
WEnd

Func GetAncestors()
  $oElement = _UIA_GetElementFromPoint()
  ConsoleWrite(_UIA_ElementGetPropertyValue($oElement, "Name") & @CRLF)
  ConsoleWrite("--- Ancestors ---" & @CRLF)
  While 1
    $oElement = _UIA_ElementGetParent($oElement)
    If Not IsObj($oElement) Then Return ConsoleWrite(@CRLF)
    ConsoleWrite('"' & _UIA_ElementGetPropertyValue($oElement, "Name") & '" ' & _UIA_ElementGetPropertyValue($oElement, "LocalizedControlType") & @CRLF)
  WEnd
EndFunc
 
Автор
I

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
alberts1972 [?]
Значит нет способов нажать кнопку?
Любым известным вам способом узнавайте координаты и нажимайте через MouseClick или ControlClick. Также можете передать координаты в _UIA_GetElementFromPoint, получить объект и использовать _UIA_ElementDoDefaultAction. А ещё можете поискать в инете способы взаимодействия через COM или API.
Lotus Notes автоматизация COM
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
InnI
Мне кажется было бы полезнее создать справку по использованию библиотеки, очень востребованная она.
Если нужно у меня есть небольшая утилита которая поможет автоматизировать данный процесс, если конечно библиотека написана придерживаясь стандарту.
 
Автор
I

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
CreatoR [?]
создать справку по использованию библиотеки
Вся справочная информация находится внутри UDF перед каждой функцией.
В полной версии SciTE, после установки курсора на имя функции, вместо F1 нужно нажать Ctrl+J.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
InnI [?]
Вся справочная информация находится внутри UDF перед каждой функцией.
Это не то, я про организованную справку с примерами для каждой функции, с расширенным объяснением для разных случаев.
Мне например не сразу стало понятно как использовать некоторые функции, в связке с инспектором элементов.
 

alberts1972

Новичок
Сообщения
16
Репутация
0
InnI сказал(а):
alberts1972 [?]
Значит нет способов нажать кнопку?
Любым известным вам способом узнавайте координаты и нажимайте через MouseClick или ControlClick. Также можете передать координаты в _UIA_GetElementFromPoint, получить объект и использовать _UIA_ElementDoDefaultAction. А ещё можете поискать в инете способы взаимодействия через COM или API.
Lotus Notes автоматизация COM

У меня так она и реализована через MouseClick. Попробую через COM.
 
Автор
I

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
CreatoR [?]
с расширенным объяснением для разных случаев
Это уже не справка, а учебник получается.
Кстати, на официальном форуме активно развивается обучение по работе с интерфейсом UIAutomation Using UI Automation Code in AutoIt на базе самописного аналога Inspect UIASpy - UI Automation Spy Tool

Мне например не сразу стало понятно как использовать некоторые функции
Но ведь разобрались! Заодно что-то новое узнали ;)
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
InnI [?]
на официальном форуме активно развивается обучение по работе с интерфейсом UIAutomation
Это интересно, спасибо поизучаю.

Но ведь разобрались!
Да, но это я, с моим качеством упёртости и любопытства, но другим это будет не так просто.
Мне кажется что можно было бы упростить методы, имена переменных, и может быть даже функции... но это так, мысли в слух ;).
 

tryinfinity

Новичок
Сообщения
40
Репутация
0
Доброго дня. Нахожу нужный элемент, но мне нужно кликнуть по координате элемента + сдвиг по оси Х.
Как выдернуть координаты элемента?
 
Верх