Próbuję sprawdzić, czy element jest widoczny za pomocą kątomierza. Oto jak wygląda element:
<i class="icon-spinner icon-spin ng-hide" ng-show="saving"></i>
Będąc w konsoli chrome mogę użyć tego selektora jQuery, aby sprawdzić, czy element jest widoczny:
$('[ng-show=saving].icon-spin')
[
<i class="icon-spinner icon-spin ng-hide" ng-show="saving"></i>
]
> $('[ng-show=saving].icon-spin:visible')
[]
Jednak gdy próbuję zrobić to samo w kątomierzu, pojawia się ten błąd w czasie wykonywania:
InvalidElementStateError:
invalid element state: Failed to execute 'querySelectorAll' on 'Document':
'[ng-show=saving].icon-spin:visible' is not a valid selector.
Dlaczego to nie jest ważne? Jak mogę sprawdzić widoczność za pomocą kątomierza?
angularjs
visible
protractor
limp_chimp
źródło
źródło
Odpowiedzi:
To powinno wystarczyć:
Pamiętaj, że kątomierz
$
nie jest jQuery i:visible
nie jest jeszcze częścią dostępnych selektorów CSS + pseudoselektorówWięcej informacji na https://stackoverflow.com/a/13388700/511069
źródło
isDisplayed()
ale tylko rozszerza obietnicę kompletności, chociaż ten krok jest opcjonalny i przeznaczony tylko do włączenia warunków warunkowych do twoich testów, co jest złą praktyką. @asenovm Czy możesz bardziej szczegółowo rozwinąć swój komentarz „To jest po prostu zły”?.toBeTruthy();
używać.toBe(true)
zamiast tego..toBeTruthy();
dopasuje takie elementy jak [], 'false', 42. W zasadzie wszystko, czego oczekuje się od 0, "", null, undefined, NaN lub false jest prawdziwe.Prawidłowym sposobem sprawdzenia widoczności elementu za pomocą Protractor jest wywołanie
isDisplayed
metody. Należy jednak zachować ostrożność, ponieważisDisplayed
nie zwraca wartości logicznej, a raczejpromise
zapewnia oszacowaną widoczność. Widziałem wiele przykładów kodu, które nieprawidłowo używają tej metody i dlatego nie oceniają jej rzeczywistej widoczności.Przykład uzyskania widoczności elementu:
Jednak nie jest to potrzebne, jeśli po prostu sprawdzasz widoczność elementu (w przeciwieństwie do uzyskiwania go), ponieważ Jasmine patrzy na kątomierz, więc zawsze czeka na rozwiązanie obietnic. Zobacz github.com/angular/jasminewd
Możesz więc po prostu:
Ponieważ używasz
AngularJS
do kontrolowania widoczności tego elementu, możesz również sprawdzić jego atrybut class wng-hide
następujący sposób:źródło
Miałem podobny problem, ponieważ chciałem zwrócić tylko te elementy, które były widoczne w obiekcie strony. Okazało się, że jestem w stanie korzystać z CSS
:not
. W przypadku tego problemu powinno to wystarczyć ...W kontekście obiektu strony możesz pobrać TYLKO te elementy, które są w ten sposób widoczne. Na przykład. mając stronę z wieloma elementami, na których widoczne są tylko niektóre, możesz użyć:
To zwróci ci wszystkie widoczne
i.icon
sźródło
Jeśli w DOM jest wiele elementów o tej samej nazwie klasy. Ale widoczny jest tylko jeden element.
W tym przykładzie filtr pobiera kolekcję elementów i zwraca pojedynczy widoczny element za pomocą metody isDisplayed () .
źródło
filteredElement.length === 0
?Ta odpowiedź będzie wystarczająco solidna, aby działać dla elementów, których nie ma na stronie, a zatem zakończy się niepowodzeniem (bez zgłaszania wyjątku), jeśli selektor nie odnajdzie elementu.
źródło
Czekać na widoczność
Xpath trik, aby znaleźć tylko widoczne elementy
źródło
źródło
Oto kilka fragmentów kodu, których można użyć we frameworku używającym Typescript, kątomierz, jaśmin
// Potwierdzenie tekstu
// Potwierdzenie elementu
// Potwierdzenie formularza
źródło