Что нового

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

InnI

AutoIT Гуру
Сообщения
4 162
Репутация
1 101
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.

Функции:
Справка по перечисленным ниже функциям библиотеки находится непосредственно в UDF UIAutomate.au3 перед кодом каждой функции.

_UIA_CreateLogicalCondition Создаёт логическое условие на основе заданных условий
_UIA_CreatePropertyCondition Создаёт условие на основе свойства и его значения
_UIA_ElementDoDefaultAction Выполнение элементом действия по умолчанию
_UIA_ElementFindInArray Находит элемент, соответствующий заданному свойству и его значению
_UIA_ElementGetBoundingRectangle Определяет прямоугольную область, ограничивающую элемент
_UIA_ElementGetFirstLastChild Находит первый и последний дочерние элементы (объекты) указанного элемента
_UIA_ElementGetParent Определяет родительский элемент (объект) указанного элемента
_UIA_ElementGetPreviousNext Находит предыдущий и следующий элементы того же уровня
_UIA_ElementGetPropertyValue Определяет значение заданного свойства элемента
_UIA_ElementMouseClick Выполняет клик мыши по элементу
_UIA_ElementScrollIntoView Прокручивает элемент в область видимости
_UIA_ElementSetFocus Устанавливает элементу фокус ввода
_UIA_ElementTextSetValue Устанавливает значение (текст) в текстовый элемент
_UIA_FindAllElements Находит все элементы, соответствующие заданному свойству и его значению
_UIA_FindAllElementsEx Находит все элементы, соответствующие условию поиска
_UIA_FindElementsInArray Находит все элементы, соответствующие заданному свойству и его значению
_UIA_GetControlTypeElement Находит элемент (объект) указанного типа с заданным свойством и значением
_UIA_GetElementFromCondition Находит элемент (объект) на основе заданного условия
_UIA_GetElementFromFocus Создаёт элемент (объект) на основе фокуса ввода
_UIA_GetElementFromHandle Создаёт элемент (объект) на основе дескриптора
_UIA_GetElementFromPoint Создаёт элемент (объект) на основе экранных координат
_UIA_ObjectCreate Создаёт объект UIAutomation
_UIA_WaitControlTypeElement Ожидает элемент (объект) указанного типа с заданным свойством и значением
_UIA_WaitElementFromCondition Ожидает элемент (объект) на основе заданного условия

Пример:
Код:
; Демонстрация автоматизации Chrome версии 53

#include "UIAutomate.au3"

Opt("WinTitleMatchMode", 2)

; Данные регистрации
Global $sLogin = "User"
Global $sPassword = "12345"

; Запуск Chrome с параметром --force-renderer-accessibility
; При отсутствии этого параметра доступ к элементам страницы будет запрещён
Run(@ProgramFilesDir & "\Google\Chrome\Application\chrome.exe --force-renderer-accessibility")
$hWnd = WinWait(" - Google Chrome", "", 3)
If Not $hWnd Then Exit

; Создание элемента с использованием дескриптора окна
$oParent = _UIA_GetElementFromHandle($hWnd)

; Поиск кнопки с именем "Новая вкладка" и клик по ней
$oElement = _UIA_GetControlTypeElement($oParent, "UIA_ButtonControlTypeId", "Новая вкладка")
_UIA_ElementMouseClick($oElement)

; Поиск строки адреса и установка текста
$oElement = _UIA_GetControlTypeElement($oParent, "UIA_EditControlTypeId", "Адресная строка и строка поиска")
_UIA_ElementTextSetValue($oElement, "autoit-script.ru")

; Переход на сайт
Send("{enter}")

; Ожидание загрузки страницы по наличию элемента "Недавние сообщения"
_UIA_WaitControlTypeElement($oParent, "UIA_TextControlTypeId", "Недавние сообщения")

; Отключение вывода ошибок
$UIA_ConsoleWriteError = 0

; Поиск элемента для ввода пароля
$oElement = _UIA_GetControlTypeElement($oParent, "UIA_EditControlTypeId", True, "IsPassword")

; Включение вывода ошибок
$UIA_ConsoleWriteError = 1

