Sprawdź obecność elementu i poczekaj na polecenie Selenium

⚡ Inteligentne podsumowanie

Sprawdź obecność elementu i wykonaj polecenia waitFor w Selenium IDE sprawdza, czy strona zawiera elementy i tekst oczekiwane przez test, a następnie wstrzymuje odtwarzanie, dopóki dynamiczny warunek nie stanie się prawdziwy, przed uruchomieniem następnego kroku.

  • 🔘 Sprawdzanie elementów: verifyElementPresent zwraca wartość TRUE, gdy lokalizator pasuje do czegoś na stronie, a verifyElementNotPresent jest jego dokładnym odwrotnością.
  • ️ Sprawdzanie tekstu: verifyTextPresent przeszukuje całą stronę i uwzględnia wielkość liter, więc „Atlanta” nigdy nie pasuje do „atlanta”.
  • ✅ Sprawdzanie pozycji: verifyElementPositionLeft i verifyElementPositionTop porównują przesunięcie pikseli elementu od krawędzi strony.
  • 🧪 Ładowanie strony: Polecenia andWait, takie jak clickAndWait, wstrzymują działanie skryptu do momentu zakończenia ładowania nowej strony.
  • 🛠️. Treść dynamiczna: Polecenia waitFor czekają na spełnienie warunku, a nie na załadowanie strony, co jest przydatne w przypadku ekranów AJAX, które nigdy nie są przeładowywane.
  • 📊 Aktualne IDE: Rozszerzenie przeglądarki zmienia nazwy tych kroków i przypisuje każdemu poleceniu wait własny milisekundowy limit czasu.

Sprawdź obecność elementu i wykonaj polecenie waitFor Selenium IDE

nagrany Selenium IDE Skrypt klika i pisze, ale sam nigdy nie decyduje, czy aplikacja działała poprawnie. Zajmują się tym dwie rodziny poleceń: zweryfikować polecenia, które sprawdzają stan strony i czekać polecenia, które wstrzymują wykonywanie do momentu, aż strona będzie gotowa do sprawdzenia.

⚠️ Uwaga dotycząca wersji: poniższe zrzuty ekranu pochodzą z oryginału Firefox-podłącz Selenium IDE, które nie jest już dystrybuowane, i używa nazw camelCase w Selenese. Obecnym IDE jest Chrome, Firefox i Edge'a rozszerzenie przeglądarkiOpisane tutaj zachowanie nadal obowiązuje, ale zmieniono kilka nazw poleceń — mapaping tabela znajduje się później w tym artykule, a każde oryginalne polecenie i zrzut ekranu są zachowane dokładnie w takiej formie, w jakiej zostały opublikowane.

Sprawdź obecność elementu

Aby sprawdzić obecność elementu, możemy użyć następujących dwóch poleceń:

  • zweryfikuj element obecny – zwraca TRUE, jeśli określony element został ZNALEZIONY na stronie; FALSE, jeśli jest inaczej
  • zweryfikujElementNotPresent – zwraca TRUE jeśli podany element NIE ZNALEZIŁ się nigdzie na stronie; FAŁSZ, jeśli występuje.

Oba polecenia przyjmują element lokalizator Target pole — identyfikator, nazwa, selektor CSS, tekst łącza lub XPath wyrażenie — i żadne z nich nie potrzebuje wartości.

Poniższy skrypt testowy sprawdza, czy pole tekstowe Nazwa użytkownika znajduje się w Mercury Strona główna wycieczek, podczas gdy pole tekstowe Imię nie jest. Pole tekstowe Imię jest w rzeczywistości elementem obecnym na stronie Rejestracja Mercury Wycieczki, nie na stronie głównej.

Selenium Skrypt IDE wykorzystujący verifyElementPresent w polu nazwy użytkownika i verifyElementNotPresent w polu imienia

Ponieważ to są zweryfikować polecenia, a nie zapewniać Po wykonaniu poleceń błąd zostaje zapisany w dzienniku, a pozostałe kroki są nadal wykonywane. To rozróżnienie zostanie szczegółowo omówione poniżej.

Sprawdź obecność określonego tekstu w poleceniu w Selenium

Samo sprawdzenie istnienia elementu nie zawsze wystarczy — często konieczne jest przeprowadzenie testu w celu potwierdzenia słów wyświetlanych użytkownikowi. Dwa polecenia tekstowe rozwiązują ten problem.

  • zweryfikujTextPresent – zwraca TRUE, jeśli określony ciąg tekstowy został ZNALEZIONY gdzieś na stronie; FALSE, jeśli jest inaczej
  • zweryfikujTextNotPresent – zwraca PRAWDA, jeśli podany ciąg tekstowy NIE ZNALEZIONO się nigdzie na stronie; FAŁSZ, jeśli został znaleziony

