如何自动验证每个元素上都有HTML ID?

时间:2009-08-05 01:22:28

标签: html automated-tests intellij-idea freemarker checkstyle

我项目中的测试人员希望每个页面元素都有一个唯一的HTML ID,以便更轻松地进行自动化测试。

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

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

有什么想法吗?

6 个答案:

答案 0 :(得分:8)

我想到了两个想法:1。让他们告诉你什么没有。如果这不起作用,2。获得新的测试人员。 ;)

什么样的测试引擎在每个元素上都需要Id?

答案 1 :(得分:5)

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

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

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

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

正如笔记一样 - 自动生成ID的建议充满了风险。这些很容易给人一种虚假的安全感,可能比没有任何情况更糟糕。关键是ID必须稳定可靠。如果将新元素添加到上面的DOM中,则递增生成的ID将会更改。如果对标签等进行小的更改等,则基于其内容的哈希的ID将会改变...

另外作为测试人员 - 花半小时写一个xpath来唯一地识别一个元素是一个很少的时间使用,如果添加ID将花费开发人员5分钟..... :)

答案 2 :(得分:4)

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

在没有ID黄色的情况下为任何颜色着色,在那里您只需使用Firebug浏览源代码并查找颜色为黄色的内容。

$.each($(*:not([id])), function(){
    $(this)
        .css("backgroundColor", "yellow")
        .addClass("no-id");
});

答案 3 :(得分:3)

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

  1. ID应该是唯一的。
  2. 这会给你的网页增添许多臃肿
  3. 如果这些是生成的......我认为这次测试工具每次都需要相同吗?
  4. 此测试工具的名称是什么?似乎很奇怪,每个元素都需要ID
  5. 假设每次访问时每个页面可能包含略有不同的数据,这似乎是管理的后勤噩梦

答案 4 :(得分:3)

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

上面的jQuery解决方案会让他们得到他们所要求的东西 - 但也许不是他们(或者你,作为一个团队)所需要的。我肯定会回到测试人员那里(不要解雇他们!),并试着多了解一下这个要求。它真的是每个元素吗?一起看几页,看看有什么遗失 - 也许他们只是沮丧,需要比他们更多的ID。

很难相信测试工具只能通过ID来处理DOM元素;看看是否有其他选项可以同样有效,以及您可以自愿添加哪些选项来支持它们。 (它肯定比在任何地方添加ID更容易。)

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

另一件要考虑的事情 - 如果你需要生成ID--就是服务器端。根据您所使用的语言,可能更容易在那里执行,并且不会破坏浏览器性能。

祝你好运!

答案 5 :(得分:1)

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

以Chacha102的想法为基础

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

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