2014-04-14 209 views
0

我需要使用XPATH從網頁選擇particulr文本。 我的文字看起來像下面XPATH - 如何從網頁獲取文本?

The "Add Account Offer" request has been submitted successfully with the order number css_334560. 

在上面的線,我需要得到的只有「css_334560」使用XPATH。有人可以幫我嗎?

HTML - :

String a = driver.findElement(By.xpath("//div[@class='txt']/span")).getText(); 
a = a.substring(a.lastIndexOf(' ') + 1).replace(".", ""); 

第一排跨度獲取文本

<div id="secondColumn" class="floatBreaker"> 
<div id="mainContents"> 
<h1>Add Account Offers      </h1> 
<div class="infoBox"> 
<div class="topLine"> 
<div class="txtLineRight"> 
<div class="txtLineLeft"> 
<div class="txt"> 
<span>The "Add Account Offer" request has been submitted successfully with the order number css_334560.</span> 
</div> 
</div> 
+1

你不會只使用硒的'css_334560'而是你會得到整個文本的span標籤。 – TDHM

回答

0

你可以,如果你使用Java使用下面的代碼。第二行需要css_334560.並刪除點。

Html代碼不是滿的,所以我不能保證xpath是正確的。

+0

謝謝,它工作完美! – Koushic

+0

不客氣。 – Ievgen

0

有幾種可能性取決於具體情況。

1-獲取包含特定文本的文本節點: 我使用了「添加帳戶優惠」,但您可以使用「css_」或任何其他對該文本節點唯一的文本。

如果有幾個匹配的文本節點:(讓他們並通過他們循環,檢查他們一個接一個)

var snapElements = document.evaluate(
    './/text()[contains(.,"Add Account Offer")]', 
    document.body, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); 

如果只有一個匹配的文本節點

var txt = document.evaluate(
    './/text()[contains(.,"Add Account Offer")]', 
    document.body, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null); 

2 - 另一方面,如果<div class="txt">是唯一的(頁面上只有一個),如果它更快得到它:

var txt = document.querySelector('.txt'); 
if (txt) { txt = txt.textContent; } 

也有可能......

var txt = document.getElementsByClassName('txt'); 
if (txt[0]) { txt = txt[0].textContent; } 

讓整個文本後,現在你可以使用(例如)正則表達式來獲得所需的部分......例如:

var css = txt.match(/css_\d+/); 

好運 :)

+0

這個答案唯一的問題是上下文 - 硒。 Selenium期望從給定的XPath選擇器返回物理DOM元素,前兩個XPath不會返回DOM元素。 – Arran

+0

謝謝Arran ...我不熟悉Selenium,所以我的回答是基於標準的HTML/DOM :) – erosman