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

时间:2015-02-02 00:12:20

标签: java javascript jquery css selenium

这是我的 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>子元素中获取其文本。

我怎样才能从我原来的选择器中一般地获取子元素的选择器?

(我一般都会问,因为这个案子对我重复几次)

3 个答案:

答案 0 :(得分:0)

如果我理解你面临的问题,那么你可以做两件事。

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

//a[@class='info-button']/..//div[.='More Info']

其次,找到父元素,然后找到子元素

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

答案 1 :(得分:0)

最终,这取决于您的应用程序的工作方式。以下假设您要查找的元素始终是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使用它时。)

答案 2 :(得分:-1)

您可以使用以下xpath找到&#34; info-button&#34;:

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

要检索文本&#34;更多信息&#34;,您可以使用以下xpath:

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

根据OP的评论编辑

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

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

它找到第一个子元素&#39; div&#39;在有关的&#39; a&#39;元件。