给定一个 bySelector 我如何获取此元素子元素的选择器

given a bySelector how can i get the selector of this element's child?

本文关键字:元素 获取 选择器 何获取 一个 bySelector      更新时间:2023-09-26

这是我的 Html

<a class="info-button" data-voice-actions="[&quot;info&quot;, &quot;more info&quot;]" href="waze://?button=external_poi_info" id="info-button" onclick="window.location.href = this.href; return false;">
<span class="icon"></span>
<div class="btn-text">More Info</div>
</a>

我有一个by.org.openqa.selenium.By选择器:

By.cssSelector("#main > div > div.footer > div > a")

我有时想与自身相关,一旦我想获取其文本,就像在其<div class="btn-text">More Info</div>子元素中一样。

如何从我拥有的原始选择器中获取子元素的选择器?

(我泛泛而谈,因为这种情况对我来说重复了几次)

最终,这取决于应用程序的工作方式。下面假定您要查找的元素始终位于a元素的直接子元素中,并且它始终具有 .btn_text 类。您可以像操作任何字符串一样操作选择器:

String parent_sel = "#main > div > div.footer > div > a";
String child_sel = parent_sel + " > div.btn_text";

两个字符串都可以传递给By.cssSelector 。如果我的假设不正确,请根据需要进行调整。例如,如果div可以是a的后代,但不一定是它的子代,则可以连接" div.btn_text"以获取child_sel

我想获取其文本

如果您正在寻找可以为您提供文本的选择器,我会注意到没有选择器可以传递给findElement以获取文本。此函数始终返回元素(或以复数形式使用时的元素列表)。您必须在获得的元素上使用getText()。(如果你想知道:XPath通常可以选择文本,但当你通过Selenium使用它时不能。

如果我清楚地了解您面临的问题,那么您可以做两件事。

首先,写一个疯狂的选择器来找到它。

//a[@class='info-button']/..//div[.='More Info']
其次,找到

父元素,然后从那里找到子元素

driver.findElement(By.cssSelector("#main > div > div.footer > div > a")).findElement(By.path("//div[.='More Info']")).something

您可以使用以下 xpath 找到"信息按钮":

//div[@class='footer']//a[@class='info-button']

要检索文本"更多信息",您可以使用以下 xpath:

//div[@class='footer']//div[.='More Info']

根据OP的评论进行编辑

使用 innerHTML/text 获取div 元素的 css 选择器可以是这样的:

#main > div > div.footer > div > a > div:nth-child(1)

它将第一个子元素"div"定位在相关的"a"元素下。