2011-11-28 24 views
0

我正在rspec rails中編寫測試。如何使用nokogiri在rails中獲取xml屬性值的數組

我的觀點有類似

<div id = "dataDiv" data-items= "[["A",100],["B",200],["C",50]]" data-check= "check"> 

我需要測試這種劃分的數據和使用的XPath這一點。

在我的規格,

it should have_xpath('//div[@id="dataDiv"][@data-check="check"]') 

工作正常,但

it should have_xpath('//div[@id="dataDiv"][@data-items="[["A",100],["B",200],["C",50]]"]') 

拋出錯誤說 「無不能轉換成字符串」。

我嘗試以下,以獲得屬性值

find.xpath('//div[@id="dataDiv"]/@data-items') 

但給出了同樣的錯誤如上。但是當我在瀏覽器中看到時,我確實有@data-items

我使用軌道3.1和1.4.4引入nokogiri

誰能幫助我如何得到這個作爲數組?

回答

0

看起來您的HTML中存在引用問題,因此您的HTML無效。你不能把生雙引號雙引號中的屬性裏面:

data-items="[["A",100],["B",200],["C",50]]" 

data-items不是有效的HTML屬性,所以我並不感到驚訝,引入nokogiri無法理解這一點。

嘗試修復你的看法產生有效的HTML:

data-items="[['A',100],['B',200],['C',50]]" 
data-items='[["A",100],["B",200],["C",50]]' 

,然後更新您的XPath相匹配的內引用您使用。

此外,您的XPath的這部分遭受類似的報價問題:

[@data-items="[["A",100],["B",200],["C",50]]"] 

,所以你需要修復它:

have_xpath(%q{//div[@id="dataDiv"][@data-items='[["A",100],["B",200],["C",50]]']}) 
have_xpath('//div[@id="dataDiv"][@data-items=\'[["A",100],["B",200],["C",50]]\']') 

或同樣的想法的一些其他變種。

+0

在html中允許自定義數據屬性,並且可以在客戶端使用javascript進行解析.data-check正常工作,正如我在我的問題中提到的。該數組來自我的ruby代碼。所以我無法修改引號。 –

+0

@Studdy:是的,HTML5允許自定義'data-'屬性,但是'data-items'屬性不是有效的HTML5,因爲您試圖將雙引號放入雙引號屬性值'data-a =「」「 '不是HTML5屬性,也不是'data-items';'data-check =「check」'可以正常工作,因爲'「check」'是一個有效的屬性值,但'「[[」A「,100], [「B」,200],[「C」,50]]「'不是,你的XPath表達式遇到類似的引用問題。修復你的XPath,修復你的HTML並修復你的Ruby。 –