我正在尝试使用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属性?
最佳答案
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支持提供对对象的访问)。
关于c++ - MFC资源ID和压缩,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56888820/