Ich versuche mit einem Winkelmesser zu testen, ob ein Element sichtbar ist. So sieht das Element aus:
<i class="icon-spinner icon-spin ng-hide" ng-show="saving"></i>
In der Chrome-Konsole kann ich mit diesem jQuery-Selektor testen, ob das Element sichtbar ist:
$('[ng-show=saving].icon-spin')
[
<i class="icon-spinner icon-spin ng-hide" ng-show="saving"></i>
]
> $('[ng-show=saving].icon-spin:visible')
[]
Wenn ich jedoch versuche, dasselbe in Winkelmesser zu tun, wird zur Laufzeit der folgende Fehler angezeigt:
InvalidElementStateError:
invalid element state: Failed to execute 'querySelectorAll' on 'Document':
'[ng-show=saving].icon-spin:visible' is not a valid selector.
Warum ist das nicht gültig? Wie kann ich mit einem Winkelmesser die Sichtbarkeit überprüfen?
angularjs
visible
protractor
limp_chimp
quelle
quelle
Antworten:
Dies sollte es tun:
Denken Sie daran, dass Winkelmesser
$
nicht jQuery sind und:visible
noch nicht Teil der verfügbaren CSS-Selektoren + Pseudo-Selektoren sindWeitere Informationen unter https://stackoverflow.com/a/13388700/511069
quelle
isDisplayed()
das Versprechen der Vollständigkeit verwendet, aber nur erweitert, um es zu lösen. Dieser Schritt ist jedoch optional und nur dazu gedacht, Bedingungen in Ihre Tests aufzunehmen, was eine schlechte Praxis ist. @asenovm Kannst du deinen Kommentar "Das ist einfach falsch" weiter ausarbeiten?.toBeTruthy();
verwenden Sie.toBe(true)
stattdessen nicht use ..toBeTruthy();
wird mit Dingen wie [], 'false', 42 übereinstimmen. Grundsätzlich ist alles, was 0, "", null, undefined, NaN oder false erwartet, wahr.Die korrekte Methode zum Überprüfen der Sichtbarkeit eines Elements mit Winkelmesser besteht darin, die
isDisplayed
Methode aufzurufen . Sie sollten jedoch vorsichtig sein, daisDisplayed
kein Boolescher Wert zurückgegeben wird, sondernpromise
die ausgewertete Sichtbarkeit bereitgestellt wird. Ich habe viele Codebeispiele gesehen, die diese Methode falsch verwenden und daher ihre tatsächliche Sichtbarkeit nicht bewerten.Beispiel für die Sichtbarkeit eines Elements:
Sie benötigen dies jedoch nicht, wenn Sie nur die Sichtbarkeit des Elements überprüfen (anstatt es zu erhalten), da die Winkelmesser-Patches, die Jasmine erwartet (), immer darauf warten, dass Versprechen gelöst werden. Siehe github.com/angular/jasminewd
Sie können also einfach Folgendes tun:
Da Sie
AngularJS
die Sichtbarkeit dieses Elements steuern, können Sie das Klassenattribut auch folgendermaßen überprüfenng-hide
:quelle
Ich hatte ein ähnliches Problem, da ich nur Rückgabeelemente wollte, die in einem Seitenobjekt sichtbar waren. Ich habe festgestellt, dass ich das CSS verwenden kann
:not
. Im Fall dieses Problems sollten Sie dies tun ...Im Kontext eines Seitenobjekts können Sie NUR die Elemente erhalten, die auch auf diese Weise sichtbar sind. Z.B. Bei einer Seite mit mehreren Elementen, auf der nur einige sichtbar sind, können Sie Folgendes verwenden:
Dies gibt Ihnen alle sichtbaren
i.icon
s zurückquelle
Wenn das DOM mehrere Elemente mit demselben Klassennamen enthält. Es ist jedoch nur eines der Elemente sichtbar.
In diesem Beispiel nimmt der Filter eine Sammlung von Elementen und gibt mit isDisplayed () ein einzelnes sichtbares Element zurück .
quelle
filteredElement.length === 0
?Diese Antwort ist robust genug, um für Elemente zu funktionieren, die sich nicht auf der Seite befinden. Sie schlägt daher ordnungsgemäß fehl (ohne eine Ausnahme auszulösen), wenn der Selektor das Element nicht gefunden hat.
quelle
Auf Sichtbarkeit warten
Xpath-Trick, um nur sichtbare Elemente zu finden
quelle
quelle
Hier sind die wenigen Codefragmente, die für Frameworks verwendet werden können, die Typescript, Winkelmesser und Jasmin verwenden
// Einen Text bestätigen
// Ein Element bestätigen
// Ein Formular bestätigen
quelle