测试 extjs 应用程序

Posted

技术标签:

【中文标题】测试 extjs 应用程序【英文标题】:Testing extjs apps 【发布时间】:2012-12-05 16:10:16 【问题描述】:

当组件或组件部件(如网格中的组件)有预先生成的 id 时,我如何。

我可以为每个组件添加 ID,但如果我错过了一个或多个,并且应用程序又大又复杂怎么办?

ExtJS/Siesta 中是否有一个函数或某些模块允许您在应用程序中定位组件/元素,而不依赖于每个组件的预定义 ID

【问题讨论】:

您可以显式设置元素的 ID 并使用 Ext.get 或 Ext.getCmp 普遍的共识似乎是:小心 cmp.id,使用 itemId 和 'this.down('#' + theItemId);' (或“this.up()”)代替。在这里,我们谈论的是 ExtJS.ComponentQuery,它为您提供了其他可以玩的东西,例如类名、xtypes 和 css 类(如 jQuery 选择器) 【参考方案1】:

首先是very careful using IDs on the components。我已经看到了我与他们相当多的问题。

其次,ExtJS 提供了几种定位组件和元素的方法。不要将两者混为一谈。

对于组件:

Ext.getCmp(id) Ext.ComponentQuery.query() up() down() nextSibling() previousSibling() child() previousNode()

加上各种find..方法

对于元素:

Ext.get() Ext.dom.Query()

更多关于 DOM 查询http://docs.sencha.com/core/manual/content/domquery.html

【讨论】:

【参考方案2】:

使用 Siesta,您在定位要点击的位置等时有很多选项:

Dom 节点 ID(与 Ext 组件 ID 相同) 任何组件查询 任何 CSS 查询 坐标 真正的Ext Component JS实例 真实的 DOM 节点实例 复合查询(组件查询和 CSS 查询的组合,'.x-grid => .x-grid-cell' 一个函数,返回上述任何一个。

我的幻灯片中的更多信息在这里:https://speakerdeck.com/mats/testing-sencha-touch

【讨论】:

【参考方案3】:

您可能想查看自动化功能 GUI 测试工具RIATest。

RIATest 知道如何忽略 ExtJS 动态生成的 id,但如果您手动将 id 分配给组件,该工具使用它们进行识别(参见例如下面示例中的 #tree2)。

RIATest 中的测试根据 ExtJS UI 小部件运行。

使用 ExtJS 小部件的 RIATest 脚本示例:

以下点击带有“下一页”标签的 ExtJS 按钮:

ExtButton("Next Page")=>click();

以下内容将一行从一个 ExtJS 树拖放到另一个:

ExtRow("Controller.js")=>dragAndDropTo(
    ExtTreePanel("#tree2")->ExtRow("Custom Ext JS"));

这会折叠 ExtJS 框的标题:

ExtBox("Feeds")->ExtHeader("FeedsВ")->ExtCollapser()=>click();

(以上所有示例代码均来自在 ExtJS 示例应用程序上运行的真实测试脚本)。

(免责声明:我是 RIATest 团队成员)。

【讨论】:

以上是关于测试 extjs 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何为 extjs 应用程序选择组合框项 Internet Explorer?

Ext4PHP:用PHP创建ExtJS应用

ExtJS 4.2.1 模拟 Ext.Ajax.request

ExtJs之Ext.comboBox的远程数据源读取程序

Javascript - ExtJs - 类

ExtJs6 Desktop Demo 修改测试