Pull to refresh

Comments 15

Добро пожаловать в дивный мир. Там всё гораздо сложнее.
А ещё приложения любят падать потому, что кто-то с ними общается и хочет узнать как они выглядят.

В своё время пришёл к https://github.com/TestStack/UIAComWrapper , и даже там есть ошибки , которые не внесены в код увы.

я тоже когда-то пытался сделать сервис для windows desktop ui тестированию. https://github.com/viordash/us-ac-re
Но забросил, стабильность слишком низкая

Там нужен другой подход. Совсем не так как ожидается в теории.
Вроде как никакого вмешательства в программу, а наделе баг на баге находишь у всех, в общем наелись сполна :)

Так и есть, сейчас стараюсь повысить стабильность комбинируя всё это с автоматическими визуальными проверками

Тут зависит от задачи и для работы или для души.

В идеале нужны фильтры куда не лезть чтобы не упало.

При чём фильтры на уровне win32, UIA отдельно. Проверку winAPI не ломают программу точно, всё остальное на откуп программе.

Фильтры это кто родительское окно кто процесс ну и там усложнять надо.

Далее этого мало.

Если делать проверки из отдельного процесса то всегда есть риск напороться на баги программы.

Идеальным вариантом было бы использовать IAccessibleEx изнутри.

Тогда мы всегда бежим в UI потоке и уменьшаем гонки до нуля.

Но это всё прямо очень сложная система получается .

Чем больше было количество интерфейсов на которых пробовали библиотеку, тем сильнее кодовая база разрасталась из-за покрытия каких-то необычных случаев, особенно когда были старые интерфейсы на c++\delphi. В итоге это ощущается как бесконечная борьба, всё сводится к эмуляции кликов мышью и сейчас я пробую другие подходы.

Но надеюсь статья будет полезна тем у кого нет проблем с разнообразием интерфейсов

Так и есть не вспаханное минное поле.

Мышка это не проблема, а вот как понять на что мы кликаем.

Ну или узнать, что такое-то окно открылось с таким-то текстом.

Принцип , который я привёл будет работать на практически все случаи.

Только надо это кому-то сделать.

Да, это на ту же тему, брал с него пример в плане лёгкости использования: куча магии прячется под двумя строками кода.

Но у меня стояла задача гораздо более широкий функционал покрыть, который ближе к RPA решениям

А стоит ли игра свеч? Ну, кроме образовательного интереса.

Может, достаточно автоматизировать PowerAutomate?
- тот, который без 365 и идёт с виндой, или ставится из магазина.

PowerAutomate очень хорош, образцовый в этом плане, но к сожалению закрытый и по ту сторону баррикад. А у меня разработка не только для души

К слову, есть крутое открытое решение openrpa, в котором я даже смог поучаствовать)

не начинайте с клика. Начинайте с вопроса “как я найду этот элемент в следующий раз?"

А про ожидание можно сказать: не начинайте со Sleep(). Начинайте с вопроса "какого события мы ждем?"

Ооочень давно, во времена Win 95 занимался автоматизацией приложений вроде CorelDraw и приложений Adobe (PageMaker и Indesign). Все это происходило с помощью Delphi. Но там было проще: импортировалась библиотека типов и я сразу получал доступ к COM-объекту приложения. До этого был опыт автоматизации путем отсылки сообщений на элементы интерфейса произвольного приложения по их handle, который я получал при помощи приложения Spy, что ли…

Да, uiSpy. В windows sdk сейчас идёт inspect такая же

Sign up to leave a comment.

Articles