MFC资源ID和压缩

时间:2019-07-04 13:16:36

标签: c++ mfc 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"}

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

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

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

1 个答案:

答案 0 :(得分:0)

Spying可用于检查object properties。知道Squish看到哪些属性后,就可以使用Squish对象真实名称中的属性及其值来标识所需的对象。

但是,由于未嵌入MFC对Squish的支持,因此通常无法访问此类ID,因为它是通过Window Messaging获取有关MFC控件的所有信息的。

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