首页 > 解决方案 > MFC 资源 ID 和 Squish

问题描述

我正在尝试使用 Squish 自动执行一些 GUI 测试,并在 Squish 中不断遇到 MFC 资源 ID 的问题。

我创建一个这样的静态标签:

CStatic m_Status;
m_Status.Create("", WS_CHILD | WS_VISIBLE | SS_CENTERIMAGE | SS_LEFT, 
                mCfg->rectStatus(), this, 42);
m_Status.SetWindowText("42 is the answer");

当我用 Squish 监视这个标签时,我得到的只是:

{"container": o_Pane, "text": "42 is the answer", "type": "Label"}

但是,没有身份证。随着文本的变化,仅基于文本的匹配元素并不是最佳的。

在同一程序中,其他标签是通过资源管理器向导创建的。对于这些标签,Squish 能够获取资源 ID 并设置正确的“nativeObject”属性。

是否有某种方法可以使在源代码中创建的 CStatic 对象也对 Squish 正确可见,如果可能的话,使用 nativeObject 属性?

标签: c++mfcsquish

解决方案


间谍活动可用于检查对象属性。一旦您知道 Squish 看到了哪些属性,您就可以使用 Squish 对象实名中的属性及其值来识别所需的对象。

但是,由于没有编译 Squish 的 MFC 支持,它通常无法访问此类 ID,因为它通过窗口消息传递获取有关 MFC 控件的所有信息。

这些 ID 可能是通过 UI 自动化公开的。如果是这种情况,请与Inspect联系。如果是这样,请尝试通过 Squish 的 UI 自动化支持来识别对象。为此,将 SQUISH_DIR\lib\extensions\win\uiautomation.ext 中的优先级更改为高于 SQUISH_DIR\lib\extensions\win\mfc.ext 中的优先级,使用新的测试套件(用于良好的测量和测试),启动来自 Squish 的 AUT,选择对象并查看您是否看到不同的对象属性,以及 nativeObject 属性是否为非空(为空/空意味着 MFC 支持提供对对象的访问)。


推荐阅读