没有一般规则。它始终取决于被测站点。
查找元素的最佳方式是通过Id。这并不总是可行的,尤其是当被测站点不受您的控制并且您无法自己将 id 添加到 html 时。按名称定位也不错,但根据您测试的网站,它可能不会在每个页面/框架上都是唯一的。 (注意,“名称”是指 HTML 中的name 属性,而不是标签名称!)
对于<a> 和<button> 元素,通过LinkText 或PartialLinkText 搜索可能是一个不错的选择,但前提是您的被测站点无法切换到另一个站点语言,因为这通常也会更改所有链接文本。
CSS 选择器 定位几乎与 XPath 一样强大,但通常更短更紧凑,尤其是在处理类名时。
示例(CSS 与 XPath 表达完全相同的内容):
driver.findElement(By.cssSelector(".ecp-cartItemText"));
driver.findElement(By.xpath("//*[@class='ecp-cartItemText' or contains(@class,' ecp-cartItemText ') or substring(@class,1,17)='ecp-cartItemText ' or substring(@class,string-length(@class)-16)=' ecp-cartItemText']"));
只有当您搜索文本作为 HTML 元素的内容时,CSS 才能做到这一点(Selenium 中没有 XQuery 可用!)并且您必须使用 XPath。
例子:
//button[@type='button']//span[text()='Close']
对于沿 XPath 轴相对于已定位的 Web 元素进行搜索,有时使用 XPath 可能很有用。
例子:
element.findElement(By.xpath("following-sibling::p[1]/strong"));
可能还有其他无法避免 XPath 的情况,但我没有遇到任何情况。因此,仅在必要时才使用 XPath!通常有更好的方法。