c++ - 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 属性?
解决方案
间谍活动可用于检查对象属性。一旦您知道 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 支持提供对对象的访问)。
推荐阅读
- python - 当在函数内的 if 语句的条件中使用全局变量时,Python 会抛出 UnboundLocalError
- ios - 执行自动转场
- javascript - 如何通过按下选项卡按钮遍历 div 并显示其全部内容
- hyperledger-fabric - 在 Hyperledger Composer 中验证和处理交易提案请求
- ionic-framework - Ionic 3 popover on select,如何使用检查图标而不是圆圈?
- karate - 当任何一个步骤失败时,Karate -TestNG 停止执行
- ethereum - Solidity:在映射中检索结构数组的值
- python - Python3:请求模块头
- c++ - 如何在 C++ 中从现有的模板函数定义新函数
- reactjs - 使用条件连接 redux 中的多个组合减速器