# 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 可能可以解决，但是即使那样，由于脚本变得复杂，整个过程也变得很困难。

The easy and best way to handle such situations is to introduce **`data-* attributes`** (custom data attributes) on HTML elements. The only catch here is, you will need to be in the good books of the developer! 😉 He/she is the one to add these attributes to the code as per your requirement.

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

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']"));`

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

在另一篇文章中再见。

