如何使用 Selenium Java 中的包含文本获取元素的直接标记

How to fetch the immediate tag for an element using contains text in Selenium Java

我必须获取文本可见的标签。但是如果我们对所有包含文本的标签使用 getTagName,那么即使是父元素也会显示相同的文本。

<ul> <li> The Text </li> </ul>

在上述情况下,如果我们使用包含文本来获取标签,那么 ul 和 li 都会被选中。如果我不想在查询中准确提及 li,是否有任何通用方法可以将直接标记作为 li 用于 The Text。

提前致谢。

好的,我想如果你能在DOM中找到一个元素uniquely,那么你也可以获取标签名称。

元素必须是唯一的,例如 1/1 在节点中匹配。

我建议使用 xpath,如下所示:-

//ul//li[contains(text(), 'The Text')]

//li[contains(text(), 'The Text')]

如果它们碰巧多次出现,则应用 xpath 索引:-

(//ul//li[contains(text(), 'The Text')])[1]

(//li[contains(text(), 'The Text')])[1]

在代码中你可以像这样使用它:

print(driver.find_element_by_xpath((//ul//li[contains(text(), 'The Text')])[1]).tag_name)

现在,在HTML节点中找到1/1匹配节点是一个技巧,你可以分享更多HTML内容,我可以寻找更有建设性的xpath。

在您的情况下,您需要找到一个没有子元素但包含该文本的元素。
这个的 XPath 定位器将是:

//*[not(child::*) and text()='your text']

所以命令将是

String tag = driver.findElement(By.xpath("//*[not(child::*) and text()='your text']")).getTagName();