Использовать SikuliX, Selenium не хотелось, слишком громоздко, нужно переучиваться.
В сети, нашел пример поиска части изображения в другом изображении.
Решил добавить функциональность в ВК созданную для проекта SmartConfigurator (WinExt) и опубликовать.
Сначала небольшой пример возможностей ВК.
- Активировать окно по части заголовка
- Через меню Операции открыть список документов
- Создать документ
- Создать контрагента с наименованием: Контрагент_<ТекущаяДата()>
- Выбрать контрагента
- Заполнить ТЧ документа
- Провести документ
- Сформировать отчет по остаткам
#Использовать WinExt
Перем РаботаСОкнами;
Перем Экран;
Перем Мышь;
Перем Клавиши;
Процедура ПриСозданииОбъекта()
РаботаСОкнами = Новый РаботаСОкнами();
Мышь = Новый Мышь();
Экран = Новый Экран();
Клавиши = Новый МСПослатьКлавиши();
// Активируем окно по части заголовка (окно не должно быть свернуто)
РаботаСОкнами.АктивироватьОкноПоЗаголовку("Win ext example ordinary");
СоздатьПоступлениеТМЦ();
СформироватьОтчетОстаткиТМЦ();
КонецПроцедуры
Процедура СоздатьПоступлениеТМЦ()
// меню Операции
ВыполнитьШаг("img/menu_operations.png");
Приостановить(1000);
// Меню Документы
ВыполнитьШаг("img/menu_documents.png");
Приостановить(1000);
// Откроем список Поступлений ТМЦ
// Для разнообразия нажмем Enter
Клавиши.ПослатьКлавиши("{ENTER}");
Приостановить(1000);
// Нажнем кнопку добавить в списке ПоступлениеТМЦ
ВыполнитьШаг("img/btn_add.png");
Приостановить(1000);
// Найдем подпись контрагенты и кликнем правей, в поле ввода
ВыполнитьШаг("img/form_title_contragent.png",,100);
// Откроем окно выбора из списка, создадим контрагента, выберем его
Клавиши.ПослатьКлавиши("{F4}{INSERT}{TAB}Контрагент_"+ТекущаяДата()+"^({ENTER}){ENTER}");
// Добавим товар в табличную часть и введем количество, цену, сумму
Клавиши.ПослатьКлавиши("{TAB}{INSERT}товар1{ENTER}10{ENTER}1{ENTER}10{ENTER}");
Приостановить(1000);
// На панели документа нажмем Ок (скрин всей панели, снова делаем сдвиг курсора)
ВыполнитьШаг("img/panel_doc_buttons.png",,-50);
КонецПроцедуры
Процедура СформироватьОтчетОстаткиТМЦ()
// меню Операции
ВыполнитьШаг("img/menu_operations.png");
Приостановить(1000);
ВыполнитьШаг("img/menu_reports.png");
Приостановить(1000);
Мышь.УстановитьПозициюКурсора(0, 0);
Приостановить(300);
ВыполнитьШаг("img/btn_big_ok.png");
Приостановить(1000);
ВыполнитьШаг("img/btn_report_run.png");
Приостановить(1000);
Мышь.УстановитьПозициюКурсора(0, 0);
Приостановить(1000);
ПутьКФрагменту = Новый Файл("img/report_after_receipt.png").ПолноеИмя;
ФрагментРезультатОтчета = Экран.НайтиФрагмент(ПутьКФрагменту);
Если ФрагментРезультатОтчета = Неопределено Тогда
ВызватьИсключение "Ожидаемый фрагмент с результатом отчета не найден.";
КонецЕсли;
КонецПроцедуры
Процедура ВыполнитьШаг(ИмяФайлаФрагмента, ДвойнойКлик = Ложь, СмещениеЛево = 0, СмещениеВерх = 0)
ПутьКФрагменту = Новый Файл(ИмяФайлаФрагмента).ПолноеИмя;
Фрагмент = Экран.НайтиФрагмент(ПутьКФрагменту);
Если Фрагмент = Неопределено Тогда
ВызватьИсключение "Не найден фрагмент: " + ИмяФайлаФрагмента;
КонецЕсли;
Координаты = КоординатыЦентра(Фрагмент);
Если ДвойнойКлик Тогда
Мышь.ЛеваяКнопкаКлик(Координаты.Лево + СмещениеЛево, Координаты.Верх + СмещениеВерх);
Приостановить(50);
Мышь.ЛеваяКнопкаКлик(Координаты.Лево + СмещениеЛево, Координаты.Верх + СмещениеВерх);
Иначе
Мышь.ЛеваяКнопкаКлик(Координаты.Лево + СмещениеЛево, Координаты.Верх + СмещениеВерх);
КонецЕсли;
КонецПроцедуры
Функция КоординатыЦентра(Фрагмент)
Лево = Фрагмент.Лево + (Фрагмент.Ширина / 2);
Верх = Фрагмент.Верх + (Фрагмент.Высота / 2);
Координаты = Новый Структура();
Координаты.Вставить("Лево", Лево);
Координаты.Вставить("Верх", Верх);
Возврат Координаты;
КонецФункции
Установка
Скачать архив здесь: https://github.com/ret-Phoenix/WinExt/releases
Выполнить команду: `opm install WinExt.ospx`
* Укажите свой путь до файла WinExt.ospx
Позже будет доступна установка через OneScript OPM без предварительной скачки.
Возможности ВК:
Экран / Sreen
Методы
РазрешениеЭкрана / ScreenResolution()
Получить разрешение экрана
Параметры
- SreenNumber: Число - Номер экрана, если ничего не задано - берет основной экран
Возвращаемое значение
ФиксированнаяСтруктура (Ширина, Высота)
НайтиФрагмент / FindFragment()
Найти на экране фрагмент из файла
Параметры
- fragmentFileName: Путь к файлу с искомым фрагментом
Возвращаемое значение
ФрагментЭкрана
ФрагментЭкрана / ScreenFragment
Свойства
Верх / Top
Доступ: Чтение
Лево / Left
Доступ: Чтение
Высота / Height
Доступ: Чтение
Ширина / Width
Доступ: Чтение
РаботаСОкнами / WorkWithWindows
Методы
ЗапомнитьТекущееОкно / GetLinkToCurWindow()
АктивироватьЗапомненноеОкно / WndActivate()
АктивироватьОкноПоЗаголовку / SwitchToWinByTitle()
Мышь / Mouse
Управление мышкой. Установить/Считать позицию. Кликнуть кнопкой.
Методы
ЛеваяКнопкаКлик / LeftMouseClick()
ПраваяКнопкаКлик / RightMouseClick()
СредняяКнопкаКлик / MiddleMouseClick()
УстановитьПозициюКурсора / SetCursorPosition()
Установить позицию курсора
Параметры
-
posX: Позиция X
-
posY: Позиция Y
Возвращаемое значение
Булево - Удалось установить позицию курсора
ПолучитьПозициюКурсора / GetCursorPosition()
Получить позицию курсора
Возвращаемое значение
Структура - Ключи: Верх, Лево
МСПослатьКлавиши / MSSendKeys
Класс для отправки нажатий клавиш, основан на родном .net SendKeys.
Методы
ПослатьКлавиши / SendKeys()
Послать нажатия клавиш. Правила: https://docs.microsoft.com/ru-ru/dotnet/api/system.windows.forms.sendkeys?view=netframework-4.7
Параметры
- keys: Строка - набор клавиш