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.
Vielen Dank für den Kommentar! Das hat meinen Fall gelöst! – dosuken123