2012-01-12 63 views
0

之前,我想寫一個黃瓜測試,以確保沒有從指南針CSS錯誤。選擇體:使用RSpec/XPath的/ CSS

錯誤信息插入到頁面下面的CSS如:

body:before { 
    white-space: pre; 
    font-family: monospace; 
    content: "Syntax error: Undefined mixin 'horizontal-list'"; 
} 

所以我想寫的是保證身體步:之前的內容是空的,我一直在試圖圍繞着變化以下:

page.should_not have_css("body:before") 

但是這給了錯誤:

xmlXPathCompOpEval: function before not found 

有人知道如何掌握:之前?

+0

我認爲這與它是一個僞元素,而不是真正的HTML元素做。 – BoltClock 2012-01-12 13:58:20

+0

是的,我得出了同樣的結論 - 儘管我明白了爲什麼have_xpath會因爲我期望的has_css工作而感到不安! – Ash 2012-01-12 14:02:51

回答

0

一番搜索,我不認爲有一種方式來獲得在內容的保持後:前一種優雅的方式。不過,我有一些作品不夠好,我的目的,所以我想與大家分享吧:

Then /^I should not see any compass errors$/ do 
    page.evaluate_script("document.styleSheets[1].cssRules[0].selectorText == \"body:before\";").should be_false; 
end 

上述試驗如果第一cssRule指定規則有身體selectorText:前 - 這是真的,如果指南針已在頁面中插入錯誤。

一些注意事項,如果你想使用上述:

  1. 根據您的驅動程序,您可能需要把@javascript標籤上您的方案(否則,你可能會得到一個NotSupportedByDriverError除外)
  2. 數組指數樣式表可能是您(根據您的樣式表導入的順序)
  3. 如果您正在使用Internet Explorer作爲測試瀏覽器,你將需要更改JS不同 - 在這裏看到:https://stackoverflow.com/a/311437/91205
  4. 我已經碰到一個Safari和Firefox之間的區別 - Safari的selectorText爲「body :: before」,而Firefox有「body:before」(注意:vs::)其他瀏覽器可能有類似的問題。

如果有人有更好的方式來做到這一點知道,我會很感興趣 - 但現在,上面會停止任何北斗錯誤偷偷通過!