2012-07-11 67 views
1

我正在使用xpath提取器從響應數據中檢索表單屬性值。然而,該響應數據包含,其他數據字符串「C & I」之間,並且這是導致以下的SAXExceptionJMeter XPath抽取器SAXException

jmeter.extractor.XPathExtractor:的SAXException在處理 (substring-after(//form[@id='headerForm']/@action,'/dashboard.xhtml?')) 到實體「I」的參考必須以';'結尾分隔符。

我沒有對這些數據的任何控制,因爲它正在從數據庫中獲得的。我試着檢查「使用Tidy(容錯解析器)」選項。這導致下面的警告/錯誤

ERROR - jmeter.util.XPathUtil:TidyException:線35列31 - 警告:修整空<DIV>

第35行的響應是作爲如下:

 
`<div style="clear: both;"></div>` 

提取該屬性值對於我進一步處理是必不可少的。

回答

1

源文檔中的流浪&在XML中不合法。從XML規範(重點煤礦)

與符號字符(&)和左尖括號(<)作爲標記定界符只有當它們的字面形式可能會出現 ,或 註釋中,處理指令或CDATA部分。它們也是 合法的內部實體的實體值 聲明;請參閱「4.3.2格式良好的已分解實體」。 如果它們是其他地方需要的 ,則必須使用數字字符 或字符串「& amp;」將其轉義。和「& lt;」分別爲

解析器正在將&解釋爲實體引用的開始,它預計以分號結尾。

來源:

注意,你已經包括錯誤的是(幾乎可以肯定)無關。 Tidy僅僅指出div不包含任何內容(即它是空的)。

5

至於一切都有解決方案,它可能是快速和骯髒的,但總是有一個單一問題的解決方案。

我推薦使用jsoup來爲你解析HTML而不是xpath提取器。我假設你正試圖提取特定表單的action屬性。

第1步 - >添加jsoup-1.6.3.jar或任何其他版本到你JMETER_HOME\lib

第2步 - >添加BeanShell PostProcessorSampler HTTP或任何其他

第3步 - >腳本中的大盒子貼上此代碼:

import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 
import org.jsoup.select.Elements; 

String html = prev.getResponseDataAsString(); // get response from your sampler 
Document doc = Jsoup.parse(html); 
String formAction = doc.select("#headerForm").attr("action"); 
vars.put("action", formAction); 

HTML選擇器是基於jQuery的。所以它可以做很漂亮的事情。無論如何,你應該有${action}變量在你的測試中進一步使用。

更新

所以你不要糾結與我創建JMeter的後處理器稱爲Html Extractor這裏的代碼是GitHub的網址:

https://github.com/c0mrade/Html-Extractor

+0

螞蟻,謝謝大家了響應。但是,當我做prev.getRespon ....我得到的HTML不是從當前請求(流是index.xhtml-> dashboard.xhtml)。我需要從dashboard.xhtml中提取數據。我在對應於dashboard.xhtml的第二個HttpREquest下添加了JSoup代碼。但是,我得到的html對應於index.xhtml。我嘗試了curr.getREsponse ...但這不起作用。我在JSoup網站找不到任何幫助。你能幫我解決這個問題嗎? Thx,Karthik – Karthik 2012-07-12 16:12:54

+0

您是否正在從名爲dashboard.xhtml的文件中讀取數據?你能否用更多的信息來更新你的問題,比如正確的結構,測試流程,截圖等等。當所有內容都放在一個句子中時很難理解 – ant 2012-07-13 08:57:01