2016-03-15 80 views
2

字符串我有這樣的代碼段:硒 - 使用XPath獲取一個文本節點,並把它作爲在Java中

<div id='wrapper'> 
    <span>*</span>  
    Question 1 
</div> 

我想的問題1存儲爲Java中的字符串,所以當我使用xpath //div/text()獲取文本「問題1」。但是,當我嘗試打印該值時,出現錯誤無效選擇器異常Xpath // div/text()是:[object Text]。它應該是一個元素。

String text = driver.findElement(By.xpath("//div")).getText(); 

//返回*問題1

String text = driver.findElement(By.xpath("//div/text()")).getText(); 

//返回錯誤

我怎麼只存儲的問題1.我可以代替*一旦我使用它的第一種方法,但我不想這樣做。

回答

1

我不知道我知道這樣做的最好方法,但這是一種方法。問題在於您正在尋找包裝器DIV的子元素組中的特定文本。我在您提供的示例中唯一可以看到的內容是您想要的文本位於包含標籤之外。我們可以利用這個優勢。基本上,這種方法是獲取包裝器中的整個文本,然後遍歷包裝器的所有子元素,從原始字符串中刪除每個元素中包含的文本。這應該留下你想要的文字。我使用您提供的示例測試了以下代碼。

String wrapperText = driver.findElement(By.id("wrapper")).getText().trim(); // get all the text under wrapper 
List<WebElement> children = driver.findElements(By.cssSelector("#wrapper > *")); // get all the child elements of wrapper 
for (WebElement child : children) 
{ 
    String subText = child.getText(); // get the text from the child element 
    wrapperText = wrapperText.replace(subText, "").trim(); // remove the child text from the wrapper text 
} 
System.out.println(wrapperText); 
+0

謝謝你的答覆,但我想找到我的具體問題的答案。你的方法獲取所有子對象,然後過濾出文本,但我想保存從xpath獲得的文本節點,然後將其用作字符串。我只是被這個獨特的問題所困擾。 – williamtell

+0

這是執行此操作的唯一方法...請參閱http://stackoverflow.com/questions/8505375/getting-text-from-a-node/8506502#8506502 – JeffC