Pierwszy skrypt Selenium Webdriver: Przykładowy kod JAVA

Spisie treści:

Anonim

Korzystając z klasy Java „myclass”, którą utworzyliśmy w poprzednim samouczku, spróbujmy utworzyć skrypt WebDriver, który:

  1. pobrać stronę główną Mercury Tours
  2. zweryfikuj jego tytuł
  3. wydrukuj wynik porównania
  4. zamknij go przed zakończeniem całego programu.

Kod WebDriver

Poniżej znajduje się rzeczywisty kod WebDriver dla logiki przedstawionej w powyższym scenariuszu

Uwaga: Uruchamiając przeglądarkę Firefox 35, musisz użyć sterownika gecko stworzonego przez Mozillę, aby używać sterownika sieciowego. Selenium 3.0, gecko i firefox mają problemy ze zgodnością i ich prawidłowe ustawienie może stać się żmudnym zadaniem. Jeśli kod nie działa, przejdź na wersję Firefox 47 lub starszą. Alternatywnie możesz uruchamiać swoje skrypty w Chrome. Selen działa w przeglądarce Chrome od razu po wyjęciu z pudełka. Wystarczy zmienić 3 linie kodu, aby skrypt działał z przeglądarką Chrome lub Firefox

pakiet newproject;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;// skomentuj powyższą linię i odznacz poniższą linię, aby użyć przeglądarki Chrome// import org.openqa.selenium.chrome.ChromeDriver;klasa publiczna PG1 {public static void main (String [] args) {// deklaracja i tworzenie instancji obiektów / zmiennychSystem.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Sterownik WebDriver = nowy FirefoxDriver ();// skomentuj powyższe 2 wiersze i usuń komentarz poniżej 2 wierszy, aby użyć przeglądarki Chrome//System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe ");// sterownik WebDriver = nowy ChromeDriver ();String baseUrl = "http://demo.guru99.com/test/newtours/";String spodziewanyTitle = "Witamy: Mercury Tours";StringtualTitle = "";// uruchom Fire fox i skieruj go na podstawowy adres URLdriver.get (baseUrl);// pobierz aktualną wartość tytułutualTitle = driver.getTitle ();/ ** porównaj rzeczywisty tytuł strony z oczekiwanym i wydrukuj* wynik jako „Zaliczono” lub „Niepowodzenie”* /if (tualTitle.contentEquals (spodziewanyTitle)) {System.out.println ("Test powiódł się!");} else {System.out.println ("Test nie powiódł się");}// zamknij Ognisty lisdriver.close ();}}

Wyjaśnienie kodu

Importowanie pakietów

Aby rozpocząć, musisz zaimportować następujące dwa pakiety:

  1. org.openqa.selenium. * - zawiera klasę WebDriver potrzebną do utworzenia instancji nowej przeglądarki załadowanej określonym sterownikiem
  2. org.openqa.selenium.firefox.FirefoxDriver - zawiera klasę FirefoxDriver potrzebną do utworzenia instancji sterownika specyficznego dla Firefoksa w przeglądarce utworzonej przez klasę WebDriver

Jeśli twój test wymaga bardziej skomplikowanych czynności, takich jak dostęp do innej klasy, robienie zrzutów ekranu przeglądarki lub manipulowanie plikami zewnętrznymi, na pewno będziesz musiał zaimportować więcej pakietów.

Tworzenie instancji obiektów i zmiennych

Zwykle w ten sposób tworzony jest obiekt sterownika.

Klasa FirefoxDriver bez parametrów oznacza, że ​​domyślny profil Firefoksa zostanie uruchomiony przez nasz program Java. Domyślny profil Firefoksa jest podobny do uruchamiania Firefoksa w trybie awaryjnym (żadne rozszerzenia nie są ładowane).

Dla wygody zapisaliśmy podstawowy adres URL i oczekiwany tytuł jako zmienne.

Uruchamianie sesji przeglądarki

Metoda get () w WebDriver służy do uruchamiania nowej sesji przeglądarki i kieruje ją na adres URL określony jako jej parametr.

Uzyskaj rzeczywisty tytuł strony

Klasa WebDriver ma metodę getTitle () , która jest zawsze używana do uzyskania tytułu strony aktualnie załadowanej.

Porównaj wartości oczekiwane i rzeczywiste

Ta część kodu po prostu wykorzystuje podstawową strukturę if-else języka Java, aby porównać rzeczywisty tytuł z oczekiwanym.

