Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2345333
  • 博文数量: 527
  • 博客积分: 10343
  • 博客等级: 上将
  • 技术积分: 5565
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-26 23:05
文章分类

全部博文(527)

文章存档

2014年(4)

2012年(13)

2011年(19)

2010年(91)

2009年(136)

2008年(142)

2007年(80)

2006年(29)

2005年(13)

我的朋友

分类: WINDOWS

2009-06-23 22:46:41

目前, 我在困难地做着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) |
给主人留下些什么吧!~~