Да, это они. Почему на пауэршелл? Два фактора были в начале: работаем в конторе с проектами под Active Directory (даже если это unix/linux), в нескольких отделах есть опыт работы с паауэршелл (к примеру, PowerGUI - продукт нашего отдела. PowerSlim разработан в дальнем конце коридора.)
С другой стороны, пауэршелл - это дотнет (можно даже скомпилировать в библиотечку или экзешник, если это зачем-то надо). Всё, даже win32 api можно дёрнуть из пауэршелла. Можно даже куски C# кода вставлять как строчные константы.
При этом найти и поправить баг можно без студио, и даже без шарпдевелоп (даже его лень ведь всюду ставить), прямо на машинке, где баг найден? пауэршелл.
Как обучить новичков б/о программирования - дать в руки утилиты (командлеты же как утилиты).
Как набирать меньше? Так автодополнение везде, и в параметрах тоже.
как найти то, что надо? Get-Command -module uia* *button*
Как сделать качественный код - написать его в мелких порциях (командлеты подойдут :) и протестирвоать поштучно.
Как доступиться до всех современных сервисов майкрософт (эксчендж, шарпойнт, облако, ...) - пауэршелл.
Как сделать что-то в UI и тут же проверить в сети/процессах/файлах - пауэршелл (UIAutomation).
Остановить сервис и посмотреть автотестом в гуй (как приложение это восприняло) - да тоже пауэршелл (UIAutomation).
как выполнять код во всём домене и какэ то включить - паэршелл и групповые политики.
Вам не придётся ставить питон (сама по себе хорошая штука) на кучу машин, зато пауэршелл в новых ОС вообще идёт "из коробки". (UIAutomation пока не поддерживает Remoting, сейчас это можно сделать через powerslim).
========================================================================================
В комплекте идёт TMX.dll - тест-резалты можно генерить даже автоматически. А можно вручную:
if (Get-UIAWindow -Name calc* | Get-UIAButton -n 10) {
Close-TMXTestResult -Name "Eventually, Microsoft has added the 10 button";
}
или даже так
Get-UIAWindow -Name calc* | Get-UIAButton -n 1 -TestPassed -TestResultName "button 1 is here";
Т.е., можно фейлить тест по отсутствию контрола (terminating error), а можно логикой кода (есть, кстати, PSTest и PSExpect - они похожи на юнит-тесты).
========================================================================================
Так в составе архива есть генерилки:
UIAutomationSpy (генерит код для текущего контрола и амшет его в одну из вкладок, но без событий)
Start-UIARecorder (может поймать некоторые события)
обе генерилки не ахти, конечно, требуют допиливания, но помощь оказывают
========================================================================================
прямо из комманд-лайна или даже из теста под отладкой:
посмотреть имена контролов вашего окна:
Get-UIAWindow -Name calc* | Get-UIAControlDescendants | Read-UIAControlName
(Get-UIAWindow -Name calc* | Get-UIAButton -n 1).Current - выдаст проперти
========================================================================================)
кто на ком - вопрос сложный :)
white, кажется, на Win32
MS UI Automation вообще несколько: 1) классика из дотнета 2) сишная классика (больше пропертей, как в MSAA) 3) UIACOM wrapper - они на него сейчас переходят помаленьку, но он не поддерживает кучу паттернов.
Вот что говорит автор: "The next question would be, "OK, but why doesn't the COM API expose that pattern for that control?" The managed client API for UI Automation had a number of workarounds, some of them unstable, to try to cope with WinForms and Win32 common controls. (Another example: the client API tries to show the children of a combo box when the combo box is collapsed, but since the owner of the combo box can change the children dynamically when the combo box is opened, this collapsed children list is often inaccurate.) The COM API for UIA doesn't reproduce most of these workarounds."
Coded UI поверх рэппера, возможно, и обычной MS UI Automation, и ещё они поддерживают всяких там инфраджистикс (в студии столько файлов, что не поймёшь сходу, что там что поддерживает :))
UIAutomation powershell - поверх .NET UI Automation + Win32 API.
Не пора ли завести пауэршелльный раздел на форуме? :) В рамках одного треда и не распишешь :)