Pamiętaj, że w tych poleceniach rozróżniana jest wielkość liter.

Poniższy dziennik pokazuje tę samą stronę sprawdzoną dwukrotnie i zawierającą dwa różne zapisy tej samej frazy.

Selenium Dziennik IDE pokazujący, że verifyTextPresent przechodzi dla trasy Atlanta–Las Vegas, ale nie przechodzi dla trasy Atlanta–Las Vegas

W powyższym scenariuszu, „Atlanta – Las Vegas” zostało potraktowane inaczej niż „Atlanta – Las Vegas”, ponieważ litera „A” w „Atlancie” była wielka w pierwszym przypadku, a mała w drugim. Po użyciu polecenia verifyTextPresent w obu przypadkach, jedno zakończyło się powodzeniem, a drugie niepowodzeniem.

Sprawdź konkretną pozycję elementu

Wady układu rzadko powodują awarię lokalizatora, więc kontrole obecności je pomijają. Polecenia pozycjonujące wypełniają tę lukę.

Selenium IDE wskazuje położenie elementu poprzez pomiar (w pikselach) jego odległości od lewej lub górnej krawędzi okna przeglądarki.

  • zweryfikuj pozycję elementu po lewej stronie – sprawdza, czy podana liczba pikseli odpowiada odległości elementu od lewej krawędzi strony. To zwróci FAŁSZ, jeśli określona wartość nie odpowiada odległości od lewej krawędzi.
  • zweryfikujElementPozycjaNa górze – sprawdza, czy podana liczba pikseli odpowiada odległości elementu od górnej krawędzi strony. To zwróci FAŁSZ, jeśli określona wartość nie odpowiada odległości od górnej krawędzi.

Poniższy skrypt rejestruje oczekiwane przesunięcia pikseli w kolumnie Wartość.

Selenium Kroki IDE z wykorzystaniem verifyElementPositionLeft i verifyElementPositionTop z wartościami pikseli w kolumnie Wartość

Należy obchodzić się z tymi dwoma poleceniami ostrożnie. Przesunięcie pikseli zmienia się w zależności od rozmiaru okna, poziomu powiększenia i zainstalowanych czcionek, więc zakodowana na stałe wartość, która jest poprawna na jednym komputerze, może nie zadziałać na innym.

Czekaj na polecenie Selenium

Polecenie verify może sprawdzić tylko to, co jest już na ekranie, więc sprawdzenie wykonane zbyt wcześnie kończy się niepowodzeniem, nawet gdy aplikacja działa. Polecenia wait rozwiązują ten problem z synchronizacją.

Poniżej przedstawiono typy poleceń wait w Selenium

i polecenia Czekaj

Są to polecenia, które będą czekać na załadowanie nowej strony przed przejściem do następnego polecenia.

Przykładami są

  • kliknijI czekaj
  • wpiszAndWait
  • wybierz i czekaj

Każdy z nich to zwykłe polecenie akcji z dołączonym sufiksem AndWait, jak pokazano w zapisanym poniżej kroku.

Nagrano krok kliknięcia i oczekiwania, trzymając Selenium Skrypt IDE do momentu zakończenia ładowania następnej strony

czekaj na polecenia

Są to polecenia oczekujące na spełnienie określonego warunku przed przejściem do kolejnego polecenia (niezależnie od załadowania nowej strony). Polecenia te są bardziej odpowiednie do stosowania w dynamicznych witrynach internetowych opartych na technologii AJAX, które zmieniają wartości i elementy bez ponownego ładowania całej strony. Przykłady obejmują:

  • poczekaj na tytuł
  • poczekaj na tekst obecny
  • poczekaj na alert

Rozważmy poniższy scenariusz z Facebookiem.

Formularz rejestracyjny na Facebooku pokazujący pytanie Dlaczego muszę podać link z datą urodzin przed kliknięciem

Możemy użyć kombinacji „kliknij” i „waitForTextPresent”, aby zweryfikować obecność tekstu „Podaj swoje urodziny”.

Selenium Kroki IDE polegają na parowaniu kliknięcia z poleceniem waitForTextPresent, aby poczekać na podanie tekstu urodzinowego

Nie możemy skorzystać z funkcji clickAndWait, ponieważ po kliknięciu opcji „Dlaczego muszę podać swoją datę urodzenia?” nie została załadowana żadna strona. połączyć. Jeśli to zrobimy, test się nie powiedzie

