最近在考虑自动化测试框架的时候,发现原来的想法,虽然解决了定位及访问控件的困难。但是,用例代码却因此对程序实现细节有了很强的依赖。这些依赖可能对用例代码的开发带来一些困惑。
在思考解决这个问题的时候,自然的方案,就是提供统一地访问控件的方式,而不是原来那种直接生成对象的方式。比如说,提供Controls[ID]的方式统一访问控件。那么,代码中虽然增加了对ID的输入,但是保障了用例代码对软件实现的具体依赖。就算实现变了,也基本不影响用例代码。
以往的对控件的定位,往往通过控件的隐含属性:包括ClassName,Index,ID等等。但获取这些属性的前提是使用工具去查看!一个显然的缺点是,这样的代码,可读性是比较差的!
于是,问题就是如何描述控件。
首先是描述的元素选择。我将这些可选择的元素约束在必须从界面上可以看到。于是也很容易得到这些元素的列表:
控件本身的标题性文本。
控件之间的相对位置。左右上下、父子关系。
控件标准类型(非ClassName)
控件显示顺序(从左到右,从上到下)
针对某些控件,特别是常用的文本编辑框、网格控件、ListView、TreeView等等都是没有标题的。所以定位这些控件才是描述中最难把握的地方。在这个问题上,重点考虑的是利用那些可以描述的控件,加上位置的判断,共同定位这些控件。
基于这些描述元素,基本上我们可以完成对所有控件的描述。如果实现了这点(假定可以实现),那么我们会发现,我们其实可以针对软件的原型进行编写测试用例。只不过这时候的校验代码都是失败的,但这不是正符合了测试驱动开发的精神了嘛?
自动化测试框架,在这方面的探索还会继续下去!