1.现在对UI自动化有了更深的认识,现在来纠正下我们普通人对她的看法。
首先,UI自动化做的事不是简单的点击鼠标和发送字符,这些操作仅仅是UI Automation的一个表现形式。
其次,UI自动化是根据一定的现实规律(包括系统,软件的特定规律),按照指定的步骤去进行一系列有规则的操作。
举例来讲,在不同的系统环境,UI element tree在存储某一个元素会把他们存放在不同的位置;
依据系统的特点,对UI element的属性甚至元素的初始化都不相同;
同一个软件但不同版本,UI展现是不同的,怎样保证同一个UI Automation应用程序能自适应不同的环境,需要程序员仔细斟酌的;
UI element有各种不同的类型,有下拉列表,有单选框,有文本框,有按钮,对于这些类型的UI element的点击方式是不同的;
最后还包括怎样执行不同的托、拉、拽不同的行为和确定移动像素的大小。
很多因素都是UI Automation需要考虑到的。所以UI Automation不像表象那样,告诉应用程序怎么去移动鼠标而已,表面背后藏着一些研究和规律在里面。
2.UI Automation还需要考虑一种情况:当UI automation执行的过程中,发生与期盼的行为不同的情况时,UI automation该如何去处理。
3.还有一个情况比较复杂:就是时间问题。
举三个例子:
a)查找UI element的时候,此时该元素消失了怎么办?或者该元素初始化时间过长;
b)查找UI element的方法在指定的时间内没有找到对象该怎么办?
c)在什么时候去验证是否弹出了某个不期望的对话框或错误提示(这些对话框或错误提示在不同系统环境下存储的位置是不同的,而且出现的时间也不一定。)
举个更具体的例子,这个“时间”包括确保在WaitForClose/WaitForShow/FindUIElement之前中后,不会发生UI element Not availableException 或者NullObjectReferenceException或者NotFoundOutUIException。
然而,这些问题不应该在具体test case里面去解决,应该在这个automation执行的框架上去解决。
4.自动化有这个一个要求,就是不需要人在一旁盯着自动化的执行。
所以需要有详细的日志来记录自动化执行的过程中所有的执行过程,甚至包括if else这样的判断语句。
5.UI automation不仅仅能应用在测试当中,因为UI Automation的本质是不需要人的参与就能自动地对UI进行操作,所以她还能应用中办公中(比如聊天,发邮件,进行数字统计),还能应用中游戏中(打怪物)。前提是这些操作的对象都是可识别的。