我正在使用MSAA Server(Miscrosoft Active Accessibility)打开控件,以便使用Coded UI自动对其进行测试。我正在使用MSAA,因为代码适用于VS2008,因此UI自动化不可用。
除了在同一个窗口上有两个控制元素的情况外,它的效果很好。问题是生成的UI Map Hierarchy。这是错误的,但对于处理一个控件的情况,工作正常。
使用带有MSAA示例的示例的问题,可在sdk上找到:
MSAA Server Sample from Microsoft
因此,当我映射窗口时,我得到了正确的地图,但是当我在列表中映射元素时,元素是正确的,但是没有映射到列表中:
Coded UI Map from mapping the events and asserts
我的应用程序中存在完全相同的问题。
谢谢
答案 0 :(得分:0)
我已经修复了使用静态std::map<string,int>
在创建新对象时获取标识符的问题。
所以当创建一个新对象时,我用当前窗口标题查询静态结构(我知道这是一个冒险的操作,但它有效),我得到一个新的标识符。
我在调用MSAA方法时返回标识符:IAccessible::get_accValue
我将coded-ui的Value搜索属性添加到该属性中,它按照我的要求运行。
答案 1 :(得分:0)
我没有添加和回答Windows消息:WM_GETOBJECT,而是覆盖了CWnd类的可访问方法。
问题是获取CWnd :: get_accName(VARIANT varID,BSTR * pszName)返回的名称在窗口的所有chindrens中是相同的,所以我在我的类中修改了这个方法以添加一些额外的信息识别我的元素。
它有效。