# 9ac。 WebDriver – 无法轻松定位元素？ 继续阅读...

> 原文： [https://javabeginnerstutorial.com/selenium/9ac-webdriver-unable-to-locate-an-element-easily-read-on/](https://javabeginnerstutorial.com/selenium/9ac-webdriver-unable-to-locate-an-element-easily-read-on/)

好吧，如果您的内存比我的好，那么您将记住，Selenium WebDriver 中有 8 种定位器类型，即 ID，名称，标签名称，类名称，链接文本，部分链接文本，CSS 选择器和 XPath。 令人遗憾的是，即使我们有很多定位器类型，定位元素仍然充满挑战，尤其是在被测试的应用很复杂的情况下。

例如，

1.  为每个会话生成唯一的 ID（带有随机字母数字字符）
2.  各种元素的重复类名
3.  多个`div`标签使 XPath 的长度比平时更长

所有这些使自动化测试人员的工作更具挑战性！ 绝对 XPath 可能会有所帮助，但是如果 DOM 中包含新元素或现有元素稍微移动了一点，那么脚本可能会失败，因为找不到该元素。 相对的 XPath 可能可以解决，但是即使那样，由于脚本变得复杂，整个过程也变得很困难。

处理此类情况的最简单便捷的方法是在HTML元素上引入`data-*`属性（自定义数据属性）。 这里唯一的问题是，您将需要成为开发人员的好书！ 他/她是根据您的要求将这些属性添加到代码中的人。😉

现在让我对这些自定义数据属性进行学习，

`custom`属性允许我们在 HTML 元素上存储额外的数据或信息。 要遵循的规则是，

1.  属性名称应以`data-`开头
2.  在`data-`的此前缀之后，属性名称应至少一个字符长，并且只能使用小写字母
3.  为此属性提供的值可以是任何字符串。

**语法**：`<element data-*="value">`

那很特别，你不觉得吗？

这里有一个例子，可以更好地可视化该概念，

`<li data-test="poultry">Chickens</li>`

有了这些数据属性，定位元素就轻松了！

`WebElement poultry = driver.findElement(By.` *`xpath`* `("//li[@data-test='poultry']"));`

而且，就是这么简单！ 继续尝试一下，随时在评论部分中发表您的问题。

在另一篇文章中再见。

