python+UIAutomation+libary
Posted xietiansky
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python+UIAutomation+libary相关的知识,希望对你有一定的参考价值。
#! /usr/bin/env python
#Author: XIE TIAN
# -*- coding:utf8 -*-
from __future__ import unicode_literals
import subprocess
import uiautomation as automation
import sys
reload(sys)
sys.setdefaultencoding(‘utf-8‘)
class switch(object):
def __init__(self, value):
self.value = value
self.fall = False
def __iter__(self):
"""Return the match method once, then stop"""
yield self.match
raise StopIteration
def match(self, *args):
"""Indicate whether or not to enter a case suite"""
if self.fall or not args:
return True
elif self.value in args: # changed for v1.5, see below
self.fall = True
return True
else:
return False
‘‘‘ to run smoke test cases of a modality.
[param][in] Main Windows Name e.g PatientAdmin
[param][in] Control Type
[param][in] Control Name
[param][in] Control AutomationId
‘‘‘
def FindControlObj(mainWindow, controlType,controlName,controlAutomationId):
type = sys.getfilesystemencoding()
mainWindow = mainWindow.decode(‘gb2312‘)
controlType=controlType.decode(‘utf-8‘).encode(type)
controlName=controlName.decode(‘gb2312‘)
controlAutomationId=controlAutomationId.decode(‘utf-8‘).encode(type)
if mainWindow=="":
wpfWindow=None
else:
wpfWindow=automation.WindowControl(Name=mainWindow)
if controlName=="":
controlName=None
if controlAutomationId=="":
controlAutomationId=None
for case in switch(controlType.lower()):
if case(‘button‘):
button=automation.ButtonControl(searchFromControl = wpfWindow,Name=controlName,AutomationId=controlAutomationId)
result=automation.WaitForExist(button,30)
if result==True:
return button
else:
print ‘control not found‘
break
if case(‘radiobutton‘):
if controlName=="":
radioButton=automation.RadioButtonControl(searchFromControl = wpfWindow,AutomationId=controlAutomationId)
result=automation.WaitForExist(radioButton,30)
if result==True:
return radioButton
else:
print ‘control not found‘
else:
radioButton=automation.RadioButtonControl(searchFromControl = wpfWindow,Name=controlName)
result=automation.WaitForExist(radioButton,30)
if result==True:
return radioButton
else:
print ‘control not found‘
break
if case(‘edit‘):
if controlName=="":
edit = automation.EditControl(searchFromControl = wpfWindow,AutomationId=controlAutomationId)
result=automation.WaitForExist(edit,30)
if result==True:
return edit
else:
print ‘control not found‘
else:
edit = automation.EditControl(searchFromControl = wpfWindow,Name=controlName)
result=automation.WaitForExist(edit,30)
if result==True:
return edit
else:
print ‘control not found‘
break
if case(‘checkbox‘):
if controlName=="":
checkbox = automation.CheckBoxControl(searchFromControl = wpfWindow,AutomationId=controlAutomationId)
result=automation.WaitForExist(checkbox,30)
if result==True:
return checkbox
else:
print ‘control not found‘
else:
checkbox = automation.CheckBoxControl(searchFromControl = wpfWindow,Name=controlName)
result=automation.WaitForExist(checkbox,30)
if result==True:
return checkbox
else:
print ‘control not found‘
break
if case(‘combobox‘):
if controlName=="":
combobox = automation.ComboBoxControl(searchFromControl = wpfWindow,AutomationId=controlAutomationId)
result=automation.WaitForExist(combobox,30)
if result==True:
return combobox
else:
print ‘control not found‘
else:
combobox = automation.ComboBoxControl(searchFromControl = wpfWindow,Name=controlName)
result=automation.WaitForExist(combobox,30)
if result==True:
return combobox
else:
print ‘control not found‘
break
if case(‘tabitem‘):
if controlName=="":
tabitem = automation.TabItemControl(searchFromControl = wpfWindow,AutomationId=controlAutomationId)
result=automation.WaitForExist(tabitem,30)
if result==True:
return tabitem
else:
print ‘control not found‘
else:
tabitem = automation.TabItemControl(searchFromControl = wpfWindow,Name=controlName)
result=automation.WaitForExist(tabitem,30)
if result==True:
return tabitem
else:
print ‘control not found‘
break
if case(‘listitem‘):
if freeParameter<>"":
combobox = automation.ComboBoxControl(searchFromControl = wpfWindow,AutomationId=freeParameter)
left, top, right, bottom = combobox.BoundingRectangle
automation.Click(right-5,bottom-5,1)
listitem = automation.ListItemControl(searchFromControl = wpfWindow,AutomationId=controlAutomationId)
return listitem
else:
if controlName=="":
listitem = automation.ListItemControl(searchFromControl = wpfWindow,AutomationId=controlAutomationId)
return listitem
else:
listitem = automation.ListItemControl(searchFromControl = wpfWindow,Name=controlName)
return listitem
break
if case(‘text‘):
if controlName=="":
text = automation.TextControl(searchFromControl = wpfWindow,AutomationId=controlAutomationId)
result=automation.WaitForExist(text,30)
if result==True:
return text
else:
print ‘control not found‘
else:
text = automation.TextControl(searchFromControl = wpfWindow,Name=controlName)
result=automation.WaitForExist(text,30)
if result==True:
return text
else:
print ‘control not found‘
break
if case(‘image‘):
if controlName=="":
iamge = automation.ImageControl(searchFromControl = wpfWindow,AutomationId=controlAutomationId)
result=automation.WaitForExist(image,30)
if result==True:
return iamge
else:
print ‘control not found‘
else:
iamge = automation.ImageControl(searchFromControl = wpfWindow,Name=controlName)
result=automation.WaitForExist(image,30)
if result==True:
return iamge
else:
print ‘control not found‘
break
if case(‘menuitem‘):
if controlName=="":
menuitem = automation.MenuItemControl(searchFromControl = wpfWindow,AutomationId=controlAutomationId)
result=automation.WaitForExist(menuitem,30)
if result==True:
return menuitem
else:
print ‘control not found‘
else:
menuitem = automation.MenuItemControl(searchFromControl = wpfWindow,Name=controlName)
result=automation.WaitForExist(menuitem,30)
if result==True:
return menuitem
else:
print ‘control not found‘
break
if case(‘list‘):
if controlName=="":
list = automation.ListControl(searchFromControl = wpfWindow,AutomationId=controlAutomationId)
result=automation.WaitForExist(list,30)
if result==True:
return list
else:
print ‘control not found‘
else:
list = automation.ListControl(searchFromControl = wpfWindow,Name=controlName)
result=automation.WaitForExist(list,30)
if result==True:
return list
else:
print ‘control not found‘
break
if case(‘progressbar‘):
if controlName=="":
progressbar = automation.ProgressBarControl(searchFromControl = wpfWindow,AutomationId=controlAutomationId)
result=automation.WaitForExist(progressbar,30)
if result==True:
return progressbar
else:
print ‘control not found‘
else:
progressbar = automation.ProgressBarControl(searchFromControl = wpfWindow,Name=controlName)
result=automation.WaitForExist(progressbar,30)
if result==True:
return progressbar
else:
print ‘control not found‘
break
if case(‘slider‘):
if controlName=="":
slider = automation.SliderControl(searchFromControl = wpfWindow,AutomationId=controlAutomationId)
result=automation.WaitForExist(slider,30)
if result==True:
return slider
else:
print ‘control not found‘
else:
slider = automation.SliderControl(searchFromControl = wpfWindow,Name=controlName)
result=automation.WaitForExist(slider,30)
if result==True:
return slider
else:
print ‘control not found‘
break
if case(‘custom‘):
if controlName=="":
custom = automation.CustomControl(searchFromControl = wpfWindow,AutomationId=controlAutomationId)
result=automation.WaitForExist(custom,30)
if result==True:
return custom
else:
print ‘control not found‘
else:
custom = automation.CustomControl(searchFromControl = wpfWindow,Name=controlName)
result=automation.WaitForExist(custom,30)
if result==True:
return custom
else:
print ‘control not found‘
break
if case(‘scrollbar‘):
if controlName=="":
scrollbar = automation.ScrollBarControl(searchFromControl = wpfWindow,AutomationId=controlAutomationId)
result=automation.WaitForExist(scrollbar,30)
if result==True:
return scrollbar
else:
print ‘control not found‘
else:
scrollbar = automation.ScrollBarControl(searchFromControl = wpfWindow,Name=controlName)
result=automation.WaitForExist(scrollbar,30)
if result==True:
return scrollbar
else:
print ‘control not found‘
break
if case(‘tab‘):
if controlName=="":
tab = automation.TabControl(searchFromControl = wpfWindow,AutomationId=controlAutomationId)
result=automation.WaitForExist(tab,30)
if result==True:
return tab
else:
print ‘control not found‘
else:
tab = automation.TabControl(searchFromControl = wpfWindow,Name=controlName)
result=automation.WaitForExist(tab,30)
if result==True:
return tab
else:
print ‘control not found‘
break
if case(‘treeitem‘):
if controlName=="":
treeitem = automation.TreeItemControl(searchFromControl = wpfWindow,AutomationId=controlAutomationId)
result=automation.WaitForExist(treeitem,30)
if result==True:
return treeitem
else:
print ‘control not found‘
else:
treeitem = automation.TreeItemControl(searchFromControl = wpfWindow,Name=controlName)
result=automation.WaitForExist(treeitem,30)
if result==True:
return treeitem
else:
print ‘control not found‘
break
if case(‘datagrid‘):
if controlName=="":
datagrid = automation.DataGridControl(searchFromControl = wpfWindow,AutomationId=controlAutomationId)
result=automation.WaitForExist(datagrid,30)
if result==True:
return datagrid
else:
print ‘control not found‘
else:
datagrid = automation.DataGridControl(searchFromControl = wpfWindow,Name=controlName)
result=automation.WaitForExist(datagrid,30)
if result==True:
return datagrid
else:
print ‘control not found‘
break
if case(‘table‘):
if controlName=="":
table = automation.TableControl(searchFromControl = wpfWindow,AutomationId=controlAutomationId)
result=automation.WaitForExist(table,30)
if result==True:
return table
else:
print ‘control not found‘
else:
table = automation.TableControl(searchFromControl = wpfWindow,Name=controlName)
result=automation.WaitForExist(table,30)
if result==True:
return table
else:
print ‘control not found‘
break
if case(‘toolbar‘):
if controlName=="":
toolbar = automation.ToolBarControl(searchFromControl = wpfWindow,AutomationId=controlAutomationId)
result=automation.WaitForExist(toolbar,30)
if result==True:
return toolbar
else:
print ‘control not found‘
else:
toolbar = automation.ToolBarControl(searchFromControl = wpfWindow,Name=controlName)
result=automation.WaitForExist(toolbar,30)
if result==True:
return toolbar
else:
print ‘control not found‘
break
if case(‘calendar‘):
if controlName=="":
calendar = automation.CalendarControl(searchFromControl = wpfWindow,AutomationId=controlAutomationId)
result=automation.WaitForExist(calendar,30)
if result==True:
return calendar
else:
print ‘control not found‘
else:
calendar = automation.CalendarControl(searchFromControl = wpfWindow,Name=controlName)
result=automation.WaitForExist(calendar,30)
if result==True:
return calendar
else:
print ‘control not found‘
break
if case(‘pane‘):
if controlName=="":
pane = automation.PaneControl(searchFromControl = wpfWindow,AutomationId=controlAutomationId)
result=automation.WaitForExist(pane,30)
if result==True:
return pane
else:
print ‘control not found‘
else:
pane = automation.PaneControl(searchFromControl = wpfWindow,Name=controlName)
result=automation.WaitForExist(pane,30)
if result==True:
return pane
else:
print ‘control not found‘
break
if case(‘headeritem‘):
if controlName=="":
headeritem = automation.HeaderItemControl(searchFromControl = wpfWindow,AutomationId=controlAutomationId)
result=automation.WaitForExist(headeritem,30)
if result==True:
return headeritem
else:
print ‘control not found‘
else:
headeritem = automation.HeaderItemControl(searchFromControl = wpfWindow,Name=controlName)
result=automation.WaitForExist(headeritem,30)
if result==True:
return headeritem
else:
print ‘control not found‘
break
if case(): # default, could also just omit condition or ‘if True‘
print "something else:!"
# No need to break here, it‘ll stop anyway
‘‘‘ to run smoke test cases of a modality.
[param][in] Main Windows Name e.g PatientAdmin
[param][in] Control Type
[param][in] Control Name
[param][in] Control AutomationId
[param][in] FreeParameter e.g. when control is editbox, this value will be the input value, if the control is combox, the parameter is index
‘‘‘
def FindControl(mainWindow, controlType,controlName,controlAutomationId,freeParameter):
type = sys.getfilesystemencoding()
mainWindow = mainWindow.decode(‘gb2312‘)
controlType=controlType.decode(‘utf-8‘).encode(type)
controlName=controlName.decode(‘gb2312‘)
controlAutomationId=controlAutomationId.decode(‘utf-8‘).encode(type)
freeParameter=freeParameter.decode(‘gb2312‘)
if mainWindow=="":
wpfWindow=None
else:
wpfWindow=automation.WindowControl(Name=mainWindow)
if controlName=="":
controlName=None
if controlAutomationId=="":
controlAutomationId=None
for case in switch(controlType.lower()):
if case(‘button‘):
print controlName
print controlAutomationId
button=automation.ButtonControl(searchFromControl = wpfWindow,Name=controlName,AutomationId=controlAutomationId)
result=automation.WaitForExist(button,30)
if result==True:
button.Click()
else:
print ‘control not found‘
break
if case(‘radiobutton‘):
if controlName=="":
radioButton=automation.RadioButtonControl(searchFromControl = wpfWindow,AutomationId=controlAutomationId)
result=automation.WaitForExist(radioButton,30)
if result==True:
radioButton.Click()
else:
print ‘control not found‘
else:
radioButton=automation.RadioButtonControl(searchFromControl = wpfWindow,Name=controlName)
result=automation.WaitForExist(radioButton,30)
if result==True:
radioButton.Click()
else:
print ‘control not found‘
break
if case(‘edit‘):
if controlName=="":
edit = automation.EditControl(searchFromControl = wpfWindow,AutomationId=controlAutomationId)
result=automation.WaitForExist(edit,30)
if result==True:
edit.SetValue(freeParameter)
else:
print ‘control not found‘
else:
edit = automation.EditControl(searchFromControl = wpfWindow,Name=controlName)
result=automation.WaitForExist(edit,30)
if result==True:
edit.SetValue(freeParameter)
else:
print ‘control not found‘
break
if case(‘checkbox‘):
if controlName=="":
checkbox = automation.CheckBoxControl(searchFromControl = wpfWindow,AutomationId=controlAutomationId)
result=automation.WaitForExist(checkbox,30)
if result==True:
checkbox.Click()
else:
print ‘control not found‘
else:
checkbox = automation.CheckBoxControl(searchFromControl = wpfWindow,Name=controlName)
result=automation.WaitForExist(checkbox,30)
if result==True:
checkbox.Click()
else:
print ‘control not found‘
break
if case(‘combobox‘):
if controlName=="":
combobox = automation.ComboBoxControl(searchFromControl = wpfWindow,AutomationId=controlAutomationId)
result=automation.WaitForExist(combobox,30)
if result==True:
combobox.Select(freeParameter)
else:
print ‘control not found‘
else:
combobox = automation.ComboBoxControl(searchFromControl = wpfWindow,Name=controlName)
result=automation.WaitForExist(combobox,30)
if result==True:
combobox.Select(freeParameter)
else:
print ‘control not found‘
break
if case(‘tabitem‘):
if controlName=="":
tabitem = automation.TabItemControl(searchFromControl = wpfWindow,AutomationId=controlAutomationId)
result=automation.WaitForExist(tabitem,30)
if result==True:
tabitem.Click()
else:
print ‘control not found‘
else:
tabitem = automation.TabItemControl(searchFromControl = wpfWindow,Name=controlName)
result=automation.WaitForExist(tabitem,30)
if result==True:
tabitem.Click()
else:
print ‘control not found‘
break
if case(‘listitem‘):
if freeParameter<>"":
combobox = automation.ComboBoxControl(searchFromControl = wpfWindow,AutomationId=freeParameter)
left, top, right, bottom = combobox.BoundingRectangle
automation.Click(right-5,bottom-5,1)
listitem = automation.ListItemControl(searchFromControl = wpfWindow,AutomationId=controlAutomationId)
listitem.Click()
else:
if controlName=="":
listitem = automation.ListItemControl(searchFromControl = wpfWindow,AutomationId=controlAutomationId)
listitem.Select()
else:
listitem = automation.ListItemControl(searchFromControl = wpfWindow,Name=controlName)
listitem.Select()
break
if case(‘text‘):
if controlName=="":
text = automation.TextControl(searchFromControl = wpfWindow,AutomationId=controlAutomationId)
result=automation.WaitForExist(text,30)
if result==True:
text.Click()
else:
print ‘control not found‘
else:
text = automation.TextControl(searchFromControl = wpfWindow,Name=controlName)
result=automation.WaitForExist(text,30)
if result==True:
text.Click()
else:
print ‘control not found‘
break
if case(‘image‘):
if controlName=="":
iamge = automation.ImageControl(searchFromControl = wpfWindow,AutomationId=controlAutomationId)
result=automation.WaitForExist(image,30)
if result==True:
image.Click()
else:
print ‘control not found‘
else:
iamge = automation.ImageControl(searchFromControl = wpfWindow,Name=controlName)
result=automation.WaitForExist(image,30)
if result==True:
image.Click()
else:
print ‘control not found‘
break
if case(‘menuitem‘):
if controlName=="":
menuitem = automation.MenuItemControl(searchFromControl = wpfWindow,AutomationId=controlAutomationId)
result=automation.WaitForExist(menuitem,30)
if result==True:
menuitem.Click()
else:
print ‘control not found‘
else:
menuitem = automation.MenuItemControl(searchFromControl = wpfWindow,Name=controlName)
result=automation.WaitForExist(menuitem,30)
if result==True:
menuitem.Click()
else:
print ‘control not found‘
break
if case(‘list‘):
if controlName=="":
list = automation.ListControl(searchFromControl = wpfWindow,AutomationId=controlAutomationId)
result=automation.WaitForExist(list,30)
if result==True:
list.Click()
else:
print ‘control not found‘
else:
list = automation.ListControl(searchFromControl = wpfWindow,Name=controlName)
result=automation.WaitForExist(list,30)
if result==True:
list.Click()
else:
print ‘control not found‘
break
if case(‘progressbar‘):
if controlName=="":
progressbar = automation.ProgressBarControl(searchFromControl = wpfWindow,AutomationId=controlAutomationId)
result=automation.WaitForExist(progressbar,30)
if result==True:
progressbar.Click()
else:
print ‘control not found‘
else:
progressbar = automation.ProgressBarControl(searchFromControl = wpfWindow,Name=controlName)
result=automation.WaitForExist(progressbar,30)
if result==True:
progressbar.Click()
else:
print ‘control not found‘
break
if case(‘slider‘):
if controlName=="":
slider = automation.SliderControl(searchFromControl = wpfWindow,AutomationId=controlAutomationId)
result=automation.WaitForExist(slider,30)
if result==True:
slider.Click()
else:
print ‘control not found‘
else:
slider = automation.SliderControl(searchFromControl = wpfWindow,Name=controlName)
result=automation.WaitForExist(slider,30)
if result==True:
slider.Click()
else:
print ‘control not found‘
break
if case(‘custom‘):
if controlName=="":
custom = automation.CustomControl(searchFromControl = wpfWindow,AutomationId=controlAutomationId)
result=automation.WaitForExist(custom,30)
if result==True:
custom.Click()
else:
print ‘control not found‘
else:
custom = automation.CustomControl(searchFromControl = wpfWindow,Name=controlName)
result=automation.WaitForExist(custom,30)
if result==True:
custom.Click()
else:
print ‘control not found‘
break
if case(‘scrollbar‘):
if controlName=="":
scrollbar = automation.ScrollBarControl(searchFromControl = wpfWindow,AutomationId=controlAutomationId)
result=automation.WaitForExist(scrollbar,30)
if result==True:
scrollbar.Click()
else:
print ‘control not found‘
else:
scrollbar = automation.ScrollBarControl(searchFromControl = wpfWindow,Name=controlName)
result=automation.WaitForExist(scrollbar,30)
if result==True:
scrollbar.Click()
else:
print ‘control not found‘
break
if case(‘tab‘):
if controlName=="":
tab = automation.TabControl(searchFromControl = wpfWindow,AutomationId=controlAutomationId)
result=automation.WaitForExist(tab,30)
if result==True:
tab.Click()
else:
print ‘control not found‘
else:
tab = automation.TabControl(searchFromControl = wpfWindow,Name=controlName)
result=automation.WaitForExist(tab,30)
if result==True:
tab.Click()
else:
print ‘control not found‘
break
if case(‘treeitem‘):
if controlName=="":
treeitem = automation.TreeItemControl(searchFromControl = wpfWindow,AutomationId=controlAutomationId)
result=automation.WaitForExist(treeitem,30)
if result==True:
treeitem.Click()
else:
print ‘control not found‘
else:
treeitem = automation.TreeItemControl(searchFromControl = wpfWindow,Name=controlName)
result=automation.WaitForExist(treeitem,30)
if result==True:
treeitem.Click()
else:
print ‘control not found‘
break
if case(‘datagrid‘):
if controlName=="":
datagrid = automation.DataGridControl(searchFromControl = wpfWindow,AutomationId=controlAutomationId)
result=automation.WaitForExist(datagrid,30)
if result==True:
datagrid.Click()
else:
print ‘control not found‘
else:
datagrid = automation.DataGridControl(searchFromControl = wpfWindow,Name=controlName)
result=automation.WaitForExist(datagrid,30)
if result==True:
datagrid.Click()
else:
print ‘control not found‘
break
if case(‘table‘):
if controlName=="":
table = automation.TableControl(searchFromControl = wpfWindow,AutomationId=controlAutomationId)
result=automation.WaitForExist(table,30)
if result==True:
table.Click()
else:
print ‘control not found‘
else:
table = automation.TableControl(searchFromControl = wpfWindow,Name=controlName)
result=automation.WaitForExist(table,30)
if result==True:
table.Click()
else:
print ‘control not found‘
break
if case(‘toolbar‘):
if controlName=="":
toolbar = automation.ToolBarControl(searchFromControl = wpfWindow,AutomationId=controlAutomationId)
result=automation.WaitForExist(toolbar,30)
if result==True:
toolbar.Click()
else:
print ‘control not found‘
else:
toolbar = automation.ToolBarControl(searchFromControl = wpfWindow,Name=controlName)
result=automation.WaitForExist(toolbar,30)
if result==True:
toolbar.Click()
else:
print ‘control not found‘
break
if case(‘calendar‘):
if controlName=="":
calendar = automation.CalendarControl(searchFromControl = wpfWindow,AutomationId=controlAutomationId)
result=automation.WaitForExist(calendar,30)
if result==True:
calendar.Click()
else:
print ‘control not found‘
else:
calendar = automation.CalendarControl(searchFromControl = wpfWindow,Name=controlName)
result=automation.WaitForExist(calendar,30)
if result==True:
calendar.Click()
else:
print ‘control not found‘
break
if case(‘pane‘):
if controlName=="":
pane = automation.PaneControl(searchFromControl = wpfWindow,AutomationId=controlAutomationId)
result=automation.WaitForExist(pane,30)
if result==True:
pane.Click()
else:
print ‘control not found‘
else:
pane = automation.PaneControl(searchFromControl = wpfWindow,Name=controlName)
result=automation.WaitForExist(pane,30)
if result==True:
pane.Click()
else:
print ‘control not found‘
break
if case(‘headeritem‘):
if controlName=="":
headeritem = automation.HeaderItemControl(searchFromControl = wpfWindow,AutomationId=controlAutomationId)
result=automation.WaitForExist(headeritem,30)
if result==True:
headeritem.Click()
else:
print ‘control not found‘
else:
headeritem = automation.HeaderItemControl(searchFromControl = wpfWindow,Name=controlName)
result=automation.WaitForExist(headeritem,30)
if result==True:
headeritem.Click()
else:
print ‘control not found‘
break
if case(): # default, could also just omit condition or ‘if True‘
print "something else:!"
# No need to break here, it‘ll stop anyway
if __name__ == ‘__main__‘:
FindControl(sys.argv[1],sys.argv[2],sys.argv[3],sys.argv[4],sys.argv[5])
以上是关于python+UIAutomation+libary的主要内容,如果未能解决你的问题,请参考以下文章
基于UIAutomation+Python+Unittest+Beautifulreport的WindowsGUI自动化测试框架主入口main解析
pythonGUI自动化:uiautomation的常见使用
基于UIAutomation+Python+Unittest+Beautifulreport的WindowsGUI自动化测试框架common目录解析
基于UIAutomation+Python+Unittest+Beautifulreport的WindowsGUI自动化测试框架主入口main解析