2017-05-07 1 views
0

Ich habe dieses einfache HTML. Diese Attribute von Schaltflächen (wie "AAAAA") werden durch externe Ereignisse übertragen. Das Realtime-Update wird vom AJAX-Pooling ausgeführt.Überprüfen Sie das spezifische Attribut eines HTML-Tags existiert in Capybara mit Polling

<div class="parent"> 
<div class="group"><button title="AAAAA"/></div> 
<div class="group"><button title="BBBBB"/></div> 
<div class="group"><button title="CCCCC"/></div> 
</div> 
<div class="parent"> 
... 
</div> 

Nehmen wir an "AAAAA" wird nach XXX Ereignis zu "DDDDD" übertragen. Das Testskript wäre wie ...

scenario 'test' do 
    # Before change 
    page.within(first('.parent')) do 
     page.within(all('.group')[0]) do 
      expect(page.find('button')[:title]).to include('AAAAA') 
     end 
     page.within(all('.group')[1]) do 
      expect(page.find('button')[:title]).to include('BBBBB') 
     end 
     page.within(all('.group')[2]) do 
      expect(page.find('button')[:title]).to include('CCCCC') 
     end 
    end 

    XXX 

    # After change (AJAX polling) 
    page.within(first('.parent')) do 
     page.within(all('.group')[0]) do 
      expect(page.find('button')[:title]).to include('DDDDD') 
     end 
    end 
end 

Dies funktioniert jedoch nicht. Weil expect(page.find('button')[:title]).to include('DDDDD') nicht warten wird, bis die AJAX-Abfrage ausgeführt wird. Wenn ich sleep(20) nach XXX setze, hat dieser Test funktioniert, aber das ist nicht Capybara Weg, denke ich.

Ich würde gerne den cleveren Weg kennen, um diese Situation richtig zu behandeln.

Vielen Dank für Ihre Hilfe.

Antwort

1

Sie müssen das Capybara Matcher nutzen, die haben Warte/retrying Verhalten eingebaut, anstatt die RSpec vorgesehen include

expect(page).to have_css("button[title='DDDDDD']") 

, wenn Sie es für Substrings in Titel testen wollen, statt Gleichheit Sie können *= statt = usw.

Sie auch einzigartige CSS-Selektoren wie find('.group:nth-of-type(1)') anstatt all('.group')[0] wann immer möglich bevorzugen sollten (die Bedeutung dieser beiden Ausdrücke sind etwas anders, verwenden Sie so sommetimes es ma y nicht möglich) da Elemente von allen zurückgegeben/erste sind nicht nachladbar

+0

Vielen Dank für den Kommentar! Das hat meinen Fall gelöst! – dosuken123

Verwandte Themen