Автор Тема: UIAutomate - автоматизация нестандартных элементов GUI  (Прочитано 113156 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 4102
  • Репутация: 1089
    • Награды
  • Версия AutoIt: 3.3.14.0
AutoIt: 3.3.10.0 +

Категория: Автоматизация, Элементы GUI

Описание:
Набор функций, расширяющий возможности AutoIt по работе с нестандартными элементами GUI. При помощи данных функций возможна автоматизация элементов таких классов, как DirectUIHWND, NetUIHWND, UIRibbonWorkPane, автоматизация таких программ, как Google Chrome, Mozilla Firefox, автоматизация элементов графических интерфейсов, написанных на Delphi, .NET (WPF), QT и т.д.

Для получения информации об элементе потребуется утилита Inspect (входит в комплект файлов). Если данная утилита при запуске сообщает об ошибке, значит на компьютере не установлен API UIAutomation. На Windows 7 и выше данный API предустановлен. На Vista и XP нужно отдельно установить обновление KB971513: support.microsoft.com или catalog.update.microsoft.com.

Функции:
(нажмите для показа/скрытия)

Пример:
(нажмите для показа/скрытия)

Файлы: Полный комплект

История версий:
(нажмите для показа/скрытия)

Источник: autoit-script.ru
Автор: InnI
« Последнее редактирование: Август 25, 2017, 18:45:48 от InnI »

Русское сообщество AutoIt

UIAutomate - автоматизация нестандартных элементов GUI
« Ответ #315 Отправлен: Май 07, 2014, 13:01:24 »

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 4102

  • Автор темы
  • Репутация: 1089
    • Награды
  • Версия AutoIt: 3.3.14.0
vyatdima  [?]
Цитировать
не хочет на 57 (и выше)
На данный момент я знаю только один способ - это перевести Firefox в однопроцессный режим:
- перейти в расширенные настройки (в строке адреса ввести about:config[enter])
- подтвердить внесение изменений (нажать кнопку "Я принимаю на себя риск!")
- найти параметр browser.tabs.remote.autostart (можно ввести в строку поиска)
- двойным кликом по имени параметра переключить его значение в false
- перезапустить Firefox (теперь в диспетчере задач должен быть один процесс firefox.exe)

Если в настройках есть расширения указанного выше параметра с цифрами на конце, например
browser.tabs.remote.autostart.1
browser.tabs.remote.autostart.2

и т.д., то их все нужно переключить в false и перезапустить браузер.

Оффлайн alberts1972 [?]

  • Новичок
  • *
  • Сообщений: 16
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Как нажать такую кнопку.
Выдержка из Inspect
(нажмите для показа/скрытия)
Перебор  массива из родителя "(УДАЛЕН) Исходящий - черновик - IBM Lotus Notes" не находится.

Русское сообщество AutoIt

Re: UIAutomate - автоматизация нестандартных элементов GUI
« Ответ #316 Отправлен: Февраль 19, 2019, 12:12:17 »

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 4102

  • Автор темы
  • Репутация: 1089
    • Награды
  • Версия AutoIt: 3.3.14.0
alberts1972  [?]
Цитировать
Как нажать такую кнопку
Не проверял! См. ошибки в консоле SciTE
Код: AutoIt [Выделить]
#include <UIAutomate.au3>

$oParent = _UIA_GetElementFromHandle(WinGetHandle("(УДАЛЕН) Исходящий"))
$oButton = _UIA_GetControlTypeElement($oParent, "UIA_ButtonControlTypeId", "Внутренний")
_UIA_ElementDoDefaultAction($oButton)


Оффлайн alberts1972 [?]

  • Новичок
  • *
  • Сообщений: 16
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
alberts1972  [?]
Цитировать
Как нажать такую кнопку
Не проверял! См. ошибки в консоле SciTE
Код: AutoIt [Выделить]
#include <UIAutomate.au3>

$oParent = _UIA_GetElementFromHandle(WinGetHandle("(УДАЛЕН) Исходящий"))
$oButton = _UIA_GetControlTypeElement($oParent, "UIA_ButtonControlTypeId", "Внутренний")
_UIA_ElementDoDefaultAction($oButton)

Кнопка не нажимается.



Код: AutoIt [Выделить]
#include "UIAutomate.au3"
$handle=WinActivate ("Исходящий - редактирование - IBM Lotus Notes")

    $oParent = _UIA_GetElementFromHandle($handle)
    $aA1 = _UIA_FindAllElements($oParent)
    $aA2 = _UIA_FindElementsinArray($aA1,"Name","Лист рассылки")
    _UIA_ElementDoDefaultAction($aA2[1])

    $oParent = _UIA_GetElementFromHandle(WinGetHandle("Исходящий - редактирование"))
    $oButton = _UIA_GetControlTypeElement($oParent, "UIA_ButtonControlTypeId", "Внутренний")
    _UIA_ElementDoDefaultAction($oButton)


На вкладку "Лист рассылки" получается нажать. А на кнопку нет.

Данные по кнопке утилитой Inspect
(нажмите для показа/скрытия)
При пользовании утилитой Inspect при наведении мышкой на кнопку на правой панели окна Inspect  показывает данные, которые я выложил выше (см. спойлер), а вот на левом панели не показывает, где объект кнопка распологается, в каком положении в дереве объектов находиться. Например объект вкладка "Лист рассылки" показывает.


Внимание: Для просмотра прикреплённых файлов необходимо Войти или Зарегистрироваться
« Последнее редактирование: Февраль 20, 2019, 10:50:03 от alberts1972 »

Русское сообщество AutoIt

Re: UIAutomate - автоматизация нестандартных элементов GUI
« Ответ #318 Отправлен: Февраль 20, 2019, 06:39:29 »

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 4102

  • Автор темы
  • Репутация: 1089
    • Награды
  • Версия AutoIt: 3.3.14.0
alberts1972  [?]
Цитировать
А на кнопку нет.
Какие-нибудь ошибки в консоль SciTE выводятся?
Попробуйте заменить _UIA_ElementDoDefaultAction() на _UIA_ElementMouseClick()

Оффлайн alberts1972 [?]

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

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 4102

  • Автор темы
  • Репутация: 1089
    • Награды
  • Версия AutoIt: 3.3.14.0
alberts1972  [?]
Цитировать
что за консоль SciTe
Вы скрипт в редакторе SciTE набираете? Если да, то по нажатию F5 скрипт запустится и в нижней части редактора откроется панель (консоль). При наличии ошибок в эту панель будут выводиться сообщения с префиксом !> , именем функции и описанием проблемы.

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

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

Русское сообщество AutoIt

Re: UIAutomate - автоматизация нестандартных элементов GUI
« Ответ #321 Отправлен: Февраль 20, 2019, 15:26:28 »

Оффлайн alberts1972 [?]

  • Новичок
  • *
  • Сообщений: 16
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0


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

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 4102

  • Автор темы
  • Репутация: 1089
    • Награды
  • Версия AutoIt: 3.3.14.0
alberts1972  [?]
Цитировать
А почему эти элементы не находятся перебором массива от родителя?
Это вам у Microsoft нужно спросить или у разработчика приложения.

Оффлайн alberts1972 [?]

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

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


Добавлено: Февраль 21, 2019, 16:08:09
Как вычислить родителя?
« Последнее редактирование: Февраль 21, 2019, 16:08:09 от alberts1972, Причина: Объединение сообщений »

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 4102

  • Автор темы
  • Репутация: 1089
    • Награды
  • Версия AutoIt: 3.3.14.0
alberts1972  [?]
Цитировать
Как вычислить родителя?
Код: AutoIt [Выделить]
_UIA_ElementGetParent()


Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 8082
  • Репутация: 2314
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.14.0
Тема и первое сообщение закреплены в самом верху.


Правила, Поиск, Супер тема


AutoIt is simple, subtle, elegant.


«Не оказываю тех. поддержку через ПМ/ICQ, и по электронной почте - для этого есть форум. (C)»
«Законы Мэрфи неоспоримы!»


Мои работы

Оффлайн alberts1972 [?]

  • Новичок
  • *
  • Сообщений: 16
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
alberts1972  [?]
Цитировать
Как вычислить родителя?
Код: AutoIt [Выделить]
_UIA_ElementGetParent()

Это если известно. А в моем случае?

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 4102

  • Автор темы
  • Репутация: 1089
    • Награды
  • Версия AutoIt: 3.3.14.0
alberts1972  [?]
Цитировать
А в моем случае?
Если я правильно понимаю, то ваша проблема в поиске самого элемента (кнопки). Найдёте элемент - найдёте и родителя. Да и зачем вам родитель?
Или я чего-то не понимаю? :think:

Оффлайн alberts1972 [?]

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

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


Добавлено: Февраль 25, 2019, 11:10:42
Да мне нужно нажать на эту кнопку. От родителя же находиться, разве нет? Хендл родителя берется, потом перебор по массиву всех детей по имени кнопки и инициируем нажатие.

Русское сообщество AutoIt

Re: UIAutomate - автоматизация нестандартных элементов GUI
« Ответ #329 Отправлен: Февраль 25, 2019, 11:09:37 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
0 Ответов
118697 Просмотров
Последний ответ Сентябрь 22, 2010, 22:13:33
от CreatoR
18 Ответов
14671 Просмотров
Последний ответ Сентябрь 18, 2011, 20:49:26
от Zalman1980
0 Ответов
2224 Просмотров
Последний ответ Май 07, 2012, 15:00:44
от Dedullika
18 Ответов
5516 Просмотров
Последний ответ Октябрь 17, 2012, 00:07:30
от Kaster
0 Ответов
2298 Просмотров
Последний ответ Декабрь 02, 2012, 10:15:22
от madmasles
6 Ответов
3894 Просмотров
Последний ответ Декабрь 10, 2012, 11:30:14
от Zergii
3 Ответов
2365 Просмотров
Последний ответ Декабрь 21, 2014, 19:24:21
от brain
8 Ответов
2927 Просмотров
Последний ответ Ноябрь 26, 2015, 17:54:56
от Garrett
22 Ответов
3820 Просмотров
Последний ответ Июнь 09, 2017, 01:12:34
от Alofa
4 Ответов
1119 Просмотров
Последний ответ Октябрь 16, 2018, 22:32:05
от Visors