【问题标题】:Unique identifiers for ui automationui 自动化的唯一标识符
【发布时间】:2016-12-09 02:34:18
【问题描述】:

我们的 ui 自动化团队正在寻求一种更好的方法来为他们的自动化测试选择元素。我的想法是我们可以为每个可测试元素注入一个专用属性(比如“ui-auto”)。该属性的值是:

  • 独一无二的
  • 持久性(不会在会话或页面加载之间发生变化,以免破坏测试)
  • 可预测(根据操作类型、位置等遵循一些命名约定)

我的问题是:

  1. 这是个好主意吗?欢迎提出更好的想法。
  2. 是否有这方面的现有约定?
  3. 什么是最好的实施方式 这个?

我应该提到我们正在使用角度,我认为 使用某种指令和/或服务将有助于自动化 这个。

我还应该说我不想使用“id”属性 b/c 我想在开发关注点(id 可能用于 javascript)和 qa 关注点(选择元素自动化测试)

【问题讨论】:

  • 什么是测试框架?量角器?您可能不需要 id,而是需要一个不变的特定属性,例如绑定、ng-model、类层次结构等。否则我会手动添加 id 以确保您所做的事情,它不是本身就是个坏主意,尤其是如果您决定对此类 id 进行约定,表明它们仅用于测试并且不应被其他 JS 代码使用。
  • 谢谢@floribon。测试框架是 selenium(尽管我的建议是量角器 :)
  • protractor 使用 selenium 来自动化浏览器,但为您提供了一个很好的 angular 框架来运行 jasmine 测试,这不是不兼容的,并且可以为您省去很多麻烦。
  • 投反对票的人:也许愿意解释投反对票,而不仅仅是对得分低的人快速投反对票。
  • 同意你们,这是我对平衡的赞成票

标签: angularjs ui-automation


【解决方案1】:

在我们的实现中,我们向 DOM 元素添加了 data-awt 属性,该值由上下文(页面和模式)类型和唯一字符串组成。当我们使用 EXTJS 库时,我们的类型是 xtype,唯一的字符串是组件名称或文本属性。上下文由开发人员通过在最上面的父级上放置一个唯一属性来控制,所有子级都将其用作他们的上下文。

实际上,我们最终会得到 data-awt 值,例如 devicesListing-button-edit、deviceDetails-displayfield-name、deviceDetailsEditWindow-textfield-name。

我们发现依赖 css、id 或其他属性是不可靠和不可预测的,因为我们不想在 UI 发生一些变化时重写我们的测试。现在测试只需要在现有元素更改其名称时进行更新(例如,PM 说名称字段现在应该使用 DTO 中的“客户”数据)。

【讨论】:

  • 如果父项下有几个相同类型的子项怎么办……没有id如何选择它们?您可以指定顺序,但这很容易受到 UI 更改的影响。
  • @Xena 在这种情况下,我们向子项 data-awt-postfix 添加了另一个属性,该属性在渲染时读取(记住使用 EXTJS)并将其附加到已经制定的字符串,这对于诸如无线电组之类的元素列表,您最终会得到 data-awt="context-type-radiogroup-radiooption" 其中 radiooption 是开发人员放在无线电组中的子项上的 data-awt-postfix
【解决方案2】:

您还可以使用元素的类并提供一个唯一标识符,前缀为“auto_”或“t_”。

存在这样的协议,即如果任何人使用该前缀更改类名,测试就会中断。

@o4ohel 我同意不使用 id 更好,因为开发人员也依赖它们,并且有时需要更改。自动化的标识符应该被隔离。有这样的分离真好。

【讨论】:

    猜你喜欢
    • 2011-02-19
    • 2011-08-17
    • 2012-07-18
    • 1970-01-01
    • 2014-03-05
    • 2012-06-02
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多