簡體   English   中英

如何從沒有指定HTML標記的元素中獲取文本

[英]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.

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