2016-11-14 3 views
1

In meiner App habe ich eine Seite, die ein Modal öffnet, das einige Inhalte darin aktualisiert und sich nach unbestimmter Zeit selbst ablehnt (und unsichtbar wird). In meiner Spezifikation versuche ich zu warten, bis der Modal entlässt. Meine Strategie ist Capybara Warten auf den Inhalt des Modal zu haben, unsichtbar zu werden, indem SieCapybara kann kein verstecktes Element mit Text finden

expect(page).to have_css('.hidden-element', visible: :hidden, text: 'Hidden Content') 

aber es sieht aus wie Capybara nicht in der Lage sein, den Text eines verborgenen Elements zu bekommen, und ich erhalte die Fehler:

expected to find css ".hidden-element" with text "Hidden Content" but there were no matches. Also found "", which matched the selector but not all filters. 

Es würde passieren, wenn ich :all oder false tun, aber das ist nicht das, was ich will:

expect(page).to have_css('.hidden-element', visible: :all, text: 'Hidden Content') 

Da ich nicht meine ap ändern könnte p, ich frage mich, warum das nicht funktioniert hat oder was der beste Weg ist, das in diesem Fall zu erreichen. Vielen Dank!

Ich verwende RSpec, Capybara, Capybara-webkit.

Antwort

1

Wenn das Element auf der Seite tatsächlich nicht sichtbar wird, anstatt vollständig von der Seite entfernt zu werden, besteht der Hauptunterschied darin, dass der Text bei sichtbarem Text mit dem angewandten CSS verglichen wird (Textumwandlung, usw.)). Wenn also die Elemente Text im HTML ist eigentlich ‚versteckt‘, sondern hat text-transform: capitalize auf mich angewandt, wenn sichtbar Sie müssen gegen das HTML-Formular testen, wenn nicht sichtbare Elemente Überprüfung

expect(page).to have_css('.hidden-element', visible: :hidden, text: 'hidden content') 

Wenn auf der anderen Seite , der Text im HTML ist, wie Sie es und das Element zeigen, wird tatsächlich von der Seite entfernt (und nicht nur versteckt) Sie

expect(page).not_to have_css('.hidden-element', visible: :hidden, text: 'Hidden Content') 

tun können, um zu warten, bis es entfernt werden.

UPDATE: Es gibt eine Einschränkung in Capybara, wenn die Option visible: :hidden verwendet wird, dass Text nicht gefunden werden kann. Sie können in der Lage sein, es zu umgehen, indem Sie so etwas tun wie

element = page.find('.hidden-element', visible: :all, text: 'hidden content') 
expect(element).to match_css('.hidden-element', visible: :hidden) 
+0

Vielen Dank für den Vorschlag! Ich denke in meinem Fall ist es nicht mit dem Fall verbunden. Es funktioniert auch nicht, wenn der Text beispielsweise "1234" lautet. Ich fühle, dass sich das 'visible:: hidden' und' text: '1234' 'gegenseitig ausschließen, und sie funktionieren perfekt alleine. – 322896

+0

@ 322896 Welche Version von Capybara benutzt du? –

+0

@ 322896 Nach dem Testen Dies sieht aus, als wäre dies eine Einschränkung von Capybara im Moment, wenn ich die Option "visible:: hidden" verwende, habe ich meine Antwort mit einer möglichen Problemumgehung aktualisiert –

Verwandte Themen