Zakończenie sesji przeglądarki

Metoda „ close () ” służy do zamykania okna przeglądarki.

Zakończenie całego programu

Jeśli użyjesz tego polecenia bez uprzedniego zamknięcia wszystkich okien przeglądarki, cały program Java zakończy się, pozostawiając otwarte okno przeglądarki.

Uruchamianie testu

Istnieją dwa sposoby wykonania kodu w środowisku Eclipse IDE.

  1. Na pasku menu Eclipse kliknij Uruchom> Uruchom.
  2. Naciśnij klawisze Ctrl + F11, aby uruchomić cały kod.

Jeśli wszystko zrobiłeś poprawnie, Eclipse wyświetli komunikat „Test zakończony pomyślnie!”

Lokalizowanie elementów GUI

Lokalizowanie elementów w WebDriver odbywa się za pomocą metody „ findElement (By. Locator ()) ”. Część kodu „lokalizator” jest taka sama, jak każdy z lokalizatorów omówionych wcześniej w rozdziałach Selenium IDE w tych samouczkach. Rzeczywiście, zaleca się zlokalizowanie elementów GUI za pomocą IDE i po pomyślnym zidentyfikowaniu wyeksportować kod do WebDriver.

Oto przykładowy kod Selenium, który lokalizuje element według jego identyfikatora. Facebook jest używany jako podstawowy adres URL.

pakiet newproject;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;klasa publiczna PG2 {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Sterownik WebDriver = nowy FirefoxDriver ();String baseUrl = "http://www.facebook.com";String tagName = "";driver.get (baseUrl);tagName = driver.findElement (By.id ("email")). getTagName ();System.out.println (tagName);driver.close ();System.exit (0);}}

Użyliśmy metody getTagName () , aby wyodrębnić nazwę znacznika tego konkretnego elementu, którego id to „email”. Po uruchomieniu ten kod powinien być w stanie poprawnie zidentyfikować nazwę tagu „input” i wydrukować ją w oknie konsoli Eclipse.

Podsumowanie lokalizacji elementów

Zmiana Opis Próba
Przez. Nazwa klasy wyszukuje elementy na podstawie wartości atrybutu „class” findElement (By.className ("someClassName"))
Przez. cssSelector znajduje elementy w oparciu o silnik selektora CSS sterownika findElement (By.cssSelector ("input # email"))
Przez. ID lokalizuje elementy według wartości ich atrybutu „id” findElement (By.id ("someId"))
Przez. tekst linku znajduje element odsyłacza na podstawie dokładnego wyświetlanego tekstu findElement (By.linkText ("REJESTRACJA"))
Przez. Nazwa lokalizuje elementy według wartości atrybutu „name” findElement (By.name ("someName"))
Przez. częścioweLinkText lokalizuje elementy, które zawierają podany tekst linku findElement (By.partialLinkText ("REG"))
Przez. Nazwa znacznika lokalizuje elementy według ich nazw znaczników findElement (By.tagName ("div"))
Przez. xpath lokalizuje elementy za pomocą XPath findElement (By.xpath ("// html / body / div / table / tbody / tr / td [2] / table / tbody / tr [4] / td / table / tbody / tr / td [2] / table / tbody / tr [2] / td [3] / form / table / tbody / tr [5] "))

Uwaga dotycząca używania findElement (By.cssSelector ())

By.cssSelector () nie obsługuje funkcji „zawiera” . Rozważ poniższy kod Selenium IDE -

W Selenium IDE powyżej cały test przeszedł pomyślnie. Jednak w poniższym skrypcie Selenium WebDriver ten sam test wygenerował błąd, ponieważ WebDriver nie obsługuje słowa kluczowego „zawiera”, gdy jest używane w metodzie By.cssSelector ().

Wspólne polecenia

Tworzenie wystąpień elementów sieci Web

Zamiast używać długiej składni „driver.findElement (By.locator ())” za każdym razem, gdy uzyskasz dostęp do określonego elementu, możemy utworzyć dla niego instancję obiektu WebElement. Klasa WebElement znajduje się w pakiecie „org.openqa.selenium. *”.

Kliknięcie elementu

Klikanie jest prawdopodobnie najczęstszym sposobem interakcji z elementami sieci . Metoda click () służy do symulacji kliknięcia dowolnego elementu. Poniższy przykład Selenium Java pokazuje, w jaki sposób kliknięcie () zostało użyte do kliknięcia przycisku „Zaloguj się” Mercury Tours.

