[英]How to get partial text of an element using Selenium
我有這個HTML:
<div id="msg">
<b>text1</b>
<br>
text2 <b>text3</b> text4
<ul class="list">
<li>...</li>
<li>...</li>
<li>...</li>
</ul>
text5
</div>
我想使用xpath從div[@id = 'msg']
提取ul
之前的文本。
像driver.findElement(By.xpath("xpath")).getText()
-> text1 text2 text3 text4
有可能還是我應該使用其他邏輯?
根據本討論中的 @kjhughes,XPath是用於選擇的,而不是用於操作的。 您可以選擇XML文檔中存在的節點,但是不能轉換這些節點。
就您而言,如果您的XML文檔包含此節點:
<div id="msg">
<b>text1</b>
<br>
text2 <b>text3</b> text4
<ul class="list">
<li>...</li>
<li>...</li>
<li>...</li>
</ul>
text5
</div>
您可以通過//div[@id='msg']
來選擇<div
>節點,但是所選節點將顯示在源XML中,即在<ul>
具有class作為list
的孩子節點。
如果要操縱或轉換通過XPath選擇的節點(以排除其子元素),則必須使用托管語言(XSLT,JavaScript,Python,Java,C#等)來操縱選擇。
要單獨提取文本,可以使用以下解決方案:
WebElement myElement = driver.findElement(By.xpath("//div[@id='msg']"));
String text1 = myElement.findElement(By.xpath("./b")).getAttribute("innerHTML");
String text2 = ((JavascriptExecutor)driver).executeScript('return arguments[0].childNodes[3].textContent;', myElement).toString();
String text3 = ((JavascriptExecutor)driver).executeScript('return arguments[0].childNodes[4].textContent;', myElement).toString();
String text4 = ((JavascriptExecutor)driver).executeScript('return arguments[0].childNodes[5].textContent;', myElement).toString();
String text5 = ((JavascriptExecutor)driver).executeScript('return arguments[0].lastChild.textContent;', myElement).toString();
只想分享另一個想法。
您可以獲取OuterHTML,然后將其剝離到“ ul”標簽,然后從輸出中刪除html標簽。 現在,您可以根據需要更改字符串。
我幾乎可以使用javascript來獲取您要查找的文本。 將其粘貼到下面以供參考,您可以在Java中執行相同的操作。
oHTML = document.querySelector("div#msg").outerHTML
oHTML.substring(0,oHTML.search('<ul')).replace(/<.*>/,'').replace(/<\/?[^>]+(>|$)/g, "").replace(/\n/g, " ").trim()
您可以在瀏覽器控制台中運行此命令以查看輸出。 以下是javascript輸出。
text1 text2 text3 text4
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.