2010-11-19 7 views
1

Ich weiß, dass /Interface \d/ dreimal auf der Seite auftritt. Aber ich weiß nicht, wie ich das mit Capybara in Gurke testen soll. Hier war mein erster Versuch:Wie nach mehreren Vorkommen eines Wortes mit Capybara (oder Webrat, denke ich) und Gurke?

Then /^(?:|I)should see \/([^\/]*)\/ (\d+)(?:x|X| times?)?$/ do |regexp, count| 
    regexp = Regexp.new(regexp) 
    count = count.to_i 
    if page.respond_to? :should 
    page.should have_xpath('//*', { :text => regexp, :count => count }) 
    else 
    assert page.has_xpath?('//*', { :text => regexp, :count => count }) 
    end 
end 

Doch diese gibt false für meine Then I should see /Interface \d+/ 3 times.

Ich fand heraus, dass dies ist, weil has_xpathall verwendet. Putting in meinem Test:

puts all(:xpath, '//*', { :text => regexp}).map {|e| pp e} 

Ergebnisse in

#<Capybara::Element tag="html" path="/html"> 
#<Capybara::Element tag="body" path="/html/body"> 
#<Capybara::Element tag="div" path="/html/body/div"> 
#<Capybara::Element tag="div" path="/html/body/div/div[2]"> 
#<Capybara::Element tag="table" path="/html/body/div/div[2]/table"> 
#<Capybara::Element tag="tbody" path="/html/body/div/div[2]/table/tbody"> 
#<Capybara::Element tag="tr" path="/html/body/div/div[2]/table/tbody/tr[1]"> 
#<Capybara::Element tag="td" path="/html/body/div/div[2]/table/tbody/tr[1]/td[3]"> 
#<Capybara::Element tag="tr" path="/html/body/div/div[2]/table/tbody/tr[2]"> 
#<Capybara::Element tag="td" path="/html/body/div/div[2]/table/tbody/tr[2]/td[3]"> 
#<Capybara::Element tag="tr" path="/html/body/div/div[2]/table/tbody/tr[3]"> 
#<Capybara::Element tag="td" path="/html/body/div/div[2]/table/tbody/tr[3]/td[3]"> 

So eine Zählung von jedem Schritt auf dem Weg, ich bin immer auf die Elemente, die meinen Text enthalten. : - \

Ich dachte, vielleicht würde has_content mich retten, aber es akzeptiert keine Zählung.

Hilfe!

Antwort

2

So etwas sollte funktionieren:

Then /^(?:|I)should see \/([^\/]*)\/ (\d+)(?:x|X| times?)?$/ do |regexp, count| 
    regexp = Regexp.new(regexp) 
    count = count.to_i 
    page.find(:xpath, '//body').text.split(regexp).length.should == count+1 
end 
+0

Zwei Gründe Ich mag es nicht „innerhalb blah“ verwenden: 1) Es ist spröde. Gerade jetzt sind diese in s, aber das wird sich bald ändern. Ich möchte den Test nicht ändern müssen. 2) Es ist nicht wirklich aus einer Benutzer-Perspektive, die ich gerne in Gurken-Features so viel wie möglich zu bleiben versuchen. – chadoh

+0

Fair genug ... Ich habe den CSS-Selektor-Vorschlag entfernt. – Zubin

Verwandte Themen