Podczas korzystania z metody click () należy zwrócić uwagę na następujące kwestie.

  • Nie przyjmuje żadnego parametru / argumentu.
  • Metoda automatycznie czeka na załadowanie nowej strony, jeśli ma to zastosowanie.
  • Element do kliknięcia musi być widoczny (wysokość i szerokość nie mogą być równe zeru).

Uzyskaj polecenia

Polecenia Get pobierają różne ważne informacje o stronie / elemencie. Oto kilka ważnych poleceń „pobierz”, z którymi musisz się zapoznać.

Polecenia Stosowanie
get () Przykładowe użycie:
  • Automatycznie otwiera nowe okno przeglądarki i pobiera stronę określoną w nawiasach.
  • Jest odpowiednikiem polecenia „otwórz” w Selenium IDE.
  • Parametr musi być obiektem typu String .
getTitle () Przykładowe użycie:
  • Nie wymaga parametrów
  • Pobiera tytuł bieżącej strony
  • Spacje wiodące i końcowe są przycinane
  • Zwraca pusty ciąg, jeśli strona nie ma tytułu
getPageSource () Przykładowe użycie:
  • Nie wymaga parametrów
  • Zwraca kod źródłowy strony jako wartość typu String
getCurrentUrl () Przykładowe użycie:
  • Nie wymaga parametrów
  • Pobiera ciąg reprezentujący bieżący adres URL , na który patrzy przeglądarka
getText () Przykładowe użycie:
  • Pobiera wewnętrzny tekst elementu, który określisz

Poruszanie się po poleceniach

Te polecenia umożliwiają odświeżanie, przechodzenie i przełączanie między różnymi stronami internetowymi.

navigate (). to () Przykładowe użycie:
  • Automatycznie otwiera nowe okno przeglądarki i pobiera stronę określoną w nawiasach.
  • Robi dokładnie to samo, co metoda get ().
navigate (). refresh () Przykładowe użycie:
  • Nie wymaga parametrów.
  • To odświeża bieżącą stronę.
navigate (). back () Przykładowe użycie:
  • Nie wymaga parametrów
  • Cofa Cię o jedną stronę w historii przeglądarki.
navigate (). forward () Przykładowe użycie:
  • Nie wymaga parametrów
  • Przechodzi do przodu o jedną stronę w historii przeglądarki.

Zamykanie i zamykanie okien przeglądarki

close () Przykładowe użycie:
  • Nie wymaga parametrów
  • Zamyka tylko okno przeglądarki, które obecnie kontroluje WebDriver .
quit () Przykładowe użycie:
  • Nie wymaga parametrów
  • Zamyka wszystkie okna, które otworzył WebDriver.

Aby wyraźnie zilustrować różnicę między close () a quit (), spróbuj wykonać poniższy kod. Używa strony internetowej, która automatycznie wyświetla okno po załadowaniu strony i otwiera kolejne po wyjściu.

Zwróć uwagę, że zostało zamknięte tylko nadrzędne okno przeglądarki, a nie dwa wyskakujące okienka.

Ale jeśli użyjesz quit (), wszystkie okna zostaną zamknięte - nie tylko to nadrzędne. Spróbuj uruchomić poniższy kod, a zauważysz, że dwa wyskakujące okienka powyżej również zostaną automatycznie zamknięte.

