1

查看 Knockout 示例,实际上不需要向 HTML 元素添加 ID。创建一个没有 ID 的大型表单似乎更易于维护。

但是,这会给 Selenium HQ 带来问题。无法唯一标识表单上的元素。

有哪些选择?Selenium 是否有另一种方法来选择由 Knockout 创建的元素?还是我必须为元素分配 ID?

我已经回顾了其他淘汰赛和硒问题。当它们开始时,它们都为 HTML 元素定义了 ID。

谢谢阿比

4

2 回答 2

6

简短回答:将 ID 添加到您的 HTML 元素中。

尽管您不需要这些属性来使您的网站正常运行,但您将使测试人员的生活变得更加轻松。

我在创建大型 ASP.NET MVC 4 应用程序的项目中遇到了完全相同的问题,该应用程序广泛使用 Knockout.js 和 Selenium。对于表单元素,我依靠 ASP.NET MVC 实用程序方法结合数据绑定表达式生成输出 HTML。ASP.NET MVC 根据支持模型自动生成唯一的 NAME 和 ID 属性。

然而,在我必须呈现表格、显示表单或对话框的所有其他情况下,我最终将 ID 属性添加到这些 HTML 元素中。如果您考虑一下,这是您的要求的逻辑结果。Knockout 很棒,因为您不再需要 ID 和 NAME 来将您的布局 (HTML) 和行为 (JS) 连接在一起。但是,其他框架(例如 Selenium)需要这些 ID 存在。

是的,您可以使用复杂而臃肿的 XPATH 表达式来解决它。但这会大大降低测试的可维护性。根据我的经验,将 ID 添加到数百个 HTML 元素只用了不到一天的时间,并且大大提高了我们测试人员的工作效率。

请记住,使用尽可能少的 HTML 开发功能性网站可能会很好。但是,如果这使您的网站无法测试,那么您将失去更多。可测试性是非功能性需求,但这并不意味着它不重要!

于 2012-08-28T17:38:41.557 回答
0

您应该将 Id 添加到您的 html 元素中。您的应用程序将变得更加复杂,可能您需要将多个视图模型绑定到同一页面上的不同部分,您需要 Ids。例如,在 中ASP.NET MVC,您需要构建一个partial view来显示您订购的所有产品,并且您希望在整个订购过程中共享这个局部视图,您需要绑定到这个特定的局部视图部分

于 2012-08-28T17:44:28.810 回答