【问题标题】:Identifying objects generated through framework and not built through raw HTML识别通过框架生成而不是通过原始 HTML 构建的对象
【发布时间】:2014-08-16 14:08:25
【问题描述】:

我有一种情况,我无法识别页面上的一些对象。它们没有唯一标识符(如名称、类、id)。我们的开发团队使用 JS 框架来生成模型、视图、控制器等并动态分配 id。还有很多子视图是通过动态 id 动态生成的。

所以我不能使用 id 的变化。我不想使用 xpath,因为它不是行业标准。我尝试了 css-selector 但它给了我很长的路不知道这是否是正确的方法。

我想从你们所有人那里知道,在开发代码中为对象添加额外的属性以用于测试目的是否正确?或者有没有更好的方法来处理这些场景?

【问题讨论】:

  • “xpath ...不是行业标准”是什么意思?见w3.org/TR/xpath20
  • @Siking:对不起,我的英语很糟糕。我想说我正在使用的应用程序很脆弱并且不断变化。所以有人告诉我,对于这些类型的应用程序来说,使用位置来识别是不可行的。
  • 你被告知错了。使用正确的 XPath 通常是您可以使用的最稳定的选项。

标签: selenium-webdriver sproutcore browser-automation


【解决方案1】:

如果您实际使用的是 SproutCore,您可以轻松地将 classNames (doc link) 或 layerId (doc link) 属性添加到任何视图,以缩短 CSS 选择器。

例如:

MyApp.MainListView = SC.ListView.extend({
  layerId: 'my_special_view',
  classNames: 'my-special-class',

  content: ["Hi", "Foo", "Bar"],

  exampleView: SC.ListItemView.extend({
    classNames: 'my-special-list-class'
  })
})

注意:如果您确定屏幕上只有 1 个视图实例,您将只想使用 layerId 属性,否则,classNames 属性是更好的方法。

我建议添加一些不是测试特定的类名,但允许您使用更短的 CSS 选择器。

【讨论】:

  • 再次,如果您使用的是 SproutCore,这里有一个非常方便的 Chrome 插件,它在控制台中为您提供当前选定元素的视图 $0vchrome.google.com/webstore/detail/sproutcore-debug/…
  • 另外,如果这不能完全满足您的需要,一些示例 HTML 和/或示例 SC 代码将帮助我们更接近。
  • @Dave:Firefox 有类似的东西吗?
  • 目前只怕 Chrome。它应该很容易移植,但没有人这样做。
猜你喜欢
  • 2022-08-02
  • 2017-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-24
  • 1970-01-01
相关资源
最近更新 更多