[英]How to get the text from element without specified HTML tag
任何人都可以幫助我解決以下遇到的問題。 到目前為止,我找不到任何解決方案。
我想通過XPath接收以下html文本:“您登錄為”,但是由於沒有HTML標簽,因此我無法以任何方式獲取文本,因此我嘗試了: xpath=//div[@class='div3']/img
,但沒有成功。
這是html:
<body>
<div id="container">
<div id="header">
<div class="div1">
<div class="div2">
<div class="div3" style="background-color: transparent;">
<img style="position: relative; top: 3px;" alt="" src="view/image/lock.png">
You are logged in as
<span>admin</span>
</div>
</div>
<div id="menu"></div>
...
xpath="//div[@class='div3']"
elem = elem.find_element_by_xpath(xpath)
print elem.text
這就是用python編寫的方式。 不過,此文本中也會包含“ admin”一詞,您也可以將其刪除。
您的html文檔中的img元素不是成對標記,因此不包含任何文本。 另外,By.xpath方法不支持“ xpath =“前綴。
獲取文本的最簡單方法是查詢父div元素的文本。
表達方式
driver.findElement(By.xpath("//div[@class='div3']")).getText()
返回“您以管理員身份登錄”。 現在只需一個簡單的String表達式即可獲得所需的結果。 在聲明之前先修剪文本總是一個好主意。
如果確實只需要獲取img和span元素之間的文本(不包括span元素的內容),則可能必須使用JavaScript。 看一下使用selenium webdriver(xpath)閱讀文本 。
首先,遠離xpath。它比較慢,而且不如CSS漂亮。
因此,您的問題是,您需要獲取文本You are logged in as
。 到目前為止,您嘗試的是獲取<img />
標記的文本,但是<img /
>標記沒有innerHTML。 您需要獲取的是直接父級的文本。 您可以使用以下CSS選擇器進行此操作:
Java:
driver.findElement(By.cssSelector("div#container div.div3")).getText();
那么,這將使您返回的是You are now logged in as admin
的文本。
在您的assert
子句中,編寫:
assertTrue(driver.findElement(By.cssSelector("div#container div.div3")).getText().contains("You are logged in as"));
我向您挑戰的另一件事是查看這些<div>
類。 是div1 | div2 | div3
div1 | div2 | div3
div1 | div2 | div3
他們實際使用的類是什么? 如果沒有,您可以發布實際的html嗎?
因此,您要定位來自此<div class="div3"...>
元素的內容。 您發現可以通過以下XPath表達式//div[@class="div3"]
。
現在,在此元素內,您有幾個子代(直接子代的XPath為//div[@class="div3"]/node()
):
'\\n '
, img
元素( <img style="position...>
), '\\n You are logged in as\\n '
, span
元素( <span>admin</span>
), '\\n '
如果只想選擇子文本節點,則可以使用//div[@class="div3"]/text()
。
但我知道您想提取第一個非全空格文本節點,即“您以...身份登錄”節點。 因此,您可以使用XPath的normalize-space()
函數來測試刪除的文本內容空白是否為空:
//div[@class="div3"]/text()[normalize-space() != ""]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.