目前, 我在困难地做着UI 的自动化测试.
其中一个测试是希望在做了某个操作之后, 得知某一特定的控件 Visible 是否为true, 这事情看起来简单, 实际上却几乎无解, 在 AutomationElement 等类中找了一大圈后, 无解.
AutomationElement.Current.IsOffScreen
有一些误导性, 微软的文档中说它可以用来判断一个UI元素是否显示在屏幕上, 实际上, 详细的解释中说, 主要是指Scroll控件是否把某个子控件滚到可视区域之外, 以及象 TreeView之类的控件是否把它的某个子控件给折叠起来了, 只是这种类型的不可见.
Control.Visible 的访问通过这个是不行的.
自己写了个小的测试, 尝试了一下, 发现: 如果一个子控件的 Visible为false时,
PropertyCondition prop_cond = new PropertyCondition(AutomationElement.AutomationIdProperty, id);
owner.FindAll(TreeScope.Descendants, prop_cond);
就不会返回指定的元素, 可以利用这一点来判断一个Control是否为Invisible, 当然, 也可以这个Control根本不是父控件的子元素.
考虑到我正在使用 TestApi 0.2, 它有一个方便一点的包装:
AutomationUtilities.FindElementsById(owner, id);
但是, 这个函数的实现却不象我想当然的那样跟上面的两句话一致, 它在Visible为false时仍然能返回指定的子控件.
阅读(1423) | 评论(0) | 转发(0) |