tytuł oryginału: selenium testing tools cookbook, second ... · pdf fileautomatyzowanie...
TRANSCRIPT
Tytuł oryginału: Selenium Testing Tools Cookbook, Second Edition
Tłumaczenie: Radosław Meryk
ISBN: 978-83-283-3411-3
Copyright © Packt Publishing 2015
First published in the English language under the title 'Selenium Testing Tools Cookbook - Second Edition - (9781784392512)'
Polish edition copyright © 2017 by Helion SAAll rights reserved.
All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from the Publisher.
Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji.
Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli.
Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce.
Wydawnictwo HELIONul. Kościuszki 1c, 44-100 GLIWICEtel. 32 231 22 19, 32 230 98 63e-mail: [email protected]: http://helion.pl (księgarnia internetowa, katalog książek)
Drogi Czytelniku!Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/seler2Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.
Printed in Poland.
• Kup książkę• Poleć książkę • Oceń książkę
• Księgarnia internetowa• Lubię to! » Nasza społeczność
Spis tre ci
O autorze 7
O recenzentach 9
Przedmowa 11
Rozdzia 1. Od czego zacz ? 17
Wprowadzenie 17Konfigurowanie rodowiska tworzenia testów Selenium WebDriver
dla j zyka Java z Eclipse i Maven 18Wykorzystanie narz dzia Ant do egzekucji testów Selenium WebDriver 26Konfigurowanie programu Microsoft Visual Studio
do tworzenia testów Selenium WebDriver 29Konfigurowanie frameworka Selenium WebDriver dla Pythona i Ruby 32Konfiguracja programu Internet Explorer Driver Server 36Konfiguracja sterownika ChromeDriver przegl darki Google Chrome 40Konfiguracja sterownika Microsoft WebDriver dla przegl darki Microsoft Edge 43
Rozdzia 2. Wyszukiwanie elementów 47
Wprowadzenie 47Wykorzystywanie narz dzi przegl darki do badania elementów i struktury strony 48Wyszukiwanie elementu za pomoc metody findElement 54Wyszukiwanie wielu elementów za pomoc metody findElements 59Wyszukiwanie linków 60Wyszukiwanie elementów na podstawie nazwy znacznika 61Wyszukiwanie elementów z wykorzystaniem XPath 62Wyszukiwanie elementów na podstawie selektorów CSS 70Lokalizowanie elementów na podstawie tekstu 74Wyszukiwanie elementów na podstawie zaawansowanych selektorów CSS 76Wykorzystanie selektorów jQuery 78
Poleć książkęKup książkę
Spis tre ci
4
Rozdzia 3. Obs uga elementów HTML 81
Wprowadzenie 81Automatyzowanie pól tekstowych, obszarów tekstowych i przycisków 82Sprawdzanie tekstu elementu 84Sprawdzanie atrybutów elementu i warto ci CSS 86Automatyzowanie rozwijanych menu i list 87Zaznaczanie opcji w elementach Select 90Zaznaczanie wybranych opcji na rozwijanych menu i listach 92Automatyzacja prze czników i grup opcji 95Automatyzowanie pól wyboru 97Praca z obiektami WebTable 99
Rozdzia 4. Korzystanie z Selenium API 101
Wprowadzenie 101Sprawdzanie istnienia elementu 102Sprawdzanie stanu elementu 103Wykorzystanie API Advanced User Interactions do obs ugi zdarze myszy i klawiatury 104Wykonywanie dwukrotnych klikni elementów 106Wykonywanie operacji „przeci gnij i upu ” 108Obs uga menu kontekstowych 109Wykonywanie kodu JavaScript 111Przechwytywanie zrzutów ekranu za pomoc Selenium WebDriver 113Maksymalizowanie okna przegl darki 115Obs uga plików cookie sesji 115Korzystanie z mechanizmów nawigacji przegl darki 117Korzystanie ze zdarze frameworka WebDriver 118
Rozdzia 5. Synchronizacja testów 123
Wprowadzenie 123Synchronizacja testów z niejawnym oczekiwaniem 124Synchronizacja testów z jawnym oczekiwaniem 125Synchronizacja testów z niestandardowymi warunkami oczekiwanymi 127Synchronizacja testów z wykorzystaniem klasy FluentWait 130
Rozdzia 6. Alerty, ramki i okna 133
Wprowadzenie 133Obs uga prostych okien alertów JavaScript 133Obs uga okien confirm i prompt 136Identyfikowanie i obs uga ramek 139Ramki iframe 144Identyfikowanie i obs uga okien potomnych 146Identyfikowanie i obs uga okien na podstawie tytu u 148Identyfikowanie i obs uga wyskakuj cych okien na podstawie zawarto ci 150
Poleć książkęKup książkę
Spis tre ci
5
Rozdzia 7. Testowanie sterowane danymi 153
Wprowadzenie 153Tworzenie testów sterowanych danymi z wykorzystaniem JUnit 155Tworzenie testów sterowanych danymi z wykorzystaniem frameworka TestNG 159Odczytywanie danych testowych z pliku CSV z wykorzystaniem JUnit 161Odczytywanie danych testowych z pliku Excela z wykorzystaniem JUnit i Apache POI 164Tworzenie testów sterowanych danymi z wykorzystaniem NUnit 167Tworzenie testów sterowanych danymi z wykorzystaniem MSTEST 171Tworzenie testów sterowanych danymi w Ruby z wykorzystaniem Roo 175Tworzenie testów sterowanych danymi w Pythonie z wykorzystaniem DDT 179
Rozdzia 8. Korzystanie ze wzorca Page Object 181
Wprowadzenie 181Korzystanie z klasy PageFactory do udost pniania elementów na stronie 182Korzystanie z klasy PageFactory do udost pniania operacji na stronie 186Korzystanie z klasy LoadableComponent 189Implementacja zagnie d onych egzemplarzy klasy Page Object 192Implementacja modelu Page Object w rodowisku .NET 197Implementacja modelu Page Object w Pythonie 200Implementacja modelu Page Object w Ruby z wykorzystaniem gemu page-object 203
Rozdzia 9. Rozszerzanie Selenium 205
Wprowadzenie 205Tworzenie klas rozszerze dla tabel webowych 206Tworzenie rozszerzenia dla wid etu tab biblioteki jQueryUI 210Implementacja rozszerzenia klasy WebElement
w celu ustawiania warto ci atrybutów elementów 214Implementacja rozszerzenia interfejsu WebElement w celu wyró niania elementów 216Utworzenie mapy obiektów dla testów Selenium 217Przechwytywanie zrzutów ekranu elementów w Selenium WebDriver 223Porównywanie obrazów w Selenium 224Mierzenie wydajno ci z wykorzystaniem API Navigation Timing 229
Rozdzia 10. Testowanie aplikacji webowych HTML5 233
Wprowadzenie 233Automatyzowanie odtwarzacza wideo HTML5 234Automatyzowanie interakcji z elementem HTML5 canvas 237Web storage — testowanie lokalnego magazynu 239Web storage — testowanie pami ci sesji 241Czyszczenie magazynu lokalnego i magazynu sesji 243
Poleć książkęKup książkę
Spis tre ci
6
Rozdzia 11. BDD — tworzenie oprogramowania sterowane zachowaniami 245
Wprowadzenie 245Wykorzystanie technik BDD w Javie za pomoc biblioteki Cucumber-JVM
i frameworka Selenium WebDriver 246Wykorzystanie technik BDD w rodowisku .NET za pomoc biblioteki SpecFlow.NET
i frameworka Selenium WebDriver 255Wykorzystanie biblioteki Capybara, Cucumber i frameworka Selenium WebDriver w Ruby 264Wykorzystanie biblioteki Behave i frameworka Selenium WebDriver w Pythonie 267
Rozdzia 12. Integracja z innymi narz dziami 271
Wprowadzenie 271Konfigurowanie systemu ci g ej integracji Jenkins 272Wykorzystanie systemów Jenkins i Maven do egzekucji testów Selenium WebDriver
w rodowisku ci g ej integracji 274Wykorzystanie systemu Ant do uruchamiania testów Selenium WebDriver 279Wykorzystanie systemów Jenkins i Ant do uruchamiania testów Selenium WebDriver
w rodowisku ci g ej integracji 281Automatyzacja aplikacji z niewebowymi interfejsami u ytkownika
z wykorzystaniem Selenium WebDriver oraz AutoIt 286Automatyzacja aplikacji z niewebowymi interfejsami u ytkownika
z wykorzystaniem Selenium WebDriver oraz Sikuli 293
Rozdzia 13. Testy dla wielu przegl darek 297
Wprowadzenie 297Konfigurowanie programu Selenium Grid Server do pracy
w trybie równoleg ego uruchamiania testów 299Dodawanie w z ów do siatki Selenium Grid w celu testowania ró nych przegl darek 301Tworzenie i wykonywanie skryptu Selenium równolegle z TestNG 304Tworzenie i równoleg e wykonywanie skryptu Selenium z wykorzystaniem j zyka Python 310Wykorzystanie narz dzi w chmurze do testowania ró nych przegl darek
i uruchamiania testów w chmurze 313Uruchamianie testów w trybie headless z wykorzystaniem PhantomJS 316
Rozdzia 14. Testowanie aplikacji w przegl darkach mobilnych 319
Wprowadzenie 319Konfigurowanie Appium do testowania aplikacji mobilnych 320Testowanie mobilnych aplikacji webowych w systemie iOS z wykorzystaniem Appium 322Testowanie mobilnych aplikacji webowych w systemie Android
z wykorzystaniem Appium 325
Skorowidz 331
Poleć książkęKup książkę
4
Korzystaniez Selenium API
Oto zagadnienia, jakie zostan omówione w tym rozdziale. Sprawdzanie istnienia elementu. Sprawdzanie stanu elementu. Wykorzystanie API zaawansowanych interakcji u ytkownika (ang. Advanced User
Interactions) do obs ugi zdarze myszy i klawiatury. Wykonywanie podwójnych klikni elementu. Wykonywanie operacji „przeci gnij i upu ”. Obs uga menu kontekstowych. Wykonywanie kodu JavaScript. Przechwytywanie zrzutów ekranu za pomoc Selenium WebDriver. Maksymalizowanie okna przegl darki. Obs uga plików cookie sesji. Obs uga mechanizmów nawigacji przegl darki. Korzystanie ze zdarze klasy WebDriver.
WprowadzenieSelenium WebDriver implementuje kompleksowe API do pracy z elementami webowymi, któreumo liwia wykonywanie zaawansowanych interakcji z u ytkownikiem, takich jak z o onezdarzenia zwi zane z mysz i klawiatur , wykonywanie kodu JavaScript, przechwytywaniezrzutów ekranu i tak dalej.
Poleć książkęKup książkę
Selenium i testowanie aplikacji. Receptury
102
W tym rozdziale omówi sposób wykorzystania tych w asno ci do budowania kroków testówo ró nym poziomie z o ono ci. Lektura rozdzia u pomo e równie w przezwyci eniu niektórychtypowych problemów, które mog powstawa podczas tworzenia testów bazuj cych na framewor-ku Selenium WebDriver.
Sprawdzanie istnienia elementuSelenium WebDriver nie implementuje metody Selenium RC isElementPresent(), którasprawdza, czy element istnieje na stronie. Metoda jest przydatna do budowania niezawodnegotestu, który móg by sprawdzi istnienie elementu przed wykonaniem na nim jakiegokolwiekdzia ania.
W tej recepturze napisz metod podobn do metody isElementPresent().
Jak to zrobi ?Aby zaimplementowa metod isElementPresent(), wykonaj nast puj ce czynno ci.
1. Utwórz metod isElementPresent() w module dost pnym do testów i umiew niej nast puj cy kod.
{{Private boolean isElementPresent(By by) try { driver.findElement(by); return true; } catch {} (NoSuchElementException e) return false; }}
2. Teraz utwórz kod testu, który wywo uje metod isElementPresent(). Metoda b dziesprawdza , czy dany element istnieje na stronie. Je li b dzie znaleziony, zostaniewykonane klikni cie elementu, w przeciwnym razie test nie przejdzie. Mo na to zrobiw nast puj cy sposób.
@TestPublic void testIsElementPresent() {} // Sprawdzenie, czy element spe niaj cy kryteria lokalizatora istnieje na stronie if (isElementPresent(By.name("airbags"))) { // Utwórz reprezentacj pola wyboru i zaznacz je WebElement airbag = driver.findElement(By.name("airbags")); if (!airbag.isSelected()) { airbag.click(); } } else { fail("Pole wyboru poduszki powietrznej nie istnieje!!"); }}
Poleć książkęKup książkę
Rozdzia 4. • Korzystanie z Selenium API
103
Jak to dzia a?Metoda isElementPresent() pobiera argument lokalizatora z wykorzystaniem egzemplarza klasy By.Nast pnie wywo uje metod findElement(). Je li element nie zostanie znaleziony, b dzie zg oszo-ny wyj tek NoSuchElementException. Dzi ki u yciu bloku try i catch metoda isElementPresent()zwróci true, gdy element zostanie znaleziony. W tym przypadku nie zostanie zg oszony wyj tek.W przeciwnym razie zwróci false, a metoda findElement() zg osi wyj tek NoSuchElementException.
Zobacz te Receptura „Sprawdzanie stanu elementu”.
Sprawdzanie stanu elementuWielokrotnie zdarza si , e próba klikni cia elementu lub wprowadzenia tekstu w polu zawodzize wzgl du na to, e element jest wy czony lub istnieje w modelu DOM, ale jest ukryty nastronie. To powoduje zg oszenie b du i niepowodzenie testu. Zbudowanie wiarygodnych testów,które mo na uruchomi w trybie nienadzorowanym, wymaga utworzenia w przep ywie testówsolidnego mechanizmu obs ugi b dów i wyj tków.
Powstaj ce problemy mo na obs u y , sprawdzaj c stan elementów. Interfejs WebElementudost pnia nast puj ce metody sprawdzania stanu elementu.
Metoda Przeznaczenie
isEnabled() Metoda sprawdza, czy element jest aktywny. Zwraca true, je li jest aktywny, i false w przypadkuprzeciwnym.
isSelected() Metoda sprawdza, czy element (prze cznik, pole wyboru i tak dalej) jest zaznaczony. Zwracatrue, je li jest zaznaczony, i false w przypadku przeciwnym.
isDisplayed() Metoda sprawdza, czy element jest wy wietlany.
W tej recepturze zastosuj niektóre z wymienionych metod w celu sprawdzenia stanu elementówi obs ugi b dów, je li to mo liwe.
Jak to zrobi ?Utworzymy test, w ramach którego sprawdzimy, czy na stronie zosta o zaznaczone pole wyboruw czaj ce reflektor LED. To pole wyboru b dzie w czone lub wy czone, w zale no ci od wcze-niej wybranych opcji. Przed zaznaczeniem tego pola wyboru upewnimy si , czy jest ono
aktywne. Mo na to zrobi w nast puj cy sposób.
Poleć książkęKup książkę
Selenium i testowanie aplikacji. Receptury
104
@TestPublic void testElementIsEnabled() {} // Utworzenie reprezentacji pola wyboru w postaci obiektu WebElement z wykorzystaniem atrybutu name WebElement ledheadlamp = driver.findElement(By.name("ledheadlamp")); // Sprawdzenie, czy element jest aktywny przed jego zaznaczeniem if (ledheadlamp.isEnabled()) { // Sprawdzenie, czy pole wyboru ju jest zaznaczone. W przeciwnym razie zaznaczenie go if (!ledheadlamp.isSelected()) { ledheadlamp.click(); } } else { fail("Pole wyboru reflektora LED jest nieaktywne!!"); }}
Jak to dzia a?Zaznaczamy pole wyboru, sprawdzaj c dwa stany elementu; po pierwsze, czy pole to jest aktywne,i po drugie, czy ju nie jest zaznaczone. Do tego celu mo emy u y funkcji isEnabled()interfejsu WebElement, która zwraca true, je li element jest aktywny, lub false, gdy jest nieaktyw-ny. Je li pole wyboru jest nieaktywne, test zako czy si niepowodzeniem. Kiedy nie sprawdzi-my tego warunku, test prawdopodobnie zg osi wyj tek informuj cy o tym, e obiekt jest nieak-tywny, tak jak pokazano poni ej.
// Sprawdzenie, czy element jest aktywny przed jego zaznaczeniemif (ledheadlamp.isEnabled()) { // Sprawdzenie, czy pole wyboru jest ju zaznaczone. W przeciwnym razie zaznaczenie pola wyboru if (!ledheadlamp.isSelected()) { ledheadlamp.click(); }} else { fail("Pole wyboru reflektora LED jest nieaktywne!!");}
Wykorzystanie API Advanced UserInteractions do obs ugi zdarzemyszy i klawiaturyAPI Advanced User Interactions frameworka Selenium WebDriver pozwala wykonywa zarównoproste, jak i z o one operacje obs ugi zdarze klawiatury i myszy. Klasa Actions udost pniatak z o one operacje jak „przeci gnij i upu ”, czy przytrzymanie klawisza, a nast pnie wykonanieoperacji mysz . API umo liwia tak e budowanie z o onych a cuchów zdarze imituj cychdzia ania r cznie wykonywane przez u ytkownika.
Poleć książkęKup książkę
Rozdzia 4. • Korzystanie z Selenium API
105
W celu utworzenia z o onych dzia a obejmuj cych grup innych dzia a klasa Actions imple-mentuje wzorzec „budowniczy”.
W tej recepturze u yj klasy Actions do utworzenia a cucha zdarze wymaganych do zaznacze-nia wierszy w tabeli.
Jak to zrobi ?Utwórzmy test, który zaznacza wiele wierszy z ró nych pozycji w tabeli za pomoc klawisza Ctrl(w komputerach Mac Command). Mo emy wybra wiele wierszy: zaznaczamy pierwszy wiersz,przytrzymujemy klawisz Ctrl (Command na komputerach Mac), a nast pnie wybieramy innywiersz i zwalniamy klawisz Ctrl (Command). Takie dzia anie spowoduje zaznaczenie danychwierszy z tabeli, tak jak pokazano w poni szym fragmencie kodu.
@Testpublic void testRowSelectionUsingControlKey() {
List<WebElement> tableRows = driver.findElements (By.xpath("//table[@class='iceDatTbl']/tbody/tr"));
// Zaznacz drugi i czwarty wiersz w tabeli za pomoc klawisza Control. //Wiersze rozpoczynaj si od indeksu 0 Actions builder = new Actions(driver); builder.click(tableRows.get(1)) .keyDown(Keys.CONTROL) .click(tableRows.get(3)) .keyUp(Keys.CONTROL) .build().perform();
// Sprawdzenie, czy w tabeli s zaznaczone dwa wierszeList<WebElement> rows = driver.findElements (By.xpath("//div[@class='icePnlGrp exampleBox']/table[@class='iceDatTbl']/tbody/tr"));assertEquals(2,rows.size());}
W komputerach z systemem Mac OS X nale y u y sk adni klawisza Command zamiast sk adni klawiszaControl. Oto przyk ad.
Actions builder = new Actions(driver);builder.click(tableRows.get(1)).keyDown(Keys.COMMAND) click(tableRows.get(3)).keyUp(Keys.COMMAND).perform();}
Jak to dzia a?Nale y utworzy egzemplarz klasy Actions, przekazuj c do konstruktora egzemplarz klasy driverw nast puj cy sposób.
Actions builder = new Actions(driver);
Poleć książkęKup książkę
Selenium i testowanie aplikacji. Receptury
106
Zbudujemy a cuch zdarze , które nale y wykona , aby zaznaczy wiersze. B dzie to wymaga owykonania operacji click() na pierwszym wierszu, nast pnie przytrzymania klawisza Ctrl(Command w systemie Mac) przy u yciu operacji keyDown(), klikni cia wiersza ko cowego, a na-st pnie zwolnienia klawisza Ctrl (Command) przez wywo anie keyUp(). Klasa Actions oferujeró ne metody do wykonywania operacji z klawiatur i mysz .
Actions builder = new Actions(driver);builder.click(tableRows.get(1)).keyDown(Keys.CONTROL) .click(tableRows.get(3)).keyUp(Keys.CONTROL) .build().perform();
Mo emy utworzy z o one dzia ania, które wykonamy przy u yciu wywo ania metody perform()klasy Actions.
Klasa Keys reprezentuje wszystkie nietekstowe klawisze na klawiaturze, na przyk ad klawisz Ctrl,klawisz Shift, klawisze funkcyjne i tak dalej. W poprzednim przyk adzie u yli my wywo aniakeyDown(Keys.CONTROL) w celu naci ni cia i przytrzymania klawisza Ctrl (Command) a do zako -czenia nast pnej operacji.
Dzia ania mog nie uruchamia si poprawnie w przypadku elementów, które nie s widoczne lub snieaktywne. Przed u yciem opisanych zdarze nale y zadba o to, aby elementy by y widoczne i aktywne.
Zobacz te Receptura „Wykonywanie dwukrotnych klikni elementów”.
Wykonywanie dwukrotnych kliknielementówW aplikacjach webowych s elementy, które do wykonania niektórych czynno ci wymagajdwukrotnych klikni . Przyk adowo dwukrotne klikni cie wiersza tabeli powoduje wy wietlenienowego okna. API Advanced User Interaction dostarcza metod umo liwiaj c wykonywaniedwukrotnych klikni .
W tej recepturze do wykonywania operacji dwukrotnego klikni cia u yj klasy Actions.
Jak to zrobi ?Utwórzmy test lokalizuj cy element, dla którego zaimplementowano zdarzenie dwukrotnegoklikni cia. Dwukrotne klikni cie tego elementu spowoduje zmian jego koloru.
Poleć książkęKup książkę
Rozdzia 4. • Korzystanie z Selenium API
107
package com.secookbook.examples.chapter04;
import org.openqa.selenium.WebDriver;import org.openqa.selenium.chrome.ChromeDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.By;import org.openqa.selenium.interactions.Actions;import static org.junit.Assert.*;import org.junit.Test;
public class DoubleClickTest { @Test public void testDoubleClick() throws Exception { WebDriver driver = new ChromeDriver(); driver.get("http://cookbook.seleniumacademy.com/DoubleClickDemo.html");
try { WebElement message = driver.findElement(By.id("message"));
// Sprawdzenie, czy element jest niebieskiego koloru assertEquals("rgba(0, 0, 255, 1)", message. getCssValue("background-color"));
Actions builder = new Actions(driver); builder.doubleClick(message).perform();
// Sprawdzenie, czy element jest ó tego koloru assertEquals("rgba(255, 255, 0, 1)", message. getCssValue("background-color")); } finally { driver.quit(); } }}
Jak to dzia a?Aby wykona dwukrotne klikni cie elementu, nale y wywo a metod doubleClick() klasyActions. W celu wywo ania tej metody trzeba utworzy egzemplarz klasy Actions, tak jak poka-zano poni ej.
Actions builder = new Actions(driver);
Metoda doubleClick() wymaga elementu, na którym zostanie zainicjowane zdarzenie dwukrotnegoklikni cia. Metod doubleClick() mo na wywo a , przekazuj c element w nast puj cy sposób.
builder.doubleClick(message).perform();
Poleć książkęKup książkę
Selenium i testowanie aplikacji. Receptury
108
Zobacz te Receptura „Wykorzystanie API Advanced User Interactions do obs ugi zdarze
myszy i klawiatury”, Receptura „Wykonywanie operacji «przeci gnij i upu »”.
Wykonywanie operacji „przeci gnij i upu ”Selenium WebDriver, za po rednictwem klasy Actions, implementuje polecenie Selenium RCdragAndDrop. Klasa Actions, jak pokazywa em we wcze niejszych recepturach, obs uguje zaawan-sowane interakcje u ytkownika, takie jak wyzwalanie zdarze myszy i klawiatury. Za po rednic-twem tej klasy mo na budowa proste lub z o one a cuchy zdarze .
W tej recepturze wykorzystam klas Actions do wykonywania operacji „przeci gnij i upu ”.
Jak to zrobi ?Zaimplementujemy test, który za pomoc klasy Actions wykona na stronie operacj „przeci gniji upu ”.
@TestPublic void testDragDrop() {} Driver.get ("http://cookbook.seleniumacademy.com/DragDropDemo.html");
WebElement source = driver.findElement(By.id("draggable")); WebElement target = driver.findElement(By.id("droppable"));
Actions builder = new Actions(driver); builder.dragAndDrop(source, target) .perform(); assertEquals("Upuszczono!", target.getText());}
Jak to dzia a?Aby przeci gn element na inny element i go na nim upu ci , trzeba zlokalizowa oba elementyi przekaza je do metody dragAndDrop() klasy Actions. eby wywo a t metod , nale y utworzyegzemplarz klasy Actions w nast puj cy sposób.
Actions builder = new Actions(driver);
Metoda dragAndDrop() wymaga elementu ród owego oraz elementu docelowego, na któryelement ród owy zostanie przeci gni ty i upuszczony. Metod dragAndDrop() mo na wywo aw nast puj cy sposób.
builder.dragAndDrop(source, target).perform();
Poleć książkęKup książkę
Rozdzia 4. • Korzystanie z Selenium API
109
W czasie powstawania tej ksi ki framework Selenium WebDriver nie obs ugiwa operacji „przeci gnij i upu ”dla HTML5. Wi cej informacji na ten temat mo na znale pod adresem https://code.google.com/p/selenium/issues/detail?id=3604. Istnieje obej cie umo liwiaj ce symulacj w asno ci „przeci gnij i upu ”w aplikacjach webowych bazuj cych na HTML5. Wi cej szczegó ów na ten temat mo na znale podadresem https://gist.github.com/rcorreia/2362544.
Zobacz te Receptura „Wykorzystanie API Advanced User Interactions do obs ugi zdarze
myszy i klawiatury”, Receptura „Wykonywanie dwukrotnych klikni elementów”.
Obs uga menu kontekstowychMenu kontekstowe (znane tak e jako menu skrótów, wyskakuj ce menu lub menu podr czne)to lista polece wy wietlanych na stronie WWW w odpowiedzi na klikni cie elementu prawymprzyciskiem myszy. Przyk adowo pod adresem http://bit.ly/1CAV05I zamieszczono kod korzystaj -cy z wtyczki jQuery contextMenu, który wy wietla menu edycji, gdy u ytkownik kliknie przyciskprawym przyciskiem myszy.
Klasa Actions frameworka Selenium WebDriver dostarcza metod contextClick(), która po-zwala wykona operacj klikni cia prawym przyciskiem myszy. W tej recepturze poka ,w jaki sposób zautomatyzowa interakcje z menu kontekstowymi.
Jak to zrobi ?Spróbujmy zaimplementowa test, który otworzy menu kontekstowe i, korzystaj c z klasy Actions,wybierze jedn z opcji.
@TestPublic void testContextMenu() {} WebElement clickMeElement = driver.findElement (By.cssSelector ("div.context-menuone.Box.menu-1 ")); WebElement editMenuItem = driver.findElement (By.cssSelector ("li.context-menuitem.icon-edit"));
Actions builder = new Actions(driver); builder.contextClick(clickMeElement) .moveToElement(editMenuItem) .Click() .perform();
WebDriverWait wait = new WebDriverWait(driver, 10);
Poleć książkęKup książkę
Selenium i testowanie aplikacji. Receptury
110
Alert alert = wait.until(ExpectedConditions.alertIsPresent()); assertEquals("clicked: edit", alert.getText()); alert.dismiss();}
Jak to dzia a?Do otwarcia menu kontekstowego w odpowiedzi na klikni cie prawym przyciskiem myszys u y metoda contextClick() klasy Actions. Poni szy kod wykonuje klikni cie prawym przyci-skiem myszy podanego elementu.
WebElement clickMeElement = driver.findElement(By.cssSelector("div.context-menuone.box.menu-1")); WebElement editMenuItem = driver.findElement(By.cssSelector("li.context-menuitem.icon-edit"));
Actions builder = new Actions(driver); builder.contextClick(clickMeElement) .moveToElement(editMenuItem) .click()
.perform();
Nast pnie mo na przej do danego elementu — w tym przypadku jest nim element <li>, któryreprezentuje jedn z opcji menu. Aby wykona akcj menu, wywo ywana jest metoda click().W tym przyk adzie wywo anie metody click() powoduje wy wietlenie alertu, a test sprawdzakomunikat w oknie alertu.
Co dalej?W poprzednim przyk adzie test wyszukuje pozycj menu, a nast pnie wykonuje operacj klikni -cia. Czasami w menu s dost pne klawisze skrótów. Za po rednictwem klasy Actions mo nawykorzysta kombinacj zdarze myszy i naci ni klawiszy w celu otwarcia danej opcji menu.Przyk adowo klawiszem skrótu dla pozycji menu Edit jest „e”. Mo emy otworzy menu kontek-stowe, a nast pnie wys a kombinacj klawiszy Alt+E w nast puj cy sposób.
@Testpublic void testContextMenuWithKeys() { WebElement clickMeElement = driver.findElement(By.cssSelector("div.context-menu-one.box.menu-1"));
Actions builder = new Actions(driver); builder.contextClick(clickMeElement) .sendKeys(Keys.chord(Keys.ALT, "e")) .perform();
Poleć książkęKup książkę
Rozdzia 4. • Korzystanie z Selenium API
111
WebDriverWait wait = new WebDriverWait(driver, 10);
Alert alert = wait.until(ExpectedConditions.alertIsPresent()); assertEquals("clicked: edit", alert.getText()); alert.dismiss();}
Zobacz te Receptura „Wykorzystanie API Advanced User Interactions do obs ugi zdarze
myszy i klawiatury”.
Wykonywanie kodu JavaScriptAPI Selenium WebDriver zapewnia mo liwo wykonywania w oknie przegl darki koduJavaScript. Jest to bardzo przydatna funkcja, w przypadku gdy testy musz wykonywa operacjena stronie przy u yciu JavaScript. Dzi ki temu API frameworka Selenium WebDriver mo eby wykorzystane równie do testowania kodu JavaScript po stronie klienta. Selenium WebDriveroferuje interfejs JavascriptExecutor, który mo e s u y do uruchamiania dowolnego koduJavaScript w kontek cie przegl darki.
W tej recepturze poka , w jaki sposób u ywa interfejsu JavascriptExecutor do uruchamia-nia kodu JavaScript. W tej ksi ce zamieszczono ró ne receptury, w których wykorzystanointerfejs JavascriptExecutor do wykonywania niektórych zaawansowanych operacji, które nies jeszcze obs ugiwane przez Selenium WebDriver.
Jak to zrobi ?Utwórzmy test, który wywo uje kod JavaScript w celu zwrócenia tytu u i liczby linków (tzn. liczbytagów Anchor). Aby zwróci tytu strony, mo na równie wykorzysta metod driver.getTitle().Poni ej przedstawiono przyk adowy kod takiego dzia ania.
@Testpublic void testJavaScriptCalls() throws Exception { WebDriver driver = new ChromeDriver(); driver.get("http://www.google.com"); try { JavascriptExecutor js = (JavascriptExecutor) driver;
String title = (String) js.executeScript("return document.title"); assertEquals("Google", title);
long links = (Long) js
Poleć książkęKup książkę
Selenium i testowanie aplikacji. Receptury
112
.executeScript("var links = document. getElementsByTagName('A'); return links.length"); assertEquals(42, links); } finally { driver.quit(); }}
Jak to dzia a?Zrzutowanie egzemplarza WebDriver na interfejs JavascriptExecutor pozwala wykona w Sele-nium WebDriver kod JavaScript.
JavascriptExecutor js = (JavascriptExecutor) driver;
W poni szym przyk adzie uruchomiono pojedynczy wiersz kodu JavaScript, który zwracatytu strony wy wietlanej przez sterownik. Interfejs JavascriptExecutor dostarcza metodexecuteScript(), do której nale y przekaza kod JavaScript.
String title = (String) js.executeScript("return document.title");
Podczas zwracania warto ci z kodu JavaScript trzeba u y s owa kluczowego return. Wynik metodyexecuteScript()trzeba zrzutowa na podstawie typu zwróconej warto ci. Dla warto ci dziesi tnychmo na u y typu Double, niedziesi tne warto ci liczbowe wymagaj u ycia typu Long, natomiast dlawarto ci logicznych nale y stosowa typ Boolean. Je li kod JavaScript zwraca element HTML, mo nawykorzysta typ WebElement. Dla warto ci tekstowych nale y skorzysta z typu String. Je li jest zwraca-na lista obiektów, mo na zastosowa dowolny z wymienionych typów, w zale no ci od typu obiektów nali cie. W przeciwnym razie zostanie zwrócona warto null.
W poni szym przyk adzie w celu pobrania liczby linków na stronie uruchomiono wielowierszowykod JavaScript.
long links = (Long) js.executeScript("var links = document.getElementsByTagName('A'); return links.length");
Co dalej?Do kodu JavaScript uruchamianego za pomoc metody executeScript() mog by przekazywa-ne argumenty. W poni szym przyk adzie chcemy ustawi warto elementu. Wewn trz koduJavaScript zostanie wykorzystana specjalna tablica arguments, tak jak pokazano w poni szymkodzie.
js.executeScript("document.getElementByID('name').value = arguments[0]","Jan");
Poleć książkęKup książkę
Rozdzia 4. • Korzystanie z Selenium API
113
Przechwytywanie zrzutów ekranuza pomoc Selenium WebDriverSelenium WebDriver dostarcza interfejs TakesScreenshot, który umo liwia przechwytywaniezrzutów ekranu stron internetowych. Pomaga to podczas uruchamiania testu, poniewa pokazuje,co dok adnie si sta o, gdy zosta zg oszony wyj tek lub wyst pi b d podczas uruchamiania.Mo na równie przechwytywa zrzuty ekranu podczas weryfikacji stanu elementu, warto ciwy wietlanych wewn trz elementów lub stanu po zako czeniu dzia ania.
Przechwytywanie zrzutów ekranu pomaga tak e w weryfikacji takich obszarów jak uk ad stronyczy sposób wyrównania pól, kiedy porównywane s zrzuty ekranu wykonane podczas dzia aniatestów z ilustracjami bazowymi.
W tej recepturze u yj interfejsu TakesScreenshot do wykonania zrzutu ekranu testowanejstrony WWW.
Jak to zrobi ?Utwórzmy test, który otworzy aplikacj testow i wykona zrzut ekranu strony w formacie PNG(ang. Portable Network Graphics), tak jak pokazano w poni szym przyk adowym kodzie.
@Testpublic void testTakesScreenshot() throws Exception { File scrFile = ((TakesScreenshot) driver) .getScreenshotAs(OutputType.FILE); FileUtils.copyFile(scrFile, new File("target/main_page.png"));}
Jak to dzia a?Interfejs TakesScreenshot dostarcza metod getScreenshotAs(), która pozwala przechwycizrzut ekranu strony wy wietlanej wewn trz egzemplarza obiektu driver. W poni szym przyk a-dzie u yli my warto ci OutputType.FILE jako argumentu metody getScreenshotAs(). Dzi ki temuprzechwycony zrzut ekranu zostanie zwrócony w pliku.
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
Obiekt file zwrócony przez metod getScreenshotAs() mo emy zapisa za pomoc metodycopyFile() klasy FileUtils nale cej do klasy org.apache.commons.io.FileUtils.
Interfejs TakesScreenshot wykonuje zrzuty ekranu z wykorzystaniem API przegl darki. Sterownik HtmlUnitnie obs uguje interfejsu TakesScreenshot.
Poleć książkęKup książkę
Selenium i testowanie aplikacji. Receptury
114
Co dalej?Klasa OutputType oferuje wiele sposobów prezentowania wyników wykonania zrzutów ekranuza pomoc metody getScreenshotAs(). W poprzednim przyk adzie widzieli my zrzut ekranuzapisany w pliku. Zrzuty ekranu mog by równie przechwytywane w tekstowym formacieBase64 lub w formacie surowych bajtów. W poni szym przyk adzie wykonano zrzut ekranuw formacie ci gu Base64.
String base64 = ((TakesScreenshot)driver).getScreenshotAs(OutputType.BASE64);
Przechwytywanie zrzutów ekranu w rodowisku RemoteWebDriver(Selenium Grid)Gdy testy s uruchamiane z wykorzystaniem interfejsu RemoteWebDriver lub Selenium Grid,nie mo na wykonywa zrzutów ekranu, poniewa interfejs TakesScreenshot nie jest zaimple-mentowany w klasie RemoteWebDriver.
Mo emy jednak u y klasy Augmenter, która dodaje interfejs TakesScreenshot do egzemplarzaRemoteWebDriver, tak jak pokazano w poni szym przyk adzie kodu.
driver = new Augmenter().augment(driver);File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);FileUtils.copyFile(scrFile, new File("c:\\tmp\\screenshot.png"));
Klasa Augmenter ulepsza klas RemoteWebDriver poprzez dodanie do niej ró nych interfejsów,w tym interfejsu TakesScreenshot.
driver = new Augmenter().augment(driver);
Po wykonaniu takiego rozszerzenia mo emy u y interfejsu TakesScreenshot z klasy RemoteWebDriverdo przechwytywania ekranu.
Zobacz te Receptura „Przechwytywanie zrzutów ekranu elementów w Selenium WebDriver”
w rozdziale 9., „Rozszerzanie Selenium”. Receptura „Porównywanie obrazów w Selenium” w rozdziale 9., „Rozszerzanie
Selenium”.
Poleć książkęKup książkę
Rozdzia 4. • Korzystanie z Selenium API
115
Maksymalizowanie okna przegl darkiW Selenium WebDriver brakowa o polecenia windowMaximize() z API Selenium RC. Jednak eod wersji 2.21 Selenium WebDriver obs uguje maksymalizowanie okna przegl darki.
W tej krótkiej recepturze poka , jak zmaksymalizowa okno przegl darki.
Przygotuj siUtwórz nowy test, który zbuduje egzemplarz WebDriver, przejdzie do witryny i wykona kilkapodstawowych dzia a i weryfikacji.
Jak to zrobi ?Aby zmaksymalizowa okno przegl darki, trzeba wywo a metod maximize() interfejsu Windowklasy driver. Dodaj drugi wiersz kodu z poni szego fragmentu, ten za instrukcj definiuj cegzemplarz klasy FirefoxDriver.
driver = new FirefoxDriver();driver.manage().window().maximize();
Obs uga plików cookie sesjiW witrynach internetowych u ywane s pliki cookie do przechowywania preferencji u ytkow-nika, informacji o logowaniu oraz ró nych innych szczegó ów dotycz cych klienta. SeleniumWebDriver API zapewnia ró ne metody zarz dzania plikami cookie podczas testowania. Za po-moc tych metod mo emy odczytywa warto ci plików cookie, dodawa pliki cookie oraz usuwatakie pliki podczas testowania. Mo e to s u y do testowania reakcji aplikacji podczas wykonywa-nia dzia a z plikami cookie. Interfejs WebDriver.Options udost pnia nast puj ce metody zarz -dzania plikami cookie.
Metoda Opis
addCookie(Cookie cookie) Dodaje plik cookie.getCookieNamed(String name) Zwraca plik cookie o podanej nazwie.getCookies() Zwraca wszystkie pliki cookie dla bie cej domeny.deleteCookieNamed(String name) Usuwa plik cookie o podanej nazwie.deleteCookie(Cookie cookie) Usuwa plik cookie.deleteAllCookies() Usuwa wszystkie pliki cookie dla bie cej domeny.
W tej recepturze poka , jak odczytywa pliki cookie i sprawdza ich warto .
Poleć książkęKup książkę
Selenium i testowanie aplikacji. Receptury
116
Przygotuj siUtwórz nowy test, który zbuduje egzemplarz WebDriver, przejdzie do witryny i wykona kilkapodstawowych dzia a i weryfikacji.
Jak to zrobi ?Utwórzmy test, który odczytuje plik cookie i sprawdza jego warto , tak jak pokazano w poni -szym przyk adzie kodu.
@TestPublic void testCookies() {} Driver.get ("http://demo.magentocommerce.com/");
// Utworzenie reprezentacji rozwijanego menu wyboru j zyka w postaci egzemplarza klasy Select Select language = new Select(driver.findElement(By .id("select-language")));
// Sprawdzenie, czy domy lnie zaznaczona opcja to j zyk polski assertEquals("Polski", language.getFirstSelectedOption().getText());
// Zmienna storeCookie powinna mie warto null Cookie storeCookie = driver.manage().getCookieNamed("store"); assertEquals(null, storeCookie);
// Zaznacz opcj przy u yciu metody SelectByVisibleText language.selectByVisibleText("English");
// Zmienna storeCookie powinna zawiera informacj o wybranym j zyku storeCookie = driver.manage().getCookieNamed("store"); assertEquals("english", storeCookie.getValue());}
Jak to dzia a?Interfejs WebDriver.Options dostarcza ró ne metody do dodawania, czytania, modyfikowaniai usuwania plików cookie. W tym przyk adzie, gdy zmieniamy j zyk sklepu, do przechowywaniapreferencji j zykowych u ywany jest plik cookie. Ten plik cookie oraz jego warto mo emyodczyta w nast puj cy sposób.
Cookie storeCookie = driver.manage().getCookieNamed("store");assertEquals("english", storeCookie.getValue());
Wywo ali my metod getCookieNamed(), przekazuj c nazw pliku cookie. Metoda zwraca egzem-plarz obiektu Cookie. Obiekt Cookie zawiera ró ne metody czytania warto ci, domeny i tak dalej.
Poleć książkęKup książkę
Rozdzia 4. • Korzystanie z Selenium API
117
Korzystanie z mechanizmów nawigacjiprzegl darkiPrzegl darki zapewniaj wiele metod nawigacji umo liwiaj cych dost p do stron WWW z historiiprzegl darki. Pozwalaj równie na od wie anie bie cej strony za pomoc przyciskówWstecz, Dalej oraz Od wie na pasku narz dzi okna przegl darki. API Selenium WebDriverzapewnia dost p do tych przycisków za pomoc ró nych metod interfejsu WebDriver.Navigation.Przy u yciu tych metod mo emy testowa zachowanie aplikacji.
Metoda Opis
back() Metoda powoduje przej cie do poprzedniej strony w historii przegl darki.forward() Metoda powoduje przej cie do nast pnej strony w historii przegl darki.refresh() Metoda powoduje ponowne za adowanie bie cej strony.to(String url)
to(java.net.URL url)
Metoda aduje podany adres URL w bie cym oknie przegl darki.
W tej recepturze zaprezentuj metody nawigacji w przegl darce.
Przygotuj siUtwórz nowy test, który zbuduje egzemplarz klasy WebDriver, przejdzie do witryny i wykona kilkapodstawowych dzia a i weryfikacji.
Jak to zrobi ?Utwórzmy test, który wywo uje ró ne metody nawigacji i sprawdza zachowanie aplikacji. Jegokod zamieszczono poni ej.
@Testpublic void testNavigation() { driver.get("http://www.google.com");
// Utworzenie reprezentacji pola tekstowego wyszukiwania WebElement searchField = driver.findElement(By.name("q")); searchField.clear();
// Wprowadzenie s owa kluczowego do wyszukiwania i przes anie dania searchField.sendKeys("selenium webdriver"); searchField.submit(); WebElement resultLink = driver.findElement(By.linkText("Selenium WebDriver")); resultLink.click();
Poleć książkęKup książkę
Selenium i testowanie aplikacji. Receptury
118
new WebDriverWait(driver, 10).until(ExpectedConditions .titleIs("Selenium WebDriver"));
assertEquals("Selenium WebDriver", driver.getTitle());
driver.navigate().back();
new WebDriverWait(driver, 10).until(ExpectedConditions .titleIs("selenium webdriver - Szukaj w Google"));
assertEquals("selenium webdriver - Szukaj w Google", driver.getTitle());
driver.navigate().forward();
new WebDriverWait(driver, 10).until(ExpectedConditions .titleIs("Selenium WebDriver"));
assertEquals("Selenium WebDriver", driver.getTitle());
driver.navigate().refresh();
new WebDriverWait(driver, 10).until(ExpectedConditions .titleIs("Selenium WebDriver"));
assertEquals("Selenium WebDriver", driver.getTitle());}
Jak to dzia a?Interfejs WebDriver.Navigation dostarcza metody back() i forward() do adowania stron z historiiprzegl darki. Metody te reprezentuj przyciski Wstecz i Dalej dost pne w dowolnej przegl dar-ce WWW. Mo emy równie od wie y lub ponownie za adowa stron poprzez wywo aniemetody refresh().
Korzystanie ze zdarze frameworkaWebDriverSelenium WebDriver zawiera klas EventFiringWebDriver, która nas uchuje ró nych zdarzezachodz cych podczas wykonywania testu. Przyk adowo zdarzenia s wyzwalane przy wej ciuna stron , gdy zostanie wykonane klikni cie elementu albo kiedy zostanie zmieniona warto .W poni szej tabeli zestawiono list wszystkich zdarze , które mo emy ledzi podczas wykony-wania testu.
Poleć książkęKup książkę
Rozdzia 4. • Korzystanie z Selenium API
119
Zdarzenie Opis
BeforeNavigateTo Metoda jest wywo ywana przed wywo aniem metod get(String url)lub navigate().to(String url).
afterNavigateTo Metoda jest wywo ywana po wywo aniu metod get(String url)lub navigate().to(String url).
beforeNavigateBack Metoda jest wywo ywana przed wywo aniem metody navigate().back().afterNavigateBack Metoda jest wywo ywana po wywo aniu metody navigate().back().beforeNavigateFor Metoda jest wywo ywana przed wywo aniem metody navigate().forward().afterNavigateForward Metoda jest wywo ywana po wywo aniu metody navigate().forward().beforeFindBy Metoda jest wywo ywana przed wywo aniem nast puj cych metod:
WebDriver.findElement(...),
WebDriver.findElements(...),
WebElement.findElement(...),
WebElement.findElements(...).afterFindBy Metoda jest wywo ywana po wywo aniu nast puj cych metod:
WebDriver.findElement(...),
WebDriver.findElements(...),
WebElement.findElement(...),
WebElement.findElements(...).beforeChangeValueOf Metoda jest wywo ywana przed wywo aniem metod WebElement.clear()
lub WebElement.sendKeys(...).afterChangeValueOf Metoda jest wywo ywana po wywo aniu metod WebElement.clear()
lub WebElement.sendKeys(...).beforeClickOn Metoda jest wywo ywana przed wywo aniem metody WebElement.click().afterClickOn Metoda jest wywo ywana po wywo aniu metody WebElement.click().beforeScript Metoda jest wywo ywana przed metod
RemoteWebDriver.executeScript(java.lang.String, java.lang.Object[]).afterScript Metoda jest wywo ywana po metodzie
RemoteWebDriver.executeScript(java.lang.String, java.lang.Object[]).onException Metoda ta jest wywo ywana zawsze wtedy, gdy ma by zg oszony wyj tek.
Wymienionych procedur obs ugi zdarze mo na u y do wykonania dodatkowych polece .Przyk adowo przed wprowadzeniem warto ci w polu tekstowym mo emy wyczy ci istniej cwarto lub przechwyci zrzut ekranu nawet wtedy, gdy WebDriver zg osi wyj tek. Mo na tozrobi , wykonuj c nast puj ce czynno ci.
Utwórz w asn klas nas uchiwania zdarze . Do tej klasy mo esz doda kod,który zostanie uruchomiony po zg oszeniu specyficznych zdarze .
Poleć książkęKup książkę
Selenium i testowanie aplikacji. Receptury
120
Za pomoc egzemplarza WebDriver utwórz egzemplarz klasy EventFiringWebDriver. Zarejestruj klas s uchacza zdarze w egzemplarzu klasy EventFiringWebDriver.
Klas s uchacza zdarze mo na utworzy na dwa sposoby: przez zaimplementowanie interfejsu WebDriverEventListener, przez rozszerzenie klasy AbstractWebDriverEventListener.
W tej recepturze poka , w jaki sposób u ywa klasy EventFiringWebDriver do nas uchiwaniazdarze WebDriver.
Przygotuj siUtwórz nowy test, który zbuduje egzemplarz WebDriver, przejdzie do witryny i wykona kilkapodstawowych dzia a oraz weryfikacji.
Jak to zrobi ?Na pocz tek zdefiniujemy klas nas uchiwania zdarze poprzez zaimplementowanie interfejsuWebDriverEventListener w nast puj cy sposób.
package com.secookbook.examples.chapter04;
import org.openqa.selenium.*;import org.openqa.selenium.support.events.WebDriverEventListener;
public class MyListener implements WebDriverEventListener { public void beforeChangeValueOf(WebElement element, WebDriverdriver) { element.clear(); }}
Nast pnie utworzymy test, który u ywa klasy EventFiringWebDriver.
package com.secookbook.examples.chapter04;
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;import org.openqa.selenium.support.events.EventFiringWebDriver;import org.junit.After;import org.junit.Before;import org.junit.Test;
public class EventFiringTest { private WebDriver driver;
Poleć książkęKup książkę
Rozdzia 4. • Korzystanie z Selenium API
121
@Before public void setUp() throws Exception { driver = new FirefoxDriver(); }
@Test public void testEventFiringWebDriver() throws Exception {
EventFiringWebDriver eventDriver = new EventFiringWebDriver(driver); MyListener myListener = new MyListener(); eventDriver.register(myListener); eventDriver.get("http://bit.ly/1DbdhsW"); eventDriver.findElement(By.id("q")) .sendKeys("Selenium i testowanie aplikacji. Receptury"); }
@After public void tearDown() throws Exception { driver.quit(); }}
Co dalej?Dodajemy do klasy odbiornika zdarze jedn dodatkow procedur obs ugi zdarzenia, któraprzechwytuje zrzut ekranu w momencie zg aszania wyj tku.
public void onException(Throwable exception, WebDriver driver) { try { if(driver.getClass().getName().equals("org.openqa.selenium.remote.RemoteWebDriver")) { driver = new Augmenter().augment(driver); } File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); FileUtils.copyFile(scrFile, newFile("target/screenshots/error.png")); } catch (Exception e) { e.printStackTrace(); }}
Poleć książkęKup książkę
Selenium i testowanie aplikacji. Receptury
122
Poleć książkęKup książkę
Skorowidz
AADB, 326adnotacja
@CacheLookUp, 186@DataProvider, 160@FindBy, 186@Test, 161@When, 253FindsBy, 199
adresdocelowy, 59URL, 47
AJAX, 186, 229alert, 133, 135
confirm, 136JavaScript, 134
Android Debug Bridge, 326Ant, 26, 27, 271, 272, 273, 279,
281konfiguracja, 29, 281
Apache Ant, Patrz: AntApache Maven, Patrz: MavenAPI Advanced User Interactions,
104API Apache POI, 165aplikacja mobilna, 319, 323, 325Appium, 319, 320Apple Instruments, 322argument
–hubHost, 302-role, 302
atrybut, 65class, 57, 61Class, 71DataSource, 174handle, 147, 148, 149id, 56, 57, 61, 71, 140innerText, 75, 85name, 57, 61, 72, 140, 146readonly, 86TestCaseSource, 170textContent, 75, 85title, 148, 150value, 189warto cz ciowa, 73wyszukiwanie, 66, 71, 72
AutoIt, 286, 287, 290, 291
Bbaner, 139BDD, 245, 246
w rodowisku .NET, 255Behave, 246, 267, 269Behavior Driven Development,
Patrz: BDDbiblioteka, 18
Appium, 323Appium Java Client, 325AutoItX, 291jQuery, 78, 80, 129, 210jQuery Mobile, 320kliencka, 33, 34, 36
OpenCSV, 162Pythona, 180SpecFlow.NET, 255, 256unittest, 180
BrowserStack, 313
CCapybara, 246, 264, 265CDN, 80chmura, 297, 313
Sauce Labs, Patrz: Sauce LabsChromeDriver, 40, 42CI, 26Content Delivery Network,
Patrz: CDNCSS, 47, 70Cucumber-JVM, 246, 248, 253,
264konfiguracja, 254
Ddekorator @ddt, 180dokument XML drzewo, 62DOM, 48, 54, 63, 68
korze , Patrz: korzeodpytywanie, 124w ze , Patrz: w ze
drzewo modelu DOM,Patrz: DOM
dziecko, 64
Poleć książkęKup książkę
Skorowidz
332
EEclipse, 18, 25
konfigurowanie z Maven, 19element
canvas, 237checkbox, 97dwukrotne klikni cie, 107form, 83, 84HTML, 206input, 83li, 110nadrz dny, 62potomny, 58, 62przeci gnij i upu , 108select, 88, 206sprawdzanie stanu, 103table, 99td, 99, 209tr, 99, 209video, 234, 236
etykieta tekstowa, 92Excel, 164, 172
FFirebug, 49, 51Firefox, 36, 75
narz dzia programistyczne,49
Flash, 286, 296formularz, 83funkcja, Patrz te : metoda
ControlClick, 290ControlSetText, 290DataProvider, 159normalize-space, 75text, 74UI Automation, 322WinWaitActive, 290XPath, 66
Ggem
Cucumber, 265DeepTest, 299page-object, 203, 204Roo, 175, 178
generator akcji, 239Google Chrome narz dzia
programistyczne, 51Google Docs, 178grupa opcji, 95, 96, 97GUI, 293
Hhistoryjka u ytkownika, 246,
264, 267HTML, 47, 48, 49HTML5, 233, 237, 239
IIDE, 18IntelliJ IDEA, 18interfejs
Alert, 134, 135, 139IWebDriver, 199Java Image, 223JavascriptExecutor, 111,
112jQuery API, 79localStorage, 239Navigation Timing, 230Selenium API, 325sessionStorage, 241, 243TakesScreenshot, 113, 114,
223, 224Timeouts, 125timing, 230u ytkownika, 133
graficzny, Patrz: GUInatywny, 286niewebowy, 293
WebDriver.Navigation, 117WebDriver.Options, 116WebDriver.TargetLocator,
140, 142WebDriverEventListener,
120WebElement, 58, 82, 83, 95,
206, 214, 216Window, 115
Internet Explorer DriverServer, 36, 38
InternetExplorerDriver, 36
JJavaScript, 111, 129Jenkins, 26, 272, 274, 281
Build Trigger, 278kompilacja, 278konfiguracja, 281rodowisko rozproszonegobudowania i testowania,274
wy wietlanie wyników, 278j zyk
Gherkin, 246, 247Python, Patrz: PythonRuby, Patrz: RubyXPath, Patrz: XPath
jQuery, 210jQuery File Upload, 287JUnit, 22, 155, 254
Kklasa
AbstractWebDriverEventListener, 120
Actions, 105, 108, 109Augmenter, 114BufferedReader, 164By, 55, 60, 61, 99
strategia lokalizacji, 55Canvas, 237CompareUtil, 225, 226, 228DataProvider, 159DesiredCapabillities, 301driver, 115EdgeDriver, 43EventFiringWebDriver,
118, 120ExpectedCondition, 127
implementacjaniestandardowa, 128
ExpectedConditions, 125,127, 136
FirefoxDriver, 115FluentWait, 130GoogleSearchTest.java, 23
Poleć książkęKup książkę
Skorowidz
333
InternetExplorerDriver, 39IOSDriver, 325Java, 215JavascriptExecutor, 79, 217,
234, 236, 243JQueryUITab, 210, 212, 213Keys, 106LoadableComponent, 189,
190ObjectMap, 218, 219OutputType, 114PageFactory, 183, 185PhantomJSDriver, 318PixelGrabber, 226Properties, 221RemoteWebDriver, 40, 301RunCukesTest, 254Select, 87, 88, 90, 92, 94,
238SimpleDDT, 157SpreadsheetData, 165, 167uruchamiaj ca, 155WebDriverWait, 125, 126,
136WebElement, 54, 94WebElementExtender, 215,
216, 239WebTable, 209WebTable.java, 206WrapsDriver, 224zagnie d anie, 193
klawiatura, 106klawisz skrótu, 110klucz clickCount, 243kod
HTML, Patrz: HTML kodJavaScript, 111, 112
kombinator rodze stwa, 76koncentrator, 299, 300, 301
Sauce Labs, 315kontrolka, 295
Flash, 286Flex, 286jQuery, 205listy, 88menu, 87Silverlight, 286
korze , 62
kwerenda XPath,Patrz: wyra enie XPath
Llink, 111
adres docelowy, Patrz: adresdocelowy
wyszukiwanie, 60lista
jednokrotnego wyboru, 94rozwijana, 90warto oczekiwana, 92wielokrotnego wyboru, 88,
89, 94
Mmagazyn
lokalny, 241, 243sesji, 241, 243
mapa obiektów, 217, 218bazuj ca na XML, 221
Maven, 18, 25, 26, 271, 272,274, 323
mened er pakietów NuGet,Patrz: NuGet
menu, 90Drawing Tool, 238kontekstowe, 109, 110nawigacji, 139podr czne, Patrz: menu
kontekstowerozwijane, 87, 88, 89, 92, 94
metoda, Patrz te : funkcjaaccept, 136addCookie, 115alert, 134alertIsPresent, 136back, 117, 118captureElementBitmap, 239captureElementPicture, 223,
224clear, 82, 83click, 82, 83, 84, 95, 96, 106CompareImage, 226contextClick, 109, 110copyFile, 113cssSelector, 70, 213
deleteAllCookies, 115deleteCookie, 115deleteCookieNamed, 115deselectByIndex, 90deselectByVisibleText, 89dismiss, 138, 139doubleClick, 107dragAndDrop, 108driver.close, 148driver.getPageSource, 152driver.getTitle, 111driver.getWindowHandles,
149, 150, 151driver.switchTo.alert, 135,
136driver.switchTo.default
Content, 142driver.switchTo.frame, 140,
142, 145driver.switchTo.window, 147executeScript, 112, 236, 243ExpectedConditions.title
Contains, 126find, 79findElement, 54, 56, 58, 103,
125, 128, 145findElements, 54, 58, 59,
100, 213forward, 117, 118get, 119getAllSelectedOptions, 94getAttribute, 85, 86getCellData, 209getCellEditor, 209getCookieNamed, 115, 116getCookies, 115getCSSValue, 86, 87getFirstSelectedOption, 94getLocator, 221GetLocator, 222getOptions, 89, 92getProducts, 197getProperty, 221getScreenshotAs, 113, 114,
224getText, 84, 85, 94, 135, 209Google.new, 178highlightElement, 216, 217highlightElements, 216
Poleć książkęKup książkę
Skorowidz
334
metodaimplicitlyWait, 125initElements, 185, 186InitElements, 199injectjQuery, 80injectjQueryIfNeeded, 80isDisplayed, 103isElementPresent, 102, 103isEnabled, 103, 104isMultiple, 88isSelected, 97, 98, 103jQueryLoaded, 80keyDown, 106keyUp, 106linkText, 60, 61moveByOffset, 239name, 72navigate, 119nth-child, 76partialLinkText, 60, 61pause, 236play, 236przes anianie, 192refresh, 117, 118RemoteWebDriver.execute
Script, 119searchInStore, 197selectByIndex, 90selectByValue, 89, 238selectByVisible, 94selectByVisibleText, 89sendKeys, 82, 83, 139, 214setAttribute, 215setBrowserName, 301setPlatform, 301setVersion, 301size, 209submit, 82, 83, 84tagName, 61, 62, 209TestContext, 174testData, 164, 167testDropdown, 91, 93to, 117wait.until, 127WebDriver.findElement,
119WebDriver.findElements,
119WebElement.clear, 119
WebElement.click, 119WebElement.findElement,
119WebElement.findElements,
119WebElement.sendKeys, 119windowMaximize, 115xpath, 65, 69
Microsoft Edge, 43Microsoft Internet Explorer
narz dzia programistyczne, 53Microsoft WebDriver Server, 43,
45model
COM, 291DOM, Patrz: DOM
moduDDT, 179, 180nose, 299, 312
MSTEST, 171, 172, 174, 299mysz, 106, 237
dwukrotne klikni cie, 106,107
przyciski prawy, 109
Nnarz dzie ci g ej integracji,
Patrz: CINetBeans, 18NuGet, 29, 32NUnit, 167, 168NUnit Test Adaptor for Visual
Studio, 263
Oobiekt
Cookie, 116DataTable, 174mapa, Patrz: mapa obiektówPage, 260p ynnego oczekiwania, 131WebElement, 206, 209window.performance, 230,
231oczekiwanie
bazuj ce na klasieFluentWait, 130
jawne, 125, 127na aktualizacj warto ci
atrybutu elementu, 128na widoczno elementu,
129na zdarzenia w modelu
DOM, 129niejawne, 124, 125niestandardowe, 127
odtwarzacz wideo, 234, 236okno
confirm, 136, 137, 139identyfikacja, 146modalne, 134podrz dne, 139potomne, 139, 146, 147prompt, 137, 138, 139przegl darki
maksymalizowanie, 115wyskakuj ce, 133, 150zamykanie, 148
operator+, 77>, 76unii, 68
oprogramowaniesterowane testami, Patrz:
TDDsterowane zachowaniem,
Patrz: BDDo XPath, 68
PPage Object, 181, 185, 189
implementacjaw Pythonie, 200, 202w Ruby, 203w rodowisku .NET, 197
zagnie d anie, 192PhantomJS, 316, 318plik
.xls, 165
.xlsx, 165build.xml, 27, 29, 281conf.xml, 310cookie, 115, 116, 239CSV, 162, 164definicji kroku, 259, 263,
264, 268
Poleć książkęKup książkę
Skorowidz
335
OpenDialogHandler.exe,290
pom.xml, 18, 21, 25, 316POM.xml, 323przesy anie na serwer, 287specyfikacji, 258wideo, 236
poletekstowe, 82wyboru, 103
lokalizowanie, 98zaznaczanie, 98
polecenie clean, 26porównywanie obrazów, 224,
226, 227potomek, 64, 69
wyszukiwanie, 76, 77predykat, 65, 67protokó
JSON, 320, 322, 326JSON WebDriver, 38
przegl darkahistoria, 118nawigacja, 117okno, 115przechowywane dane, 239
prze cznik, 95, 96przestrze nazw java.awt.Image,
226przodek, 64, 69przycisk, 82, 83, 144pseudoklasa, 76, 77
:active, 77:checked, 78:disabled, 78:enabled, 78:focus, 77:hover, 77contains, 75
PUnit, 299Python, 32, 179, 180, 200, 202,
267, 299, 310, 312
Rramka
HTML, 139inline, 144, 145
refaktoryzacja, 187, 189rodze stwo, 64, 69
kombinator, Patrz:kombinator rodze stwa
wyszukiwanie, 77rodzic, 64Roo, 175, 177, 178RSpec, 264Ruby, 32, 175, 203, 264, 299runner, Patrz: klasa
uruchamiaj ca
SSauce Connect, 315Sauce Labs, 313scenariusz, 253selektor
CSS, 51, 52, 70, 74, 76, 100,186
jQuery, 78or, 73XPath, 51, 52, 100, 186
Selenium, 205, 224, 264, 271,286, 297
Selenium Grid, 298Selenium Grid Server, 299, 300Selenium Hub, 301
w ze , 301, 302, 303, 304Selenium Server, 299Selenium WebDriver, 17serwer
ci g ej integracji, 272HTTP, 322, 326
Sikuli, 293, 295Silverlight, 286, 296s uchacz zdarze , 120SpecFlow.NET, 246statystyka czasowa, 230
cie ka, 64bezwzgl dna, 65wzgl dna, 65, 71
rodowisko zintegrowanetworzenia oprogramowania,Patrz: IDE
Ttabela, 99, 209
webowa, 205wy wietlanie danych, 99
tablica, 164tag
frame, 139frameset, 139iframe, 144
tag Anchor, 111TDD, 245tekstu wyszukiwanie, 74, 75test, 25
akceptacyjny, 245automatyzacja, 123, 181, 297bazuj cy na danych, 154,
155, 159, 167, 171, 174,175, 177, 179
BDD/ATDD, 248funkcjonalny, 316jednostkowy, 304na platformie .NET, 29, 197NUnit, 263synchronizacja, 124, 125,
127tworzenie Ruby, 34uruchamianie
automatyczne, 284CI, 26z wiersza polecenia, 26
w chmurze, 313w rodowisku ci g ej
integracji, 281wykonywanie równoleg e,
298, 299, 304, 305, 306,308, 310, 312
Test Driven Development,Patrz: TDD
TestNG, 22, 155, 159, 160, 299,304, 306, 309
testowanie sterowane danymi,153, 154, 155, 159, 167, 171,174, 175, 177, 179
Twitter, 144
Uuwierzytelnianie, 291, 293
Poleć książkęKup książkę
Skorowidz
336
WWeb storage, 239w ze , 62, 64, 69wid et, 210, 213, 214Wiki Confluence, 178WinAnt, 27, 279wirtualizacja, 297wydajno , 229, 297wyj tek, 119
ElementNotVisibleException,84
NoAlertPresentException,136
NoSuchElementException,54, 58, 103, 130
NoSuchWindowException,148
wyra enie XPath, 62, 65wzorzec Page Object, Patrz:
Page Object
XXPath, 62, 68
o , Patrz: o XPathwyra enie, Patrz: wyra enie
XPath
Zzdarzenie, 118, 128
afterChangeValueOf, 119afterClickOn, 119afterFindBy, 119afterNavigateBack, 119afterNavigateForward, 119afterNavigateTo, 119afterScript, 119beforeChangeValueOf, 119beforeClickOn, 119beforeFindBy, 119beforeNavigateBack, 119beforeNavigateFor, 119BeforeNavigateTo, 119beforeScript, 119onException, 119onsubmit, 84s uchacz, 120
znacznik, 61frameset, 139, 144iframe, 139, 144
znak$=, 73*, 68*=, 73,, 73
., 64, 75
.., 64/, 64//, 64@, 65, 68[ ], 65^=, 73|, 68+, 77>, 76kropka, Patrz: znak .podwójna kropka,
Patrz: znak ..podwójny uko nik,
Patrz: znak //uko nik, Patrz: znak /
zrzut ekranu, 113, 114, 223
danie, 47
Poleć książkęKup książkę