查看 Knockout 示例,实际上不需要向 HTML 元素添加 ID。创建一个没有 ID 的大型表单似乎更易于维护。
但是,这会给 Selenium HQ 带来问题。无法唯一标识表单上的元素。
有哪些选择?Selenium 是否有另一种方法来选择由 Knockout 创建的元素?还是我必须为元素分配 ID?
我已经回顾了其他淘汰赛和硒问题。当它们开始时,它们都为 HTML 元素定义了 ID。
谢谢阿比
查看 Knockout 示例,实际上不需要向 HTML 元素添加 ID。创建一个没有 ID 的大型表单似乎更易于维护。
但是,这会给 Selenium HQ 带来问题。无法唯一标识表单上的元素。
有哪些选择?Selenium 是否有另一种方法来选择由 Knockout 创建的元素?还是我必须为元素分配 ID?
我已经回顾了其他淘汰赛和硒问题。当它们开始时,它们都为 HTML 元素定义了 ID。
谢谢阿比
简短回答:将 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 开发功能性网站可能会很好。但是,如果这使您的网站无法测试,那么您将失去更多。可测试性是非功能性需求,但这并不意味着它不重要!
您应该将 Id 添加到您的 html 元素中。您的应用程序将变得更加复杂,可能您需要将多个视图模型绑定到同一页面上的不同部分,您需要 Ids。例如,在 中ASP.NET MVC
,您需要构建一个partial view
来显示您订购的所有产品,并且您希望在整个订购过程中共享这个局部视图,您需要绑定到这个特定的局部视图部分