2012-12-14 20 views
13

預期以下工作:如何結合查找和內使用水豚?

within('h2', text: 'foo') do 
     should have_content 'bar' 
end 

我想父元素內檢查,使用find(:xpath, '..')

一旦你找到一個元素,如何申請.find(:xpath, '..'),然後內檢查什麼那元素?

+0

爲什麼不使用單個XPath語句? –

+0

我發現''h2',文字:'foo''更具可讀性。 –

+1

我指的是您的最後一句話:您可以使用單個XPath,而不是應用一個XPath,然後使用另一個XPath。 –

回答

16

當您使用XPath定位器內within它應該.啓動(如果它不與.開始搜索未在.myclass但整個文檔中完成)。

例如爲:

within('.myclass') do 
    find(:xpath, './div') 
end 

或:

find('.myclass').find(:xpath, './div') 

代碼從@ BSeven的答案可以在一行中寫入:

expect(find("//h2[text()='foo']/..")).to have_text('bar') 

expect(page).to have_xpath("//h2[.='foo']/..", text: 'bar') 
+0

如果我使用'./p [@ class = test]''它找不到,如果我使用''// p [@ class = test]''它匹配的相同元素和父元素外的另一個元素..請幫助 – pahnin

+0

它與'。p [@ class = test]' – pahnin

+0

'。/'完美合作,謝謝! – thewoolleyman

4

下面是一個方法:

within('h2', text: 'foo') do 
    within(:xpath, '..') do 
    should have_content 'bar' 
    end  
end 
+1

同樣可以在一行中完成:'find(「// h2 [text()='foo']/..」)。should have_content'bar'' –

2

使用RSpec的2.11之後的新語法,是應該的;

within('h2', text: 'foo') do |h| 
    expect(h).to have_content 'bar' 
end