【发布时间】:2012-12-18 10:26:39
【问题描述】:
我们决定将 Sencha ExtJS 用于我们新产品的客户端,并计划在客户端进行自动化功能测试。我们研究了几种工具,如 Ranorex、Selenium、Telerik Test Studio 等,到目前为止,我们比其他工具更喜欢 Test Studio。无论如何,无论人们可能使用哪种工具,我要问的问题都是相关的。
我很想知道获取 extjs 控件的内部元素的推荐方法是什么。为了清楚起见,我举个例子。
我有一个数字字段控件,我想测试一下,如果我单击“向上”按钮,字段中的值将增加一个单位。请注意,我确实为数字字段 (id="testDurationHourNumberField") 设置了唯一 ID。 number 字段具有以下(简化的)DOM 结构:
<table id="testDurationHourNumberField">
<tbody>
<tr id="testDurationHourNumberField-inputRow">
<td id="testDurationHourNumberField-labelCell">
<label id="testDurationHourNumberField-labelEl">Label:</label>
</td>
<td id="testDurationHourNumberField-bodyEl">
<table id="testDurationHourNumberField-triggerWrap">
<tbody>
<tr>
<td id="testDurationHourNumberField-inputCell">
<input id="testDurationHourNumberField-inputEl">
</td>
<td>
<div role="button" id="ext-gen1211"></div>
<div role="button" id="ext-gen1212"></div>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
为此,我必须访问输入元素 (id="testDurationHourNumberField-inputEl") 和按钮 (id="ext-gen1211")。访问这 2 个元素的推荐方式是什么?
到目前为止,我有以下选择:
- 使用 ExtJS 内部 ID - 似乎不太好,因为:
- 这些是内部 ID,它们不受我的控制,如果我稍后在页面上添加另一个控件,它们可能会发生变化
- 似乎对于同一个页面,我在不同的浏览器中获得了不同的 ID。例如,在 IE 10 中,按钮的 ID 与我在 Google Chrome 中获得的 ID 不同。
- 通过唯一 ID 获取控件并通过了解其内部 DOM 结构或属性来获取内部元素 - 似乎不好,因为:
- 我宁愿不使用这种方式,因为我不知道当升级到 ExtJS 的下一个版本时,内部 DOM 结构不会改变或某些属性名称会改变,我将不得不更新我创建的测试
- 例如伪代码:getById('testDurationHourNumberField').getElementByAttributeAndIndex('role=button', 0)
您能告诉我推荐的方法吗?
谢谢,
保罗
【问题讨论】:
-
你的意思是你在功能测试中没有访问 ExtJS 的权限?你必须有 ExtJS 才能渲染 DOM。
-
在运行 Web 应用程序时我们总是有 ExtJS,但在运行功能测试时我们无法访问它。我们使用 Test Studio/Selenium 等工具进行功能测试,因为它们提供了一种记录用户操作并将其作为测试运行的自动化方式。这些工具通常在 DOM 上运行,它们解析 DOM,并有一组 API 来对 DOM 元素执行。
-
他们可以运行javascript吗?
-
我不知道他们是否可以运行 javascript,也许某些工具具有此功能,但是当我发布此问题时,我假设默认情况下,他们不能。
标签: extjs widget functional-testing uniqueidentifier