给定一个 bySelector 我怎样才能得到这个元素的 child 的选择器?

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

这是我的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> child 元素中一样。

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

(我一般问,因为这种情况对我来说重复了几次)

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

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

//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 找到 "info-button":

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

要检索文本 "More Info",您可以使用以下 xpath:

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

根据 OP 的评论进行编辑

使用 innerHTML/text 到达 div 元素的 css-选择器可以是这样的:

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

它将第一个子元素 'div' 定位到相关 'a' 元素下。

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

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.

I want to fetch its text

如果您正在寻找 selector 会给您 text,我会注意到没有 selector 您可以传递给 findElement 以获得 text。此函数总是 returns 个元素(或以复数形式使用时的元素列表)。您必须在获得的元素上使用 getText() 。 (如果您想知道:XPath 通常 可以 select 文本,但当您通过 Selenium 使用它时则不行。)