pakiet newproject;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;klasa publiczna PG3 {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Sterownik WebDriver = nowy FirefoxDriver ();driver.get („http://www.popuptest.com/popuptest2.html”);driver.quit (); // używając QUIT wszystkie okna zostaną zamknięte}}

Przełączanie między klatkami

Aby uzyskać dostęp do elementów GUI w ramce, powinniśmy najpierw skierować WebDriver, aby najpierw skupił się na ramce lub wyskakującym okienku, zanim uzyskamy dostęp do elementów w nich zawartych. Weźmy na przykład stronę internetową http://demo.guru99.com/selenium/deprecated.html

Ta strona ma 3 ramki, których atrybuty „nazwy” są wskazane powyżej. Chcemy uzyskać dostęp do linku „Przestarzałe”, zakreślonego powyżej na żółto. Aby to zrobić, musimy najpierw poinstruować WebDriver, aby przełączył się do ramki „classFrame” za pomocą metody „switchTo (). Frame ()” . Użyjemy atrybutu name ramki jako parametru dla części "frame ()".

pakiet newproject;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;klasa publiczna PG4 {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Sterownik WebDriver = nowy FirefoxDriver ();driver.get („http://demo.guru99.com/selenium/deprecated.html”);driver.switchTo (). frame ("classFrame");driver.findElement (By.linkText ("Przestarzałe")). click ();driver.close ();}}

Po wykonaniu tego kodu zobaczysz, że ramka „classFrame” jest przenoszona na stronę „Przestarzałe API”, co oznacza, że ​​nasz kod mógł pomyślnie uzyskać dostęp do łącza „Przestarzałe”.

Przełączanie się między wyskakującymi oknami

WebDriver umożliwia wyświetlanie wyskakujących okienek, takich jak alerty, w przeciwieństwie do Selenium IDE. Aby uzyskać dostęp do elementów w alercie (takich jak zawarta w nim wiadomość), musimy użyć metody „switchTo (). Alert ()” . W poniższym kodzie użyjemy tej metody, aby uzyskać dostęp do pola alertu, a następnie pobrać jego wiadomość za pomocą metody „getText ()” , a następnie automatycznie zamknąć okno alertu za pomocą funkcji „switchTo (). Alert (). Accept () „ metoda.

Najpierw przejdź do http://jsbin.com/usidix/1 i ręcznie kliknij przycisk „Idź!” tam przycisk i przekonaj się sam tekst wiadomości.

Zobaczmy przykładowy kod Selenium, aby to zrobić-

pakiet mypackage;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;public class myclass {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Sterownik WebDriver = nowy FirefoxDriver ();String alertMessage = "";driver.get („http://jsbin.com/usidix/1”);driver.findElement (By.cssSelector ("input [value = \" Go! \ "]")). click ();alertMessage = driver.switchTo (). alert (). getText ();driver.switchTo (). alert (). accept ();System.out.println (alertMessage);driver.quit ();}}

Na konsoli Eclipse zwróć uwagę, że wydrukowany komunikat ostrzegawczy to:

Czekaj

Są dwa rodzaje czekania.

  1. Niejawne oczekiwanie - służy do ustawiania domyślnego czasu oczekiwania w całym programie
  2. Jawne oczekiwanie - służy do ustawiania czasu oczekiwania tylko dla określonej instancji

Niejawne oczekiwanie

  • Kodowanie jest prostsze niż jawne oczekiwanie.
  • Zwykle jest zadeklarowana w części kodu związanej z tworzeniem instancji.
  • Do zaimportowania będziesz potrzebować tylko jednego dodatkowego pakietu.

Aby zacząć używać niejawnego oczekiwania, musiałbyś zaimportować ten pakiet do swojego kodu.

Następnie dodaj to w części kodu związanej z tworzeniem instancji.

Jawne oczekiwanie

Jawne oczekiwania są wykonywane przy użyciu klas WebDriverWait i ExpectedCondition . W poniższym przykładzie Selenium WebDriver poczekamy do 10 sekund, aż element o identyfikatorze „nazwa użytkownika” stanie się widoczny przed przejściem do następnego polecenia. Oto kroki.

Krok 1

Zaimportuj te dwa pakiety:

Krok 2

Zadeklaruj zmienną WebDriverWait. W tym przykładzie jako nazwy zmiennej użyjemy „myWaitVar”.

Krok 3

Użyj myWaitVar z ExpectedConditions w częściach, w których potrzebujesz jawnego oczekiwania na wystąpienie. W tym przypadku użyjemy jawnego czekania na wejściu „nazwa użytkownika” (Strona główna Mercury Tours), zanim wpiszemy do niego tekst „tutorial”.

Warunki

Następujące metody są używane w operacjach warunkowych i zapętlonych -

  • isEnabled () jest używana, gdy chcesz sprawdzić, czy określony element jest włączony, czy nie, przed wykonaniem polecenia.
  • isDisplayed () jest używana, gdy chcesz sprawdzić, czy określony element jest wyświetlany, czy nie, przed wykonaniem polecenia.
  • isSelected () jest używana, gdy chcesz sprawdzić, czy zaznaczone jest określone pole wyboru, przycisk radiowy lub opcja w polu rozwijanym . Nie działa na innych elementach.

Korzystanie z ExpectedConditions

Klasa ExpectedConditions oferuje szerszy zestaw warunków, których można używać w połączeniu z metodą till () usługi WebDriverWait.

Poniżej znajdują się niektóre z najpopularniejszych metod ExpectedConditions.

  • alertIsPresent () - czeka, aż zostanie wyświetlone okno alertu.
  • elementToBeClickable () - czeka, aż element będzie widoczny i jednocześnie włączony. Poniższy przykładowy kod selenium będzie czekał, aż element z stanie się widoczny i włączony, zanim przypisze ten element jako zmienną WebElement o nazwie „txtUserName”.
  • frameToBeAvailableAndSwitchToIt () - czeka, aż dana ramka będzie już dostępna, a następnie automatycznie się do niej przełącza.

Łapanie wyjątków

Używając isEnabled (), isDisplayed () i isSelected (), WebDriver zakłada, że ​​element już istnieje na stronie. W przeciwnym razie zgłosi NoSuchElementException . Aby tego uniknąć, powinniśmy użyć bloku try-catch, aby program nie został przerwany.

WebElement txtbox_username = driver.findElement (By.id ("nazwa użytkownika"));próbować{if (txtbox_username.isEnabled ()) {txtbox_username.sendKeys ("tutorial");}}catch (NoSuchElementException nsee) {System.out.println (nsee.toString ());}

Jeśli używasz jawnego oczekiwania, typ wyjątku, który powinieneś złapać, to „TimeoutException”.

Podsumowanie

  • Aby rozpocząć korzystanie z interfejsu API WebDriver, musisz zaimportować co najmniej te dwa pakiety.
  • org.openqa.selenium. *
  • org.openqa.selenium.firefox.FirefoxDriver
  • Metoda get () jest odpowiednikiem polecenia „open” w środowisku Selenium IDE.
  • Lokalizowanie elementów w WebDriver odbywa się za pomocą metody findElement () .
  • Poniżej przedstawiono dostępne opcje lokalizowania elementów w programie WebDriver:
  • Przez. Nazwa klasy
  • Przez. cssSelector
  • Przez. ID
  • Przez. tekst linku
  • Przez. Nazwa
  • Przez. częścioweLinkText
  • Przez. Nazwa znacznika
  • Przez. xpath
  • By.cssSelector () nie obsługuje funkcji „zawiera” .
  • Możesz utworzyć wystąpienie elementu przy użyciu klasy WebElement .
  • Kliknięcie elementu odbywa się za pomocą metody click () .
  • WebDriver udostępnia następujące przydatne polecenia pobierania :
  • otrzymać()
  • getTitle ()
  • getPageSource ()
  • getCurrentUrl ()
  • getText ()
  • WebDriver udostępnia te przydatne polecenia nawigacyjne
  • navigate (). forward ()
  • navigate (). back ()
  • nawigować do()
  • navigate (). refresh ()
  • Metody close () i quit () służą do zamykania okien przeglądarki. Close () służy do zamykania pojedynczego okna; while quit () służy do zamykania wszystkich okien skojarzonych z oknem nadrzędnym, które kontrolował obiekt WebDriver.
  • Metody switchTo (). Frame () i switchTo (). Alert () są używane do kierowania fokusu WebDriver odpowiednio na ramkę lub alert.
  • Niejawne oczekiwania są używane do ustawiania czasu oczekiwania w całym programie, podczas gdy jawne oczekiwania są używane tylko w określonych częściach.
  • Podczas weryfikacji stanu elementu można użyć isEnabled (), isDisplayed (), isSelected () oraz kombinacji metod WebDriverWait i ExpectedConditions . Jednak nie sprawdzają, czy element nie istnieje.
  • Gdy isEnabled (), isDisplayed () lub isSelected () zostało wywołane, gdy element nie istniał, WebDriver zgłosi NoSuchElementException .
  • Gdy metody WebDriverWait i ExpectedConditions zostały wywołane, gdy element nie istniał, WebDriver zgłosiłby wyjątek TimeoutException .

Uwaga:

driver.get (): Służy do przechodzenia do konkretnej witryny, ale nie obsługuje historii przeglądarki ani plików cookie, więc nie możemy użyć przycisku do przodu i do tyłu, jeśli to klikniemy, strona nie otrzyma harmonogramu

driver.navigate (): służy do przechodzenia do konkretnej witryny, ale zachowuje historię przeglądarki i pliki cookie, dzięki czemu możemy używać przycisków do przodu i do tyłu, aby poruszać się między stronami podczas kodowania Testcase