Будучи отличным инструментом для регрессионного тестирования GUI-приложений, AutoIt (кстати, он работает в Wine) не всегда приемлем в случае разработки и тестирования сложных программных продуктов. В таких случаях можно задействовать AutoItX. Это dll-версия AutoIt, в которой реализована часть функциональности продукта. Доступ к методам и свойствам осуществляется через ActiveX/COM и dll-интерфейс.
В статье, иллюстрирующей работу с AutoIt, был рассмотрен пример создания локального пользователя. Перепишем этот код на Python (OS Windows).
import sys import win32com.client oAutoIt=win32com.client.Dispatch('AutoItX3.Control') treeitem = "Computer Management (Local)|System Tools|Local Users and Groups" username = "testuser" try: oAutoIt.Run('cmd /c "compmgmt.msc"', "", oAutoIt.SW_HIDE) rc = oAutoIt.WinWaitActive("Computer Management", "", 5) if rc == 0: raise UserWarning, 'AutoIt Error: WinWaitActive' oAutoIt.ControlTreeView ("Computer Management", "", 12785, "Expand", treeitem, "") if oAutoIt.error == 1: raise UserWarning, 'AutoIt Error: TreeView - Expand' treeitem = treeitem + "|Users" oAutoIt.ControlTreeView ("Computer Management", "", 12785, "Select", treeitem, "") if oAutoIt.error == 1: raise UserWarning, 'AutoIt Error: TreeView - Select' oAutoIt.Send ("{AppsKey}{Down}{Enter}") rc = oAutoIt.ControlSend("New User", "", "Edit1", username) if rc == 0: raise UserWarning, 'AutoIt Error: EditBox - UserName' rc = oAutoIt.ControlClick("New User","", 1170) if rc == 0: raise UserWarning, 'AutoIt Error: "Create" Button' rc = oAutoIt.ControlClick("New User","", 2) if rc == 0: raise UserWarning, 'AutoIt Error: "Close" Button' oAutoIt.Sleep (2000) oAutoIt.Send ("{Tab}") rc = oAutoIt.ControlListView ("Computer Management", "", "SysListView321", "FindItem", username, "") if oAutoIt.error == 1: raise UserWarning, 'AutoIt Error: ListView - FindItem' oAutoIt.WinClose ("Computer Management") if rc == "-1": print 'Failed' else: print 'Success' except UserWarning: raise
Для обработки ошибок, возникающих при работе с методами AutoItX, можно написать отдельный wrapper. В целом, обращаясь к AutoItX из Python через COM, мы можем интегрировать богатые возможности Python (exceptions, OOP и т.п.) и функциональность AutoIt.
Что такое качество программного обеспечения и как его улучшить: теория и практика, задачи и решения, подводные камни и обходные пути.