简短的回答:在源代码中添加类名是正确的方向,应该被认为是一种好的做法,但是,在那之后,:class
在大多数情况下使用定位器还不够好,尝试使用:xpath
or :css
。因此,作为开发人员,您继续添加类名,但您需要确保您的 QA 人员知道如何使用 Watir,而不是简单地使用:id
or:class
用于所有定位器。
长答案:如果网站足够简单,添加 ID 将是最简单且最好的。然而,如今,许多 JavaScript 框架(如ExtJS)创建动态 ID,因此在这种情况下,将类名添加到源代码会更好。
添加类名后,例如在您的情况下,使用:class
locator 是一个糟糕的选择,这可能比 更糟糕:id
,因为 ID 应该是唯一的。对于复杂的页面,:class
定位器几乎没用,它会找到不需要的元素。
在这里,您的错误消息意味着您可能有多个带有 class的元素save-btn
,第一个元素不可见,无法与之交互。
Selenium WebDriver 或 Watir WebDriver 都支持 XPath 和 CssSelector,所以你应该在必要时使用:xpath
or:css
来代替:id
等:class
。
例如,类似:
links(:item, :css=> '.save-btn:not([style*='display:none'])')[0]
Jarmo Pertman建议使用 ID/Class 有利于 XPath/Css 选择器,这并不完全正确。ID/Class 只是 XPath/Css 选择器的子集,如果足够简单,请使用 ID/Class,但是不必要的链接不是一个好习惯,在他给出的示例中,
browser.div(id: "container").span(class: "save-btn")
相当于 CSS 选择器div#container span.save-btn
,因此,CSS 选择器没有脆弱或维护问题,因为它们是相同的。
XPath/CSS 选择器是强大的工具,每个人都应该学习,但只有在真正需要时才使用它们。糟糕的 XPath/Css 选择器很脆弱,尝试找到好的选择器。(但请记住,XPath 很慢,应该被视为最后的选择)