從技術上講,這不是真正的你應該用黃瓜進行測試的方式。黃瓜是用於測試行爲,而不是檢查DOM - 儘管它當然可以以這種方式使用。
如果你真的想要寫這樣的事情,你可以做簡單得多:
Then /^the element "([^"]*)" with parent "([^"]*)" should have class "([^"]*)"$/ do |element_id,parent,css_class|
page.should have_css("#{parent}.#{css_class} #{element_id}")
end
這很爛在許多層面上,雖然。您不僅直接從步驟中檢查DOM,這會產生非常不可讀的功能,而且會混合傳遞元素名稱,類名稱和元素ID - 每種樣式都有稍微不同的樣式......在此步驟中,元素可以可以是任何類型的選擇器,而父類和css_class則更加固定 - 它們必須始終「適合」選擇器字符串或不會找到任何內容。
我還沒有真正解釋得那麼好,但簡而言之,您應該考慮您實際嘗試測試的內容,並考慮是否可以將其重命名爲更有用且可重用的內容。你能否重新使用這一步驟而不考慮它的實現來找出哪裏發生了什麼?
此外,隨着更具表現力的命名,測試立即變得更有用。例如,步驟Then I should see the current list is active
比Then the element "li.active" with parent "ul" should have class "active-list"
更具可讀性和表現力。具體在步驟定義實施中,而不是您的功能!
閱讀此博客文章 - http://elabs.se/blog/15-you-re-cuking-it-wrong - 它應該給你一個關於如何寫出更好的步驟的好主意。