簡體   English   中英

給定一個bySelector,我如何獲得該元素的孩子的選擇器?

[英]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>子元素中一樣。

如何從我擁有的原始選擇器中一般性地獲取子元素的選擇器?

(我一般都會問,因為這種情況對我重復了幾次)

如果我清楚地理解了您面臨的問題,那么您可以做兩件事。

首先,編寫一個瘋狂的選擇器來找到它。

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

其次,找到父元素,然后從那里找到子元素

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

最終,這取決於應用程序的工作方式。 下面假設你正在尋找的元素總是在你眼前的孩子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使用它時則不能。)

您可以使用下面的xpath找到“信息按鈕”:

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

要檢索文本“更多信息”,可以使用以下xpath:

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

根據OP的評論進行編輯

使用innerHTML / text到達div元素的css-selector可以是這樣的:

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

它將第一個子元素“ div”定位在相關的“ a”元素下。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM