implicit explicit wait selenium webdriver
Naucz się niejawnego i jawnego czekania w Selenium WebDriver:
W poprzednim samouczku staraliśmy się, abyś zapoznał się z różnymi Operacje pętli i warunkowe programu WebDriver . Te metody warunkowe często zajmują się prawie wszystkimi typami opcji widoczności elementów sieci.
Idąc dalej w tym darmowe serie treningowe Selenium , omówimy różne rodzaje czekania zapewniane przez Selenium WebDriver . Porozmawiamy również o v różne rodzaje opcji nawigacyjnych dostępne w WebDriver.
Oczekiwanie pomaga użytkownikowi w rozwiązywaniu problemów podczas przekierowywania na inne strony internetowe, odświeżając całą stronę internetową i ponownie ładując nową elementy sieci. Czasami mogą być również połączenia Ajax. W ten sposób można zauważyć opóźnienie podczas ponownego ładowania stron internetowych i odzwierciedlania elementów sieci.
Użytkownicy często przeglądają różne strony internetowe w tę iz powrotem. W ten sposób polecenia / metody navigate () dostarczane przez WebDriver pomagają użytkownikowi w symulowaniu scenariuszy w czasie rzeczywistym poprzez nawigację między stronami sieci Web w odniesieniu do historii przeglądarki internetowej.
WebDriver wyposaża użytkownika w dwa geny oczekiwania w celu obsługi powtarzającego się ładowania strony s, ładowanie elementów sieci, wygląd okien, wyskakujących okienek i komunikatów o błędach oraz odbicie elementów sieci na stronie internetowej.
- Niejawne oczekiwanie
- Jawne oczekiwanie
Omówmy szczegółowo każdy z nich, biorąc pod uwagę praktyczne podejście.
Czego się nauczysz:
- Niejawne oczekiwanie WebDriver
- WebDriver Explicit Wait
- Oczekiwany stan
- Nawigacja za pomocą WebDriver
- Wniosek
- rekomendowane lektury
Niejawne oczekiwanie WebDriver
Niejawne oczekiwania są używane do zapewnienia domyślnego czasu oczekiwania (powiedzmy 30 sekund) między każdym kolejnym krokiem testowym / poleceniem w całym skrypcie testowym. Zatem kolejny krok testowy zostałby wykonany tylko wtedy, gdy upłynęło 30 sekund od wykonania poprzedniego kroku / polecenia testu.
Kluczowe uwagi
- Niejawne oczekiwanie to pojedynczy wiersz kodu, który można zadeklarować w metodzie konfiguracji skryptu testowego.
- W porównaniu z jawnym oczekiwaniem, niejawne oczekiwanie jest przezroczyste i nieskomplikowane. Składnia i podejście są prostsze niż jawne czekanie.
Ukryte czekanie jest łatwe i proste w stosowaniu, ale ma również kilka wad. Daje to początek czasowi wykonania skryptu testowego, ponieważ każde z poleceń przestałoby czekać przez określony czas przed wznowieniem wykonywania.
W związku z tym, aby rozwiązać ten problem, WebDriver wprowadza jawne oczekiwanie, w którym możemy jawnie zastosować oczekiwania, gdy tylko wystąpi sytuacja, zamiast wymuszonego czekania podczas wykonywania każdego z kroków testowych.
Import wyciągów
import java.util.concurrent.TimeUnit - Aby móc uzyskać dostęp i zastosować niejawne oczekiwanie w naszych skryptach testowych, jesteśmy zobowiązani zaimportować ten pakiet do naszego skryptu testowego.
Składnia
drv .manage (). timeouts (). implicitlyWait (10, TimeUnit. SEKUNDY );
Dołącz powyższy wiersz kodu do skryptu testowego wkrótce po utworzeniu instancji zmiennej WebDriver. Zatem to wszystko, co jest wymagane, aby ustawić niejawne oczekiwanie w skrypcie testowym.
Opis kodu
Niejawne oczekiwanie nakazuje przekazanie dwóch wartości jako parametrów. Pierwszy argument wskazuje w cyfrach czas, przez jaki system musi czekać. Drugi argument wskazuje skalę pomiaru czasu. Dlatego w powyższym kodzie wspomnieliśmy o „30” sekund jako domyślnym czasie oczekiwania, a jednostka czasu została ustawiona na „sekundy”.
WebDriver Explicit Wait
Jawne oczekiwania są używane do zatrzymania wykonywania do czasu spełnienia określonego warunku lub upływu maksymalnego czasu. W przeciwieństwie do niejawnych oczekiwań, jawne oczekiwania są stosowane tylko dla określonego wystąpienia.
WebDriver wprowadza klasy, takie jak WebDriverWait i ExpectedConditions, aby wymusić jawne oczekiwania w skryptach testowych. W ramach tej dyskusji użyjemy „gmail.com” jako wzoru.
Scenariusz do zautomatyzowania
- Uruchom przeglądarkę internetową i otwórz „gmail.com”
- Wprowadź prawidłową nazwę użytkownika
- Wprowadź prawidłowe hasło
- Kliknij przycisk logowania
- Poczekaj, aż przycisk Utwórz będzie widoczny po załadowaniu strony
Kod WebDriver używający jawnego oczekiwania
Zwróć uwagę, że do tworzenia skryptów będziemy używać projektu „Learning_Selenium” utworzonego w poprzednich tutorialach.
Krok 1 : Utwórz nową klasę Java o nazwie „Wait_Demonstration” w ramach projektu „Learning_Selenium”.
Krok 2 : Skopiuj i wklej poniższy kod w klasie „Wait_Demonstration.java”.
Poniżej znajduje się skrypt testowy odpowiadający powyższemu scenariuszowi.
import static org.junit.Assert.*; import java.util.concurrent.TimeUnit; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; public class Wait_Demonstration { // created reference variable for WebDriver WebDriver drv; @Before public void setup() throws InterruptedException { // initializing drv variable using FirefoxDriver drv=new FirefoxDriver(); // launching gmail.com on the browser drv.get('https://gmail.com'); // maximized the browser window drv.manage().window().maximize(); drv.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); } @Test public void test() throws InterruptedException { // saving the GUI element reference into a 'username' variable of WebElement type WebElement username = drv.findElement(By.id('Email')); // entering username username.sendKeys('shruti.shrivastava.in'); // entering password drv.findElement(By.id('Passwd')).sendKeys('password'); // clicking signin button drv.findElement(By.id('signIn')).click(); // explicit wait - to wait for the compose button to be click-able WebDriverWait wait = new WebDriverWait(drv,30); wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath('//div[contains(text(),'COMPOSE')]'))); // click on the compose button as soon as the 'compose' button is visible drv.findElement(By.xpath('//div[contains(text(),'COMPOSE')]')).click(); } @After public void teardown() { // closes all the browser windows opened by web driver drv.quit(); } }
Import wyciągów
- import org. openqa.selenium.support.ui.ExpectedConditions
- import org. openqa.selenium.support.ui.WebDriverWait
- Zaimportuj powyższe pakiety przed utworzeniem skryptu. Pakiety odnoszą się do klasy Select, która jest wymagana do obsługi listy rozwijanej.
Tworzenie instancji obiektu dla klasy WebDriverWait
WebDriverWait wait = Nowy WebDriverWait ( drv , 30);
Tworzymy zmienną referencyjną „wait” dla klasy WebDriverWait i tworzymy jej instancję przy użyciu instancji WebDriver oraz maksymalnego czasu oczekiwania na zwolnienie wykonania. Maksymalny podany czas oczekiwania mierzony jest w „sekundach”.
Instancja WebDriver została omówiona we wstępnych samouczkach dotyczących WebDriver.
Oczekiwany stan
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath('//div[contains(text(),'COMPOSE')]'))); drv.findElement(By.xpath('//div[contains(text(),'COMPOSE')]')).click();
Powyższe polecenie czeka przez określony czas lub oczekiwany stan, w zależności od tego, co nastąpi lub minie pierwsze.
Dlatego aby móc to zrobić, używamy zmiennej referencyjnej „wait” klasy WebDriverWait utworzonej w poprzednim kroku z klasą ExpectedConditions i rzeczywistego warunku, który ma nastąpić. Dlatego też, gdy tylko wystąpi oczekiwany warunek, sterowanie programem przejdzie do następnego kroku wykonania zamiast wymuszonego czekania przez całe 30 sekund.
W naszym przykładzie czekamy na pojawienie się przycisku „redaguj” i załadowanie go jako część ładowania strony głównej, a następnie przechodzimy do przodu, wywołując polecenie kliknięcia na przycisku „redaguj”.
Rodzaje oczekiwanych warunków
Klasa ExpectedConditions zapewnia dużą pomoc w radzeniu sobie ze scenariuszami, w których przed wykonaniem właściwego kroku testowego musimy ustalić, czy wystąpił warunek.
Klasa ExpectedConditions zawiera szeroki zakres oczekiwanych warunków, do których można uzyskać dostęp za pomocą zmiennej referencyjnej WebDriverWait i metody till ().
Omówmy szczegółowo kilka z nich:
# 1) elementToBeClickable () - Oczekiwany warunek czeka na kliknięcie elementu, tj. Powinien być obecny / wyświetlany / widoczny na ekranie oraz włączony.
Przykładowy kod
wait.until (ExpectedConditions.elementToBeClickable (By.xpath ( „// div [zawiera (text (),„ UTWÓRZ ”)]” )));
# 2) textToBePresentInElement () - Oczekiwany warunek oczekuje na element mający określony wzorzec łańcucha.
Przykładowy kod
wait.until (ExpectedConditions.textToBePresentInElement (By.xpath ( „// div [@ id =‘ forgotPass '”),„ tekst do znalezienia ” ));
jakie są najlepsze aplikacje wirtualnej rzeczywistości
# 3) alertIsPresent () - Oczekiwany stan czeka na pojawienie się pola alertu.
Przykładowy kod
wait.until (ExpectedConditions.alertIsPresent ())! = null);
# 4) titleIs () - Oczekiwany stan czeka na stronę o określonym tytule.
Przykładowy kod
wait.until (ExpectedConditions.titleIs ( „Gmail” ));
# 5) frameToBeAvailableAndSwitchToIt () - Oczekiwany stan czeka, aż ramka będzie dostępna, a gdy tylko ramka będzie dostępna, sterowanie przełącza się na nią automatycznie.
Przykładowy kod
wait.until (ExpectedConditions.frameToBeAvailableAndSwitchToIt (By.id („ nowa ramka ')));
Często zdarza się, że użytkownik klika przyciski wstecz i dalej w przeglądarce internetowej do tyłu, aby przejść do różnych stron internetowych odwiedzanych w bieżącej sesji w historii przeglądarki. W ten sposób, aby zasymulować takie działania wykonywane przez użytkowników, WebDriver wprowadza polecenia Navigate.
Przeanalizujmy szczegółowo te polecenia:
# 1) nawiguj (). Wstecz ()
To polecenie umożliwia użytkownikowi przejście do poprzedniej strony internetowej.
Przykładowy kod:
driver.navigate (). back ();
Powyższe polecenie nie wymaga żadnych parametrów i przenosi użytkownika do poprzedniej strony internetowej w historii przeglądarki internetowej.
# 2) navigate (). Forward ()
To polecenie umożliwia użytkownikowi przejście do następnej strony internetowej w odniesieniu do historii przeglądarki.
Przykładowy kod:
driver.navigate (). forward ();
Powyższe polecenie nie wymaga żadnych parametrów i przenosi użytkownika do następnej strony internetowej w historii przeglądarki internetowej.
# 3) navigate (). Refresh ()
To polecenie umożliwia użytkownikowi odświeżenie bieżącej strony internetowej, a tym samym ponowne załadowanie wszystkich elementów sieci.
Przykładowy kod:
driver.navigate (). refresh ();
Powyższe polecenie nie wymaga żadnych parametrów i przeładowuje stronę internetową.
# 4) nawiguj (). To ()
To polecenie umożliwia użytkownikowi uruchomienie nowego okna przeglądarki internetowej i przejście do określonego adresu URL.
Przykładowy kod:
driver.navigate (). to („http://google.com”);
Powyższe polecenie wymaga adresu URL sieci Web jako parametru, a następnie otwiera określony adres URL w świeżo uruchomionej przeglądarce internetowej.
Wniosek
W tym Niejawne i jawne oczekiwanie w samouczku Selenium WebDriver , próbowaliśmy zapoznać Cię z oczekiwaniami WebDriver'a. Omówiliśmy i przećwiczyliśmy zarówno jawne, jak i niejawne oczekiwania. W tym samym czasie omówiliśmy również różne polecenia nawigacji.
Oto sedno tego artykułu:
- WebDriver umożliwia użytkownikowi wybór spośród dostępnych czeków na obsługę sytuacji, w których przepływ wykonania może wymagać uśpienia na kilka sekund w celu załadowania elementów sieci lub spełnienia określonego warunku. W WebDriver dostępne są dwa typy oczekiwania.
- Niejawne oczekiwanie
- Jawne oczekiwanie
- Niejawne czeka służą do zapewnienia domyślnego czasu oczekiwania między każdym kolejnym krokiem testowym / poleceniem w całym skrypcie testowym. Zatem kolejny krok testowy zostałby wykonany tylko wtedy, gdy upłynął określony czas po wykonaniu poprzedniego kroku / polecenia testu.
- Jawne czeka służą do wstrzymania wykonywania do czasu spełnienia określonego warunku lub upływu maksymalnego czasu. W przeciwieństwie do niejawnych oczekiwań, jawne oczekiwania są stosowane tylko dla określonego wystąpienia.
- WebDriver wprowadza klasy, takie jak WebDriverWait i ExpectedConditions, aby wymusić jawne oczekiwania
- ExpectedConditions class zapewnia dużą pomoc w radzeniu sobie ze scenariuszami, w których musimy upewnić się, że warunek wystąpił przed wykonaniem właściwego kroku testowego.
- Klasa ExpectedConditions zawiera szeroki zakres oczekiwanych warunków, do których można uzyskać dostęp za pomocą zmiennej referencyjnej WebDriverWait i metody aż do ().
- Metody Navigate () Polecenia / służą do symulacji zachowania użytkownika podczas nawigowania między różnymi stronami internetowymi w tę iz powrotem.
Następny samouczek nr 16 : Przechodząc do następnego samouczka na liście, zaznajomimy użytkowników z różnymi typami alertów, które mogą się pojawiać podczas uzyskiwania dostępu do stron internetowych i sposobami ich obsługi w programie WebDriver. Typy alertów, na których będziemy się skupiać, to głównie wyskakujące okienka alertów oparte na oknach i okna wyskakujące z alertami internetowymi. Ponieważ wiemy, że obsługa wyskakujących okienek opartych na oknach wykracza poza możliwości WebDriver, do obsługi wyskakujących okienek będziemy również wykorzystywać niektóre narzędzia innych firm.
Uwaga dla Czytelników : Do tego czasu czytelnicy mogą zautomatyzować scenariusze z różnymi ładowaniami stron i elementami dynamicznymi pojawiającymi się na ekranie przy użyciu różnych oczekiwanych warunków i poleceń nawigacyjnych.
rekomendowane lektury
- Cucumber Selenium Tutorial: Integracja Cucumber Java Selenium WebDriver
- Wprowadzenie do Selenium WebDriver - samouczek Selenium # 8
- Wdrożenie naszego pierwszego skryptu WebDriver - Selenium WebDriver Tutorial # 10
- Często zadawane pytania dotyczące selenu
- Jak radzić sobie z alertami / wyskakującymi okienkami w Selenium WebDriver - Samouczek Selenium nr 16
- Przewodnik po generowaniu raportów rozszerzonych w Selenium WebDriver
- Jak uruchomić Selenium WebDriver w różnych popularnych przeglądarkach
- WebDriver Cała konfiguracja i instalacja z Eclipse - samouczek Selenium # 9