1、White简介 java
White是微软开发的一个开源工具,它提供了一套主要用于UI测试的框架。它适用于WinForm, WPF, Win32 以及SWT(java)的测试。 框架
White是用C#开发的,但White除了支持.Net语言外,还支持Python和Ruby。(Python和Ruby是经过IronPython or IronRuby做为端口与.Net Framework结合。) 工具
White 是基于UIAutomation 这个类库的,它是经过调用UIA并对它进行封装,因此它的结构如这样的:最底层是Windows 操做系统,在 Windows 操做系统之上是 .Net运行时,在.Net运行时之上是UI Automation Library, 在UI Automation Library之上是White, 而后最上层是咱们调用White 组建的测试框架。(什么是UIA,它是.Net的一个类库,它可以帮助咱们找到UI 控件,能获得控件的属性值,并可以操做控件。固然它主要是基于Windows平台的。) 测试
2、White 寻找控件的机制 spa
White是经过UI Automation API来找到某个窗口中的控件的。它经过遍历窗口中的全部控件来找到指定控件。那么若是有多个窗口打开时,怎么知道去哪一个窗口寻找呢,是这样的,每次要寻找某个控件时,必须把它所属的窗口句柄传入,这样UIA经过window message与指定窗口通讯,进而去指定窗口寻找相应控件。 操作系统
其实White与selenium, watir等框架很是类似。它经过UIAutomation库和Windows Message实现对窗口(控件)的识别与操做,White 将对应的Control信息暴露给UI Automation, 再经过UI Automation库,将这些Control信息识别成各UI Item。 设计
White寻找控件的方式主要有如下几种: orm
l 经过控件的Name寻找 索引
l 经过控件的AutomationID寻找 开发
l 经过控件显示的Text寻找
l 经过控件的类型寻找
l 经过索引寻找
l 经过位置寻找
这几种寻控件的方式中,若是单一的只使用一种的话,前几种的寻找速度都不是很快,除了最后一种经过位置来寻找。
实践经验:
那么咱们有没有办法来提早下寻找速度呢,我在实际使用中通常会运用这些方法:
将多种寻找方法结合在一块儿,好比,既提供控件类型,又提供名字或者Automation ID等。(这样UIA在找控件时能够有的放矢的去找,而不用一个个的去找。首先根据类型,就能够过滤掉一大批,而后只要在符合这个类型的控件里面找到Auto ID对应的就好了。)
还有一种方法是先找到主控件,而后再利用主控件再寻找属于主控件下一级的控件。好比,先得到一个GroupBox的句柄,而后在这个GroupBox下找到指定Name的就好了。这样就大大的缩小了寻找范围,不用满窗口的去寻找了。
固然有时White遍历一遍还不必定能百分之百找到想要的控件,这时,咱们就要在本身的代码中设置一个循环,当判读返回为null时,等上个一秒半秒而后于让它去找一次。固然这个循环也不是无限制的,咱们最可能是给它10次机会,若是仍是找不到,就只能抛出异常了或者返回null。
这个问题在对控件进行操做时也会发生,因此对每一个控件的操做,咱们要等到这个控件enable以后,再去操做。
3、White经过位置寻找控件
位置寻找能够快速的找到相应的控件,而不用像其它方法同样遍历窗口中的各个控件。咱们只要将被测程序运行过一遍,White就会自动将全部控件的位置信息保存到一份XML文件中,之后再次运行被测程序时White就能够快速的找到指定的控件。控件是信息是与指定窗口相关联的,因此窗口大小、位置的改变都不会影响找控件。固然若是界面的设计有改动,那就得重写以前保存的信息了。
4、元素识别工具,方便咱们给White 提供控件信息。
UISpy是.Net3.0 SDK提供的工具,并不属于White框架,可是咱们能够经过该工具进行元素的识别。UISpy会将全部元素识别成一棵控件树,它能提供控件的详细信息,好比:Name, AutoID, Type, Position等属性和方法。