Что нового

К вопросу об идентификации элементов управления

vitaliy4us

Новичок
Сообщения
158
Репутация
4
Я занимаюсь тестированием приложения, которое постоянно обновляется. С выходом каждой новой версии изменяются имена элементов управления. Это изменение касается окончаний имен, которые присваиваются автоматически для каждой новой версии. Например:

Advanced (Class): [CLASS:WindowsForms10.Window.8.app.0.2bb23b]

где изменяющаяся часть "2bb23b" зависит от версии продукта. Таким образом, скрипт, написанный для одной версии, не работает для другой. Каким образом можно выйти из положения? Контрол не имеет имени, которое можно было бы использовать для его идентификации. Применение "*" вместо изменяющейся части также ничего не дает. В Help имеется указание на возможность указания координат элемента управления для его идентификации. Но как это сделать? Тупо кликать мышкой по данным координатам не очень приемлемо, а указать их в ControlClick() не получается. Вот информация о контроле:
>>>> Control <<<<
Class: WindowsForms10.Window.8.app.0.2bb23b
Instance: 19
ClassnameNN: WindowsForms10.Window.8.app.0.2bb23b19
Name:
Advanced (Class): [CLASS:WindowsForms10.Window.8.app.0.2bb23b; INSTANCE:19]
ID: 660062
Text:
Position: 517, 76
Size: 27, 27
ControlClick Coords: 9, 12
Style: 0x56000000
ExStyle: 0x00000000

Можно ли использовать Position: 517, 76 в ControlClick? Пробовал ControlClick("Settings", "", "[Position:517, 76]") - ничего не дает. Значит остается только мышь по координатам?
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
vitaliy4us
Размер и координаты этих элементов всегда одинаковые?
 

sngr

AutoIT Гуру
Сообщения
1,015
Репутация
411
Код:
ControlClick("Settings", "", "",'left',1,517, 76)
ControlClick('[REGEXPCLASS:WindowsForms10.Window.8.app.*]', "", 'INSTANCE:19')

Одно или другое.
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Вот немного изменённый пример из справки по ControlClick.
Код:
; Запуск калькулятора
Run('calc.exe')
If WinWaitActive('[CLASS:SciCalc]', '', 5) Then ; ожидание появления калькулятора 5 сек
    ; 4 раза кликаем основной ("main") кнопкой мыши
    ControlClick('Кальк', '', '[CLASS:Button; INSTANCE:15]', "main", 4) ; 15 - кнопка 3 в обычном виде
    ;ControlClick('[CLASS:SciCalc]', '', '[CLASS:Button; INSTANCE:54]', "main", 4) ; 54 - кнопка 3 в инженерном виде
Else
    MsgBox(4096, 'Сообщение', 'Окно не найдено, завершаем работу скрипта')
EndIf


Как видишь, в 5-ой строке прокатывает только начало заголовка окна.
Может и с твоим окном так получится?
 
Автор
V

vitaliy4us

Новичок
Сообщения
158
Репутация
4
Спасибо! Это решает вопрос:
ControlClick('[REGEXPCLASS:WindowsForms10.Window.8.app.*]', "", 'INSTANCE:19')
А можно поподробнее о REGEXPCLASS. Как я понимаю, это использование регулярных выражений?
 
Верх