; Регистрация при наличии поля пароля
If IsObj($oElement) Then

  ; Установка фокуса в поле пароля и ввод данных
  _UIA_ElementSetFocus($oElement)
  Send($sPassword)

  ; Заполнение поля логина
  Send("+{tab}")
  Send($sLogin)

  ; Поиск и нажатие кнопки "Вход"
  $oElement = _UIA_GetControlTypeElement($oParent, "UIA_ButtonControlTypeId", "Вход")
  _UIA_ElementDoDefaultAction($oElement)
EndIf

; Ожидание загрузки страницы по наличию ссылки "Примеры и рабочие проекты"
$oElement = _UIA_WaitControlTypeElement($oParent, "UIA_HyperlinkControlTypeId", "Примеры и рабочие проекты")

; Проверка успешной регистрации
If Not IsObj($oElement) Then Exit

; Переход по ссылке "Примеры и рабочие проекты"
_UIA_ElementDoDefaultAction($oElement)

; Ожидание загрузки страницы по наличию части имени элемента " это не раздел по общим вопросам"
_UIA_WaitControlTypeElement($oParent, 0xC364, "не раздел по общим", Default, True)

; Поиск элемента поиска, установка фокуса, ввод данных
$oElement = _UIA_GetControlTypeElement($oParent, "UIA_EditControlTypeId", "")
_UIA_ElementSetFocus($oElement)
Send("UIAutomate")

; Поиск и нажатие кнопки "Поиск"
$oElement = _UIA_GetControlTypeElement($oParent, 0xC350, "Поиск")
_UIA_ElementDoDefaultAction($oElement)

История версий:
1.0:
- первая публичная версия

1.1:
- добавлена функция _UIA_ElementGetPreviousNext() для поиска предыдущего и следующего элементов того же уровня
- добавлена возможность вывода ошибок в консоль: глобальный переключатель $UIA_ConsoleWriteError (включён по умолчанию)
- в CUIAutomation2.au3 добавлены директивы #Au3Stripper_Off и #Au3Stripper_On для идентификаторов свойств и типов

1.2:
- добавлены функции _UIA_CreateLogicalCondition(), _UIA_CreatePropertyCondition(), _UIA_ElementGetFirstLastChild(), _UIA_ElementGetParent(), _UIA_FindAllElementsEx(), _UIA_GetElementFromCondition(), _UIA_WaitElementFromCondition()

1.3:
- добавлена функция _UIA_ElementFindInArray(), позволяющая находить объект в массиве объектов и возвращающая индекс элемента исходного массива
- функция _UIA_ElementDoDefaulAction() переименована в _UIA_ElementDoDefaultAction()
- добавлена проверка ошибок выполнения методов объекта UIAutomation
- в функцию _UIA_ElementMouseClick() добавлена опция активации элемента перед кликом
- в функцию _UIA_FindElementsInArray() добавлен переключатель: элементами возвращаемого массива могут быть или объекты или индексы элементов исходного массива

1.4:
- файл с описанием констант CUIAutomation2.au3 переименован в UIAConstants.au3
- в файл UIAConstants.au3 добавлены новые константы (до Windows 10 включительно)
- добавлена функция _UIA_ElementScrollIntoView(), прокручивающая элемент в область видимости
- обновлена утилита Inspect (из пакета SDK для Windows 10)

1.5:
- добавлена глобальная переменная $UIA_ElementVersion, позволяющая указывать версию создаваемого элемента (объекта): 0-авто; 1-WIN_7 и ниже; 2-WIN_8; 3-WIN_81; 4,5-WIN_10
- в архив добавлены обе версии Inspect (Win7 и Win10) для возможности сравнения свойств элементов разных версий

1.6:
- устранены утечки памяти по причине некорректной работы с условиями
- для функции _UIA_ElementMouseClick() дополнительно отслеживаются ошибки функции MouseClick и выхода координат за пределы элемента; курсор теперь остаётся в точке клика
- для функции _UIA_GetElementFromPoint() добавлены умолчания: координаты курсора мыши
- функция _UIA_GetFocusedElement() переименована в _UIA_GetElementFromFocus()

