4

我项目中的测试人员希望每个页面元素都有一个唯一的 HTML ID,以使他们的自动化测试更容易。

我很难记住这样做,因为我不需要 ID 进行开发。我怎样才能确保我不会忘记?

我想也许像 Checkstyle 这样的东西可以告诉我,甚至是 IntelliJ 中的“检查”——但它们似乎都不支持这个功能。

有任何想法吗?

4

6 回答 6

8

两个想法浮现在脑海: 1. 让他们告诉你什么没有它。如果这不起作用,2. 获得新的测试人员。;)

什么样的测试引擎要求每个元素都有 ID?

于 2009-08-05T01:33:35.220 回答
6

作为将测试自动化作为日常工作的人:向与之交互的元素添加唯一 ID 的请求将为自动化测试套件增加很多稳定性。

为 DOM 中的每一个元素添加一个 ID 当然是一个荒谬的开销。

大多数框架都能够使用 CSS 或 XPath 甚至图像匹配。当开发人员和测试人员之间没有沟通渠道时,这是一个很好的后备方案。但是,如果这些团队之间存在沟通 - 添加这些是有意义的。

作为一个开发团队——你应该从这些测试中获得很多价值。在将更改部署到测试环境后,他们应该几乎可以立即为您提供反馈。如果测试是不稳定的 - 它们的价值将直线下降。让测试尽可能可靠符合每个人的利益。好的身份证在这方面是无价的。

就像一个注释 - 自动生成 ID 的建议充满了风险。这些很容易给人一种错误的安全感,而且可能比没有更糟糕。关键是ID要稳定可靠。如果将新元素添加到上面的 DOM 中,增量生成的 ID 将发生变化。如果标签等有微小变化,则基于其内容哈希的 ID 将发生变化......

同样作为测试人员 - 如果添加 ID 会花费开发人员 5 分钟 5 分钟,那么花费半小时编写 xpath 来唯一标识元素是浪费时间..... :)

于 2015-07-28T11:53:35.113 回答
4

如果你想要一些 javascript 的东西,你可以使用 jQuery。 $("*:not([id])").css('backgroundColor', 'yellow');

将没有 ID 的任何东西涂成黄色,您只需使用 Firebug 浏览源代码并寻找黄色的东西。

$.each($(*:not([id])), function(){
    $(this)
        .css("backgroundColor", "yellow")
        .addClass("no-id");
});
于 2009-08-05T01:26:06.943 回答
3

在每个页面上的每个元素上设置一个 ID 对我来说似乎是一个糟糕的计划。

  1. ID 应该是唯一的。
  2. 这会给你的页面增加很多膨胀
  3. 如果生成了这些...我认为对于此测试工具,它们每次都需要相同吗?
  4. 这个测试工具叫什么名字?每个元素都“需要”ID似乎很奇怪
  5. 假设每次访问时每个页面都可能包含略有不同的数据,这似乎是管理后勤方面的噩梦
于 2009-08-05T01:42:40.267 回答
3

工具不支持这一点的原因是这是一个相当奇怪的请求。我去过那儿。

上面的 jQuery 解决方案将得到他们所要求的——但可能不是他们(或您,作为一个团队)所需要的。我肯定会回到测试人员那里(而不是解雇他们!),并尝试更多地了解需求。真的是每一个元素吗?一起看几页,看看缺少什么——也许他们只是感到沮丧,需要比他们拥有的更多的 ID。

也很难相信测试工具只能通过 ID 来处理 DOM 元素。看看是否还有其他同样有效的选项,以及您可以自愿添加什么来支持它们。(这肯定比到处添加 ID 更容易。)

最后,如果 ID 是唯一的方法,请考虑根据比元素计数更永久的东西来分配 ID——innerHTML 的某种散列、元素的父级 + 索引或类似的东西。

另一件要考虑的事情——如果你需要生成 ID——是在服务器端进行。根据您使用的语言,在那里操作可能更容易,并且不会影响浏览器的性能。

祝你好运!

于 2009-08-26T05:04:18.870 回答
1

向每个元素添加 id 根本没有意义。但是,如果他们坚持,您可以添加一个小的 javascript 代码,将 Id 添加到测试站点,您可以在生产站点中省略它。

基于Chacha102的想法

$(document).ready(function() {
    var index = 1;
    $.each($(*:not([id])), function(){
        $(this).attr("id", "id1000" + index++); //or some other unique generator
    });
}

只要确保它在测试工具之前运行!

于 2009-08-05T01:40:18.677 回答