往往我们使用控件的Name属性来标识,因此,我们可以再一步封装一下:
static AutomationElement WaitForElement(int milisecondTimeout, params string[] controlTexts) { var waitTime = 0; AutomationElement child = null; while (true) { var parent = AutomationElement.RootElement; var founded = true; foreach (var text in controlTexts) { child = WaitForElement(parent, text, 10); if (child == null) { founded = false; break; } parent = child; } if (founded) { break; } if (waitTime >= milisecondTimeout) { child = null; break; } Thread.Sleep(500); waitTime += 500; } return child; } |
因此,我就可以这样来等待一个控件的出现:
var btn = WaitForElement(5000, "安装向导", "完成"); |
甚至可以把按钮的点击也封装,封装成下面的方式调用,就像在AutoIt脚本里一样简单:
Click("安装向导", "完成"); |
最后,其实我想说的是,在codeplex上,有一个开源项目White,对UI Automation进行了一些易用性上的封装,非常值得我们去学习和参考,甚至直接拿来使用。下一篇我们将继续学习White测试框架,敬请关注。