Ta sama zasada dotyczy każdej treści wstrzykiwanej przez skrypt, a nie przez nawigację, dlatego Ekrany sterowane AJAX-em prawie zawsze należy użyć polecenia waitFor zamiast andWait.

Polecenia Assert, Verify i waitFor w Selenium IDE

Początkujący często wybierają niewłaściwą rodzinę, a potem zastanawiają się, dlaczego zestaw zatrzymuje się przy pierwszym błędzie lub dlaczego zgłasza dwadzieścia błędów, z których wszystkie tracWracamy do jednego. Te trzy prefiksy odpowiadają na trzy różne pytania.

Prefiks Co to robi W przypadku niepowodzenia Najlepiej stosować do
zapewniać Natychmiast sprawdza stan Rejestruje awarię i zatrzymuje przypadek testowy Warunki wstępne — logowanie musi się powieść, zanim cokolwiek innego będzie miało sens
zweryfikować Natychmiast sprawdza stan Rejestruje awarię i kontynuuje wykonywanie następnego polecenia Niezależne kontrole, np. kilka etykiet na jednej stronie potwierdzenia
czekać na Ankiety są przeprowadzane do momentu spełnienia warunku Rejestruje awarię po upływie limitu czasu, a następnie kontynuuje działanie Wszystko, co pojawia się późno — odpowiedzi AJAX, spinnery, okna dialogowe

Praktyczny schemat łączy wszystkie trzy: potwierdź stronę, na którą trafiłeś, poczekaj na element, który pojawi się asynchronicznie, a następnie zweryfikuj każde pole z osobna. Robiąc to w tej kolejności, jedna uszkodzona nawigacja zatrzymuje test przedwcześnie, a kilka kosmetycznych niezgodności jest zgłaszanych w jednym przebiegu. Ta sama dyscyplina ma zastosowanie do Selenium testy napisane w kodzie, gdzie odpowiednikami są twarde asercje, miękkie asercje i jawne oczekiwania.

Polecenia weryfikacji i oczekiwania w bieżącym Selenium IDE

FirefoxŚrodowisko IDE wtyczki, które wygenerowało powyższe zrzuty ekranu, zostało wycofane, a zestaw poleceń został przebudowany dla obecnego rozszerzenia przeglądarki. Kilka nazw selenskich przetrwało, niektóre zostały przemianowane, a kilka usunięto. Poniższa tabela mapuje polecenia użyte w tym artykule do ich współczesnych odpowiedników, zaczerpniętych z oficjalnej wersji. Selenium Odwołanie do poleceń IDE.

Dowództwo Legacy Selenese Polecenie w bieżącym środowisku IDE
zweryfikuj element obecny sprawdź obecność elementu
zweryfikujElementNotPresent sprawdź, czy element nie jest obecny
zweryfikujTextPresent zweryfikuj tekst (zasięgowo do lokalizatora elementów, a nie całej strony)
zweryfikujTextNotPresent zweryfikuj, czy tekst nie jest ograniczony do lokalizatora elementów
zweryfikuj tytuł zweryfikuj tytuł
sprawdź pozycję elementu po lewej stronie / sprawdź pozycję elementu na górze Brak odpowiednika — porzucono stwierdzenia dotyczące pozycji
kliknij i czekaj, wpisz i czekaj, wybierz i czekaj Brak sufiksu AndWait — polecenie otwarcia już czeka na załadowanie strony
poczekaj na element obecny czekaj na obecność elementu, z czasem oczekiwania w milisekundach
poczekaj na alert potwierdź alert lub zweryfikuj tekst alertu po wyświetleniu okna dialogowego

W codziennej pracy najważniejsze są dwie różnice. Po pierwsze, obecne polecenia wait – wait for element present, wait for element visible, wait for element editable i ich ujemne odpowiedniki – wymagają jawnego czasu oczekiwania w milisekundach, więc powolny krok nie musi już współdzielić jednego globalnego limitu czasu. Po drugie, zniknęło wyszukiwanie tekstu na całej stronie: weryfikacja tekstu wymaga lokalizatora, co zazwyczaj zapewnia dokładniejsze sprawdzenie.

Typowe błędy w poleceniach Verify i waitFor

Większość zgłaszanych problemów z tymi poleceniami nie jest defektami w środowisku IDE. Poniższa lista zawiera najczęściej występujące błędy i sposoby ich rozwiązania.

  • Element istnieje, ale sprawdzenie nadal kończy się niepowodzeniem. Obecność i widoczność to różne stany. Element ukryty za regułą CSS jest nadal obecny w DOM, dlatego należy połączyć sprawdzanie obecności z oczekiwaniem na widoczność elementu, gdy test zależy od faktycznego wyświetlenia go przez użytkownika.
  • Kontrola tekstu kończy się niepowodzeniem w przypadku sformułowań, które wyglądają identycznie. Nierozdzielane spacje, spacje na końcu i apostrofy kręcone skopiowane z dokumentu projektowego powodują przerwanie dokładnego dopasowania. Wpisz oczekiwany ciąg znaków ręcznie, zamiast go wklejać.
  • Polecenie wait przekracza limit czasu na stronie, która najwyraźniej została załadowana. Element zazwyczaj znajduje się w ramce iframe. Najpierw uruchom polecenie select frame, w przeciwnym razie lokalizator zostanie porównany z niewłaściwym dokumentem.
  • clickAndWait zawiesza się w aplikacji jednostronicowej. Nawigacja nie działa, więc nie ma na co czekać. Zastąp to kliknięciem i odpowiednim poleceniem waitFor.
  • Sprawdzanie pozycji przebiega lokalnie, ale nie na serwerze kompilacji. Rozmiar ekranu i renderowanie czcionek różnią się. Preferuj sprawdzanie obecności lub tekstu albo ustaw konkretny rozmiar okna na początku testu.
  • Cały zestaw zatrzymuje się przy pierwszym niedopasowaniu. Zarejestrowano polecenie assert w miejscu, w którym powinno być polecenie verify. Zmień prefiks, a uruchomienie będzie raportować każdą awarię zamiast tylko pierwszej.

Gdy skrypt przetrwa te pułapki, następnym krokiem jest zazwyczaj przechowuj wartości czasu wykonania w zmiennych dzięki temu kontrole są porównywane z rzeczywistymi danymi, a nie z zakodowanymi na stałe ciągami znaków.

FAQ

Starsze środowisko IDE współdzieliło jeden globalny limit czasu dla każdego kroku waitFor, co zostało zmienione poleceniem setTimeout. Obecne rozszerzenie pobiera jawny czas oczekiwania w milisekundach dla każdego polecenia wait, więc pojedynczy wolny ekran nie wymusza już tak długiego oczekiwania co drugiego kroku.

Nie. Funkcja Pause zawsze jest w stanie uśpienia przez cały czas, więc marnuje czas, gdy strona jest szybka, i nadal nie działa, gdy strona jest wolna. Korzystaj z niej tylko po to, aby zademonstrować krok podczas demonstracji, nigdy w pakiecie, który zamierzasz uruchamiać wielokrotnie.

Nie. Obecność oznacza, że ​​węzeł istnieje w DOM, co obowiązuje w przypadku elementów ukrytych przez CSS lub umieszczonych poza ekranem. Gdy test zależy od tego, czy użytkownik coś zobaczy, należy dodać opcję „oczekiwanie na widoczny element” obok sprawdzenia obecności.

Tak, i obecne IDE tego wymaga. Polecenie verify text przyjmuje lokalizator elementu oraz oczekiwany ciąg znaków, co jest bardziej rygorystyczne niż stare wyszukiwanie na całej stronie i uniemożliwia niepowiązanemu elementowi menu spełnienie warunku, którego nigdy nie miał spełnić.

Code Funkcja export zamienia każde polecenie na równoważne polecenie w języku docelowym, więc krok oczekiwania staje się jawnym oczekiwaniem WebDrivera. Przeczytaj wygenerowany plik przed zatwierdzeniem go, ponieważ przekroczenia limitu czasu i błędy typu soft-versus-hard nie zawsze pozostają niezmienione po tłumaczeniu.

Modele uczenia maszynowego odczytują historyczne dane uruchomień i sygnalizują kroki, które kończą się niepowodzeniem sporadycznie, a nie konsekwentnie, co jest oznaką braku oczekiwania. Naprawa lokalizatora wspomagana przez sztuczną inteligencję rozwiązuje drugą częstą przyczynę, proponując nowy selektor po zmianie znaczników.

Dobrze radzi sobie z częścią mechaniczną — zamienia krok oczekiwania na WebDriverWait z oczekiwanym warunkiem. RevSprawdź wybrany limit czasu i wybrany warunek, ponieważ wygenerowany warunek obecności często musi być warunkiem widoczności.

Lokalizatory są oceniane w odniesieniu do aktualnie wybranego dokumentu, a ramka iframe jest osobna. Najpierw uruchom polecenie „select frame”, następnie polecenie „check”, a następnie wróć do dokumentu na górze listy, aby kolejne kroki nie były wyszukiwane w niewłaściwym kontekście.

Podsumuj ten post następująco: