这是我的 Html :
<a class="info-button" data-voice-actions="["info", "more info"]" 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>
子元素中获取其文本。
我怎样才能从我原来的选择器中一般地获取子元素的选择器?
(我一般都会问,因为这个案子对我重复几次)
答案 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']
强>
使用innerHTML / text获取div元素的css选择器可以是:
#main > div > div.footer > div > a > div:nth-child(1)
它找到第一个子元素&#39; div&#39;在有关的&#39; a&#39;元件。