1.7:
- добавлена поддержка Windows 10 (1703) "Creators Update": возможность создания объекта IUIAutomation версии 4 и элементов версий 6 и 7

1.8:
- предотвращены возможные утечки памяти при перезаписи указателей
- добавлена проверка на наличие элементов в массиве для функций, принимающих массив

Источник: autoit-script.ru
Автор: InnI

Файлы:
 

Вложения

Последнее редактирование:

Shinoby

Чайник
Сообщения
80
Репутация
2
Возник вопрос относительно определения отцовства... :stars:
правильно ли я понимаю, что если в Инспекторе написано "Container has no children" - то использовать поинтер на этот объект для поиска внутри - нет смысла - их просто нет?

собственно столкнулся с проблемой: в вин7 ие10 не могу получить характеристику в "Сервис" -> "Во весь экран F11"
последний элемент пробовал искать у разных родителей, но ничего не вышло.

в этом примере не могу найти поинтер на "Контекст"
Код:
Opt("WinTitleMatchMode", 2)
$oIE = _IEAttach("", "instance")
$hwie = _IEPropertyGet($oIE, "hwnd")
;;ControlClick ($hwie, "",40960, "left", 1, 360, 10)

$oParent = _UIA_ElementFromHandle($hwie)
$oElement = _UIA_GetControlTypeElement($oParent, "UIA_ButtonControlTypeId", "Сервис")
_UIA_ElementMouseClick($oElement)

$oMenuPa = _UIA_WaitControlTypeElement($oElement, "UIA_WindowControlTypeId", "Контекст")
MsgBox(0,"error меню отец?",@error)
$oMenu = _UIA_WaitControlTypeElement($oMenuPa, "UIA_MenuControlTypeId", "Контекст")
MsgBox(0,"error меню",@error)
$oPunkt = _UIA_GetControlTypeElement($oMenu, "UIA_MenuItemControlTypeId", "Во весь экран	F11")
MsgBox(0,"error пункт меню",@error)
If IsObj($oPunkt) Then
	MsgBox(0,"",_UIA_ElementGetPropertyValue ($oPunkt, "LegacyIAccessible.State:"))

EndIf


