最新评论
guidee 2011-11-16 21:42
你好,
看了你关于UIAutomation系列的文章,受益颇多。
我在实践中遇到了两个问题,一直没有找到解决的方法,希望你能指导一下。
1:我希望获得一个element 的所有children, 但是FindAll()方法 有个一个Condition 参数,我该怎样设置这个参数才能使 FindAll()返回所有的children.
public AutomationElementCollection FindAll(
TreeScope scope,
Condition condition
)
2:通常我们用UISPY 或者 SPY++ 抓取某个element,可以查看到它的各项属性。
但是我实践中发现,有些element 是抓取不到的,那我们的代码应该怎样获得这些element.
e.g.
在win 2008 server,打开server manager->Features->Remove Features, 弹出 Remove Features wizard窗口,这个窗口里有一个Tree, UISPY只能抓取到包含这个Tree 的pane,我们该如何编程抓取到这个tree。
[img]http://hiphotos.baidu.com/guidee/pic/item/155188196a659c3242a9ad79.jpg[/img]
[img]http://hiphotos.baidu.com/guidee/pic/item/1542c91f74c14014f724e420.jpg[/img]
Gil 2010-11-10 15:29
对于带层次关系的控件树,假若A有子控件B,B有子控件C,那么用A.FindChild()或者A.FindAll()都是无法找到控件C的吧?
Gil 2010-11-10 15:16
你好,请教个问题。
我发现你代码中的aeForm赋值了两次,两次赋值期间没有对该实例作任何的改变和调用,于是乎,我把
AutomationElement aeForm = AutomationElement.FromHandle(p.MainWindowHandle);
改成
AutomationElement aeForm;
如我所料,程序的编译和执行都跟没改代码前丝毫不差。那么,AutomationElement.FromHandle(p.MainWindowHandle)意欲何为?
开着拖拉机 2010-01-15 21:09
@nemo2389
可以,不过至少要知道某一个属性,例如HelpText,AutomationId等
ffei 2009-12-28 13:50
一口气把楼主的UI Automation系列看完了,不过vsts2010好像已经把这些全部封装好了,并且对于web的支持比windows app更好。
提高非常简单的api来找到控件,楼主有兴趣可以参考一下:
在vsts2010中,提供一种codeduitest类型,基本可以参照unit模式来开发ui方面的测试代码
http://blogs.msdn.com/mathew_aniyan/archive/2009/02/12/hand-coding-a-coded-ui-test.aspx
mianxiang 2009-12-28 12:33
Hi Kangyi,
很高兴能看到你的文章,谢谢你的分享:)
我现在碰到了一个问题,不知道如何解决:我用UISpy查看一个窗口时,它显示是支持WindowPattern 和 TransformPattern的,但是当我找到这个窗口的AuotmationElement之后,调用TryGetCurrentPattern去获得WindowPattern和TransformPattern时,总会出现异常。不知道这个是啥原因引起的?有没有什么解决的办法?
谢谢。
yufun 2009-12-22 11:49
@包建强
UI Automation中的Name属性名字起的不好,貌似我在哪个博客看到有批评这个名字的,UI Automation中的Name叫Text更好一点。起这个名字估计是为了和AccessibleName保持统一吧,如果你的控件设置了AccessibleName,这个Name就会拿AccessibleName作为值,如果没有设置,会拿Window Text作为值
而AutomationID针对不同类型的控件是不一样的,比如WinForm和Win32,一般是用变量名作为AutomationID的,对于WPF,是可以通过AutomationProperties.AutomationId来设置的,如果没有设置,变量名将会作为AutomationID
yufun 2009-12-22 11:42
@1111111111111111
VS2010中是对UIAutomation的一个封装,跟White差不多
而且貌似封装的不怎么好使,反正我们是自己来封装UIAutomation来做
开着拖拉机 2009-12-13 23:29
@donjuan
你好,谢谢你回答我的问题,此问题的确是UI Automation返回的错误,我操作的窗体中有infragistics的datagrid控件,找前几行没有问题,但是在找第四行的时候就会抛出此异常,我调用了GC.Collect();后此问题出现的频率就没有以前那么高了。谢谢
donjuan 2009-12-13 21:33
我想Microshaoft的意思应该是
var ptr = IntPtr.Zero;
try
{
ptr = ...
}
finally
{
Marshal.ReleaseCom(ptr);
}
ComException不是由于垃圾回收或者内存的问题,ComException实际上是针对几乎所有的COM错误码的一个封装,你这个问题,应该是UI Automation返回了错误:
// The window style or class attribute is invalid for this operation.
ERROR_INVALID_WINDOW_STYLE
至于为什么UI Automation会返回这个错误,应该要看它正在尝试的窗体是什么,这个需要具体问题具体分析,呃……最后一句好像是废话。