"Контекст" - это я уже брал инфу из дерева в Инспекторе - думал он папа... но у него так же написано что детей не имеет и пункт меню поймать немогу. :(

что я упустил?
 
Автор
I

InnI

AutoIT Гуру
Сообщения
4 162
Репутация
1 101
Shinoby
Всплывающие меню - это особый класс окон #32768. Родитель у них - рабочий стол. Сами эти окна легко определяются по классу, поэтому проще всего работать с ними "напрямую".
Код:
#include "UIAutomate.au3"

Opt("WinTitleMatchMode", 2)
Opt("WinWaitDelay", 0)

$hwie = WinGetHandle(" - Windows Internet Explorer")
$oParent = _UIA_ElementFromHandle($hwie)
$oElement = _UIA_GetControlTypeElement($oParent, "UIA_ButtonControlTypeId", "Сервис")
_UIA_ElementDoDefaulAction($oElement)

$hMenu = WinWait("[class:#32768]", "", 3)
$oMenu = _UIA_ElementFromHandle($hMenu)
$oPunkt = _UIA_GetControlTypeElement($oMenu, "UIA_MenuItemControlTypeId", "Файл")
_UIA_ElementMouseClick($oPunkt)
Sleep(30)

$hMenu = WinWait("[class:#32768]", "", 3)
$oMenu = _UIA_ElementFromHandle($hMenu)
$oPunkt = _UIA_GetControlTypeElement($oMenu, "UIA_MenuItemControlTypeId", "Во весь экран", Default, True)
$State = _UIA_ElementGetPropertyValue($oPunkt, "LegacyIAccessible.State")
MsgBox(0, "", $State)
 
Автор
I

InnI

AutoIT Гуру
Сообщения
4 162
Репутация
1 101
Переименовал функции:
Код:
; _UIA_ElementFromHandle() -> _UIA_GetElementFromHandle()
; _UIA_ElementFromPoint() -> _UIA_GetElementFromPoint()

Версию не менял.


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

Были внесены изменения в CUIAutomation2.au3 (не мной). На работу UDF версии 1.0 не влияют. Но всё равно ссылку исправил, архив полного комплекта обновил.
 

Shinoby

Чайник
Сообщения
80
Репутация
2
возник вопрос по _UIA_ElementTextSetValue

Код:
WinActivate("Skype")

$hwSk = WinWaitActive("Skype")
	$oParent = _UIA_ElementFromHandle($hwSk)
	$oElement = _UIA_GetControlTypeElement($oParent, "UIA_EditControlTypeId", "TAccessibleEdit", "ClassName")
	_UIA_ElementSetFocus($oElement)
	Sleep(1000)
	_UIA_ElementTextSetValue($oElement, "имя в скайпе")


окошко поиска фокусится - но в него ничего не вводится.
это не проблема - можно найти нужный элемент в листе, но на вкладке контакта где пишешь текст - писать его так же не получается. ошибки - не выдает.

сейчас обнаружил что поиск элемента - был не удачный. вернулся к исходному варианту:
Код:
$oElement = _UIA_GetControlTypeElement($oParent, "UIA_EditControlTypeId", "Найти")

но с текстом так же проблемы....
 
Автор
I

InnI

AutoIT Гуру
Сообщения
4 162
Репутация
1 101
Shinoby [url_ex=javascript:qq.OpenLink('http://autoit-script.ru/index.php/topic,16780.msg104442.html#msg104442')][?][/url_ex]
но с текстом так же проблемы
Да, есть такое... Многие элементы, хоть и имеют шаблон ValuePattern, но не реагируют на команду установки текста. В таком случае можно сделать так
Код:
$oElement = _UIA_GetControlTypeElement($oParent, "UIA_EditControlTypeId", "Найти")
_UIA_ElementMouseClick($oElement)
Send("имя в скайпе")


К счастью в вашем случае всё намного проще - даже UDF не нужна
Код:
ControlSetText("Skype", "", "TAccessibleEdit1", "имя в скайпе")
 

Shinoby

Чайник
Сообщения
80
Репутация
2
да, с send как в примере - сделал. но не люблю его, очень не предсказуемо бывает.

а вот за ControlSetText - спасибо. чутка поломал голову над 1, но все остальное пошло как по маслу. :beer:
 
Б

Большой огурец

Гость
А как получить новые не прочитанные сообщения и Skype? Сейчас старый API закрыт. Остается вот с окнами делать.
 

alex33

Скриптер
Сообщения
1 451
Репутация
180
Большой огурец [url_ex=javascript:qq.OpenLink('http://autoit-script.ru/index.php?topic=16780.msg107946#msg107946')][?][/url_ex]
Сейчас старый API закрыт.
У меня новый скайп и ничего не закрыто, всё работает...
 
Б

Большой огурец

Гость
alex33 сказал(а):
Большой огурец [url_ex=javascript:qq.OpenLink('http://autoit-script.ru/index.php?topic=16780.msg107946#msg107946')][?][/url_ex]
Сейчас старый API закрыт.
У меня новый скайп и ничего не закрыто, всё работает...
Skype еще в прошлом году всех уведомил о закрытии Desktop API по идее работать не должен уже? Поэтому ищу способ без него.
 
Автор
I

InnI

AutoIT Гуру
Сообщения
4 162
Репутация
1 101
Большой огурец [url_ex=javascript:qq.OpenLink('http://autoit-script.ru/index.php?topic=16780.msg107946#msg107946')][?][/url_ex]
получить новые не прочитанные сообщения из Skype
Получить можно только все сообщения. Далее можно сравнить с количеством предыдущих - разница и есть новые.
Код:
#include "UIAutomate.au3"
$oWnd = _UIA_GetElementFromHandle(WinGetHandle("Skype"))
$oList = _UIA_GetControlTypeElement($oWnd, "UIA_ListControlTypeId", "Содержимое чата")
$aList = _UIA_FindAllElements($oList, $UIA_ControlTypePropertyId, $UIA_ListItemControlTypeId)
For $i = 1 To $aList[0]
  ConsoleWrite(_UIA_ElementGetPropertyValue($aList[$i], "Name") & @CRLF)
Next


Такой ещё вариант - через буфер обмена
Код:
$i = 0
Do
  $i += 1
  $hChat = ControlGetHandle("Skype", "", "TChatContentControl" & $i)
Until ControlCommand("Skype", "", $hChat, "IsVisible")
ControlFocus("Skype", "", $hChat)
ControlSend("Skype", "", $hChat, "^a")
ControlSend("Skype", "", $hChat, "^{ins}")
ConsoleWrite(ClipGet() & @CRLF)
 

coolpunk

Чайник
Сообщения
7
Репутация
2
[Автоматизация] Re: UIAutomate - автоматизация нестандартных элементов GUI

Возможно данный вопрос не к вам, но вдруг кто столкнется. Почему-то Au3Stripper упорно вырезает функцию _UIA_FindElementsInArray(), даже если она используется, другие оставляет.
Помогает только
Код:
#Au3Stripper_Off
#include <UIAutomate.au3>
#Au3Stripper_On
 
Автор
I

InnI

AutoIT Гуру
Сообщения
4 162
Репутация
1 101
coolpunk [url_ex=javascript:qq.OpenLink('http://autoit-script.ru/index.php?topic=16780.msg111184#msg111184')][?][/url_ex]
упорно вырезает функцию _UIA_FindElementsInArray()
Давайте разбираться на примере. Ищем названия пунктов меню рабочего стола, содержащие подстроку "ов" (для русской Win7 это "Сортировка" и "Обновить")
Код:
#AutoIt3Wrapper_Run_Au3Stripper=y
#include "UIAutomate.au3"
MouseClick("right", 0, 0, 1, 0)
$oParent = _UIA_GetElementFromHandle(WinWait("[class:#32768]"))
$oItems = _UIA_FindAllElements($oParent, $UIA_ControlTypePropertyId, $UIA_MenuItemControlTypeId)
$oArray = _UIA_FindElementsInArray($oItems, $UIA_NamePropertyId, "ов", True)
$str = ""
For $i = 1 To $oArray[0]
  $str &= _UIA_ElementGetPropertyValue($oArray[$i], $UIA_NamePropertyId) & @CRLF
Next
MsgBox(0, "", $str)
После компиляции в папке скрипта получим файл ScriptName_stripped.au3. Открываем его в SciTE и видим функцию _UIA_FindElementsInArray(), т.е. она НЕ вырезана. Запускаем на выполнение - скрипт работает. Скомпилированный также работает. НО... Если изменить скрипт следующим образом
Код:
...
$oArray = _UIA_FindElementsInArray($oItems, "name", "ов", True)
$str = ""
For $i = 1 To $oArray[0]
  $str &= _UIA_ElementGetPropertyValue($oArray[$i], "name") & @CRLF
Next
...
и запустить "урезанный" вариант, то получим ошибку
Код:
"C:\Scripts\test_stripped.au3" (148) : ==> Subscript used on non-accessible variable.:
For $i = 1 To $oArray[0]
For $i = 1 To $oArray^ ERROR
Дело в том, что в UDF преобразование строки "name" в идентификатор свойства $UIA_NamePropertyId происходит в функции __UIA_GetPropIdFromStr(), а константа $UIA_NamePropertyId вырезана стриппером, т.к. не используется. В результате _UIA_FindElementsInArray() возвращает ошибку №6 (неизвестный идентификатор свойства), что и приводит к проблемам.
 

coolpunk

Чайник
Сообщения
7
Репутация
2
[Элементы GUI] Re: UIAutomate - автоматизация нестандартных элементов GUI

Спасибо за разъяснения, я так глубоко не вникал.
Отличный набор функций, только мне не хватило методов "NextChild" и "PreviousChild" для моей задачи, приходится использовать так:
Код:
$oParent = _UIA_GetElementFromHandle($handle)
	$aAllElements = _UIA_FindAllElements($oParent)
	Local $sTime, $sName
	For $i = 1 To $aAllElements[0]
		If _UIA_ElementGetPropertyValue($aAllElements[$i], "Name") = "Начало через" Then
			$sName = _UIA_ElementGetPropertyValue($aAllElements[$i-1], "Name")
			$sTime = _UIA_ElementGetPropertyValue($aAllElements[$i+1], "Name")
			ExitLoop
		EndIf
	Next

Возможно, проще и не сделать.
 
Автор
I

InnI

AutoIT Гуру
Сообщения
4 162
Репутация
1 101
coolpunk [url_ex=javascript:qq.OpenLink('http://autoit-script.ru/index.php?topic=16780.msg111223#msg111223')][?][/url_ex]
не хватило методов "NextChild" и "PreviousChild"
Функция возвращает массив: $aArray[0] - предыдущий элемент (объект), $aArray[1] - следующий элемент (объект).
Если предыдущий/следующий элемент отсутствует, то соответствующим элементом массива будет НЕ объект.
Код:
Func _UIA_ElementGetPreviousNext($oElement)
  If Not IsObj($oElement) Then Return SetError(1, 0, 0)
  Local $aPrevNext[2], $pPrevNext, $pRawWalker, $oRawWalker, $oUIAutomation = _UIA_ObjectCreate()
  $oUIAutomation.RawViewWalker($pRawWalker)
  $oRawWalker = ObjCreateInterface($pRawWalker, $sIID_IUIAutomationTreeWalker, $dtagIUIAutomationTreeWalker)
  If Not IsObj($oRawWalker) Then Return SetError(2, 0, 0)
  $oRawWalker.GetPreviousSiblingElement($oElement, $pPrevNext)
  $aPrevNext[0] = ObjCreateInterface($pPrevNext, $sIID_IUIAutomationElement, $dtagIUIAutomationElement)
  $oRawWalker.GetNextSiblingElement($oElement, $pPrevNext)
  $aPrevNext[1] = ObjCreateInterface($pPrevNext, $sIID_IUIAutomationElement, $dtagIUIAutomationElement)
  Return $aPrevNext
EndFunc
 
Автор
I

InnI

AutoIT Гуру
Сообщения
4 162
Репутация
1 101
Обновление до версии 1.1:
- добавлена функция _UIA_ElementGetPreviousNext() для поиска предыдущего и следующего элементов того же уровня
- добавлена возможность вывода ошибок в консоль: глобальный переключатель $UIA_ConsoleWriteError (включён по умолчанию)
- в CUIAutomation2.au3 добавлены директивы #Au3Stripper_Off и #Au3Stripper_On для идентификаторов свойств и типов
 

rivega

Чайник
Сообщения
45
Репутация
0
Хорошего времени суток.

Подскажите пожалуйста, пытаюсь сделать регистрацию на сайте(в коде видно что за сайт)
У меня 2 вопроса:
1. функция ожидания загрузки страницы вываливается с ошибкой 4(превышен интервал ожидания, вываливается практически сразу, 5 сек не проходит)
2.мне не получается обратится к кнопке "вход"


Подскажите пожалуйста что не так делаю.



Код:
#include "UIAutomate.au3"

Opt("WinTitleMatchMode", 2)

Run(@ProgramFilesDir & "\Google\Chrome\Application\chrome.exe --force-renderer-accessibility")
$hWnd = WinWait(" - Google Chrome", "", 5)
If Not $hWnd Then Exit


$oParent = _UIA_GetElementFromHandle($hWnd)

$oElement = _UIA_GetControlTypeElement($oParent, "UIA_ButtonControlTypeId", "Новая вкладка")
_UIA_ElementMouseClick($oElement)

$oElement = _UIA_GetControlTypeElement($oParent, "UIA_EditControlTypeId", "Адресная строка и строка поиска")
_UIA_ElementMouseClick($oElement)

Send("iqoption.ru{enter}")
; ожидание загрузки
$qwe=_UIA_WaitControlTypeElement($oParent, "UIA_EditControlTypeId", "Войти")
MsgBox("","",@error)

; Поиск и нажатие кнопки "Вход"
  $oElement = _UIA_GetControlTypeElement($oParent, "UIA_ButtonControlTypeId", "Войти")
  _UIA_ElementDoDefaulAction($oElement)
 
Автор
I

InnI

AutoIT Гуру
Сообщения
4 162
Репутация
1 101
rivega [url_ex=javascript:qq.OpenLink('http://autoit-script.ru/index.php?topic=16780.msg113107#msg113107')][?][/url_ex]
5 сек не проходит
Проходит, можете замерить при помощи TimerDiff(). Я только не пойму, почему вы ожидаете Edit с именем "Войти". У меня это - кнопка.

не получается обратится к кнопке "вход"
Потому что "Вход" - это часть имени (там в начале хитрый значок ещё есть). Чтобы искать по части имени нужно параметр $fInStr установить в True.
В итоге получится
Код:
#include "UIAutomate.au3"

Opt("WinTitleMatchMode", 2)

Run(@ProgramFilesDir & "\Google\Chrome\Application\chrome.exe --force-renderer-accessibility")
$hWnd = WinWait(" - Google Chrome", "", 5)
If Not $hWnd Then Exit

$oParent = _UIA_GetElementFromHandle($hWnd)
$oElement = _UIA_GetControlTypeElement($oParent, "UIA_ButtonControlTypeId", "Новая вкладка")
_UIA_ElementMouseClick($oElement)
$oElement = _UIA_GetControlTypeElement($oParent, "UIA_EditControlTypeId", "Адресная строка и строка поиска")
_UIA_ElementMouseClick($oElement)

Send("iqoption.ru{enter}")
; ожидание загрузки
$oElement = _UIA_WaitControlTypeElement($oParent, "UIA_ButtonControlTypeId", "Войти", Default, True)
; нажатие кнопки "Вход"
_UIA_ElementDoDefaulAction($oElement)

; регистрация
_UIA_WaitControlTypeElement($oParent, "UIA_TextControlTypeId", "Авторизация")
_UIA_ElementSetFocus(_UIA_GetControlTypeElement($oParent, "UIA_EditControlTypeId", "E-mail"))
Send("[email protected]")
_UIA_ElementSetFocus(_UIA_GetControlTypeElement($oParent, "UIA_EditControlTypeId", "Пароль"))
Send("password")
_UIA_ElementDoDefaulAction(_UIA_GetControlTypeElement($oParent, "UIA_CheckBoxControlTypeId", " Запомнить меня"))
_UIA_ElementDoDefaulAction(_UIA_WaitControlTypeElement($oParent, "UIA_ButtonControlTypeId", "Войти"))
 

rivega

Чайник
Сообщения
45
Репутация
0
Спасибо огромное за быстрый ответ.
и отдельно спасибо за дальнейшие шаги.

Про имя все понял(смотрел код страницы и там конечно же значка не было )

у меня код выдает при ожидании загрузки(пытался ставить больше 5 рандомных секунд...и все равно)
Код:
_UIA_WaitControlTypeElement : превышено время ожидания



а у Вас срабатывает?
 
Автор
I

InnI

AutoIT Гуру
Сообщения
4 162
Репутация
1 101
rivega [url_ex=javascript:qq.OpenLink('http://autoit-script.ru/index.php?topic=16780.msg113111#msg113111')][?][/url_ex]
смотрел код страницы
Для данной UDF лучше использовать утилиту Inspect.

а у Вас срабатывает?
У меня загрузка длится 3-4 секунды. Но пару раз было в районе восьми.
Измерьте реальное время загрузки и установите его вместо нуля
Код:
Send("iqoption.ru{enter}")
; ожидание загрузки
$t = TimerInit()
$oElement = _UIA_WaitControlTypeElement($oParent, "UIA_ButtonControlTypeId", "Войти", Default, True, 0)
ConsoleWrite(TimerDiff($t) & @CRLF)
; нажатие кнопки "Вход"
_UIA_ElementDoDefaulAction($oElement)
Или просто оставьте ноль - бесконечное ожидание.
 
Верх