Pomocou triedy Java „myclass“, ktorú sme vytvorili v predchádzajúcom tutoriále, sa pokúsme vytvoriť skript WebDriver, ktorý by:
- načítať domovskú stránku Mercury Tours
- overiť jeho názov
- vytlačiť výsledok porovnania
- zatvorte ho pred ukončením celého programu.
Kód WebDriver
Nižšie je uvedený skutočný kód WebDriver pre logiku uvedenú vo vyššie uvedenom scenári
Poznámka: Od verzie Firefox 35 musíte na použitie webového ovládača používať ovládač gecko, ktorý vytvoril Mozilla. Selenium 3.0, gecko a firefox majú problémy s kompatibilitou a ich správne nastavenie by sa mohlo stať náročnou úlohou. Ak kód nefunguje, vykonajte prechod na verziu Firefox 47 alebo nižšiu. Prípadne môžete svoje skripty spustiť v prehliadači Chrome. Selén funguje pre Chrome hneď po vybalení. Musíte len zmeniť 3 riadky kódu, aby skript fungoval v prehliadači Chrome alebo Firefox
balíček nový projekt;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;// komentár nad riadkom a odkomentovanie pod riadkom, aby ste mohli používať Chrome// import org.openqa.selenium.chrome.ChromeDriver;verejná trieda PG1 {public static void main (String [] args) {// deklarácia a inštancia objektov / premennýchSystem.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Ovládač WebDriver = nový FirefoxDriver ();// ak chcete používať Chrome, komentujte vyššie uvedené dva riadky a odkomentujte nižšie ako dva riadky//System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe ");// ovládač WebDriver = nový ChromeDriver ();Reťazec baseUrl = "http://demo.guru99.com/test/newtours/";String expectTitle = "Vitajte: Mercury Tours";Reťazec actualTitle = "";// spustite Fire fox a nasmerujte ho na základnú URLdriver.get (baseUrl);// získa skutočnú hodnotu tituluactualTitle = driver.getTitle ();/ ** porovnajte skutočný názov stránky s očakávaným a vytlačte* výsledok ako „vyhovel“ alebo „zlyhal“* /if (actualTitle.contentEquals (expectTitle)) {System.out.println ("Test prešiel úspešne!");} else {System.out.println ("Test zlyhal");}// zavrieť Fire foxdriver.close ();}}
Vysvetlenie kódu
Importujú sa balíčky
Na začiatok je potrebné importovať nasledujúce dva balíčky:
- org.openqa.selenium. * - obsahuje triedu WebDriver potrebnú na vytvorenie inštancie nového prehliadača nabitého konkrétnym ovládačom
- org.openqa.selenium.firefox.FirefoxDriver - obsahuje triedu FirefoxDriver potrebnú na vytvorenie inštancie ovládača špecifického pre Firefox do prehliadača vytvoreného triedou WebDriver.
Ak váš test vyžaduje komplikovanejšie akcie, ako je prístup k inej triede, vytváranie snímok obrazovky prehliadača alebo manipulácia s externými súbormi, určite budete musieť importovať viac balíkov.
Vytvorenie inštancie objektov a premenných
Za normálnych okolností je takto vytvorená inštancia objektu ovládača.
Trieda FirefoxDriver bez parametrov znamená, že náš program Java spustí predvolený profil Firefoxu. Predvolený profil prehliadača Firefox je podobný spusteniu prehliadača Firefox v bezpečnom režime (nenačítajú sa žiadne rozšírenia).
Pre pohodlie sme základnú premennú uložili základnú adresu URL a očakávaný názov.
Spustenie relácie prehľadávača
Metóda get () nástroja WebDriver sa používa na spustenie novej relácie prehľadávača a nasmeruje ju na adresu URL, ktorú určíte ako jej parameter.
Získajte skutočný názov stránky
Trieda WebDriver má metódu getTitle (), ktorá sa vždy používa na získanie názvu stránky aktuálne načítanej stránky.
Porovnajte očakávané a skutočné hodnoty
Táto časť kódu jednoducho používa základnú štruktúru Java typu „if-else“ na porovnanie skutočného názvu s očakávaným.
Ukončenie relácie prehľadávača
Na zatvorenie okna prehliadača sa používa metóda „ close () “.
Ukončenie celého programu
Ak použijete tento príkaz bez toho, aby ste najskôr zatvorili všetky okná prehľadávača, celý váš program Java sa ukončí, pričom okno prehľadávača zostane otvorené.
Spustenie testu
Existujú dva spôsoby, ako spustiť kód v Eclipse IDE.
- Na paneli s ponukami Eclipse kliknite na položky Spustiť> Spustiť.
- Stlačením kombinácie klávesov Ctrl + F11 spustíte celý kód.
Ak ste urobili všetko správne, program Eclipse vypíše „Test prešiel!“
Vyhľadanie prvkov grafického používateľského rozhrania
Umiestnenie prvkov v serveri WebDriver sa vykonáva pomocou metódy „ findElement (By. Locator ()) “. Časť „lokátora“ kódu je rovnaká ako ktorákoľvek z lokátorov predtým diskutovaných v kapitolách Selenium IDE týchto tutoriálov. V konečnom dôsledku sa odporúča vyhľadať prvky grafického používateľského rozhrania pomocou IDE a po úspešnej identifikácii exportovať kód do WebDriveru.
Tu je vzorový kód selénu, ktorý vyhľadáva prvok podľa jeho id. Ako základná adresa URL sa používa Facebook.
balíček nový projekt;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;verejná trieda PG2 {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Ovládač WebDriver = nový FirefoxDriver ();Reťazec baseUrl = "http://www.facebook.com";Reťazec tagName = "";driver.get (baseUrl);tagName = driver.findElement (By.id ("email")). getTagName ();System.out.println (tagName);driver.close ();System.exit (0);}}
Použili sme metódu getTagName () na extrahovanie názvu značky konkrétneho prvku, ktorého ID je „e-mail“. Po spustení by tento kód mal byť schopný správne identifikovať názov značky „vstup“ a vytlačí ho v okne konzoly Eclipse.
Zhrnutie pre lokalizáciu prvkov
Variácia | Popis | Ukážka |
---|---|---|
Autor:. className | nájde prvky na základe hodnoty atribútu „class“ | findElement (By.className ("someClassName")) |
Autor:. cssSelector | nájde prvky na základe základného motora CSS Selector vodiča | findElement (By.cssSelector ("vstup # e-mailu")) |
Autor:. id | vyhľadá prvky podľa hodnoty ich atribútu „id“ | findElement (By.id ("someId")) |
Autor:. linkText | vyhľadá odkazový prvok podľa presného textu, ktorý zobrazuje | findElement (By.linkText ("REGISTRÁCIA")) |
Autor:. názov | vyhľadá prvky podľa hodnoty atribútu „name“ | findElement (By.name ("someName")) |
Autor:. partialLinkText | vyhľadá prvky, ktoré obsahujú daný text odkazu | findElement (By.partialLinkText ("REG")) |
Autor:. tagName | vyhľadá prvky podľa názvu značky | findElement (By.tagName ("div")) |
Autor:. xpath | lokalizuje prvky cez 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] ")) |
Poznámka k použitiu findElement (By.cssSelector ())
By.cssSelector () nepodporuje funkciu „obsahuje“ . Zvážte nižšie uvedený selénový IDE kód -
V Selenium IDE vyššie prešiel celý test. V nižšie uvedenom skripte selénového WebDriveru však rovnaký test vygeneroval chybu, pretože WebDriver nepodporuje kľúčové slovo „obsahuje“, keď sa používa v metóde By.cssSelector ().
Bežné príkazy
Vytváranie inštancií webových prvkov
Namiesto použitia dlhej syntaxe "driver.findElement (By.locator ())" pri každom prístupe k určitému prvku môžeme preň vytvoriť inštanciu objektu WebElement. Trieda WebElement je obsiahnutá v balíku „org.openqa.selenium. *“.
Kliknutím na prvok
Klikanie je možno najbežnejším spôsobom interakcie s webovými prvkami . Metóda click () sa používa na simuláciu klikania na akýkoľvek prvok. Nasledujúci príklad Java Selenium ukazuje, ako bolo kliknutie () použité na kliknutie na tlačidlo „Prihlásiť sa“ Mercury Tours.
Pri použití metódy click () je potrebné si uvedomiť nasledujúce veci.
- Neberie žiadny parameter / argument.
- Metóda automaticky čaká na načítanie novej stránky, ak je to možné.
- Prvok, na ktorý sa má kliknúť, musí byť viditeľný (výška a šírka sa nesmú rovnať nule).
Získajte príkazy
Príkazy na získanie rôznych dôležitých informácií o stránke / prvku. Tu je niekoľko dôležitých príkazov „získať“, ktoré musíte poznať.
Príkazy | Využitie |
---|---|
get () Využitie vzorky: |
|
getTitle () Využitie vzorky: |
|
getPageSource () Využitie vzorky: |
|
getCurrentUrl () Ukážka použitia: |
|
getText () Ukážka použitia: |
|
Navigácia v príkazoch
Tieto príkazy vám umožňujú obnovovať, zapínať a prepínať medzi rôznymi webovými stránkami.
navigate (). to () Ukážka použitia: |
|
navigate (). refresh () Ukážka použitia: |
|
navigate (). back () Ukážka použitia: |
|
navigate (). forward () Ukážka použitia: |
|
Zatvorenie a ukončenie prehľadávača Windows
close () Využitie vzorky: |
|
quit () Využitie vzorky: |
|
Ak chcete jasne ilustrovať rozdiel medzi close () a quit (), skúste použiť nasledujúci kód. Používa webovú stránku, ktorá po načítaní stránky automaticky otvorí okno a po ukončení otvorí ďalšiu.
Všimnite si, že bolo zatvorené iba nadradené okno prehľadávača, a nie dve vyskakovacie okná.
Ale ak použijete quit (), zatvoria sa všetky okná - nielen nadradené. Skúste spustiť kód uvedený nižšie a všimnete si, že automaticky sa zatvoria aj dve vyššie uvedené kontextové okná.
balíček nový projekt;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;verejná trieda PG3 {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Ovládač WebDriver = nový FirefoxDriver ();driver.get ("http://www.popuptest.com/popuptest2.html");driver.quit (); // použitím QUIT sa zatvoria všetky okná}}
Prepínanie medzi rámcami
Ak chcete získať prístup k prvkom grafického používateľského rozhrania v rámci, mali by sme najskôr nasmerovať program WebDriver, aby sa najskôr zameral na rám alebo vyskakovacie okno, až potom budeme mať prístup k prvkom v nich. Vezmime si napríklad webovú stránku http://demo.guru99.com/selenium/deprecated.html
Táto stránka má 3 rámce, ktorých atribúty „name“ sú uvedené vyššie. Prajeme si prístup na odkaz „Zastarané“ obklopený hore žltou farbou. Aby sme to dosiahli, musíme najskôr dať inštrukcii WebDriveru, aby prepol na rámec „classFrame“ pomocou metódy „switchTo (). Frame ()“ . Ako parameter pre časť „frame ()“ použijeme atribút name rámca.
balíček nový projekt;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;verejná trieda PG4 {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Ovládač WebDriver = nový FirefoxDriver ();driver.get ("http://demo.guru99.com/selenium/deprecated.html");driver.switchTo (). frame ("classFrame");driver.findElement (By.linkText ("zastarané")). click ();driver.close ();}}
Po vykonaní tohto kódu uvidíte, že rámec „classFrame“ sa presunie na stránku „Zastarané API“, čo znamená, že náš kód mohol úspešne získať prístup k odkazu „Zastarané“.
Prepínanie medzi automaticky otváranými oknami
WebDriver umožňuje na rozdiel od selénového IDE zobrazovať kontextové okná, ako sú výstrahy. Na prístup k prvkom v rámci výstrahy (napríklad k správe, ktorá obsahuje) musíme použiť metódu „switchTo (). Alert ()“ . V nižšie uvedenom kóde použijeme túto metódu na prístup do výstražného poľa a potom načítame jeho správu pomocou metódy „getText ()“ a potom automaticky zatvoríme výstražné pole pomocou „switchTo (). „ metóda.
Najskôr prejdite na stránku http://jsbin.com/usidix/1 a ručne kliknite na tlačidlo „Choď!“ a uvidíte sami text správy.
Pozrime sa na ukážkový kód selénu -
balenie moje balenie;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");Ovládač WebDriver = nový FirefoxDriver ();Reťazec 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 konzole Eclipse si všimnite, že vytlačená výstražná správa je:
Počká
Existujú dva druhy čakania.
- Implicitné čakanie - slúži na nastavenie predvoleného času čakania v celom programe
- Explicitné čakanie - slúži na nastavenie čakacej doby iba pre konkrétnu inštanciu
Implicitné čakanie
- Je to jednoduchšie ako program Explicit Waits.
- Zvyčajne sa deklaruje v inštančnej časti kódu.
- Na import vám bude stačiť iba jeden ďalší balíček.
Ak chcete začať používať implicitné čakanie, musíte tento balík importovať do svojho kódu.
Potom na časť kódu svojho inštancie pridajte toto.
Explicitné čakanie
Explicitné čakania sa vykonávajú pomocou tried WebDriverWait a ExpectedCondition . V nasledujúcom príklade Selenium WebDriver počkáme až do 10 sekúnd, kým sa prvok, ktorého id je „používateľské meno“, stane viditeľným, až potom pokračujeme ďalším príkazom. Tu sú kroky.
Krok 1
Importujte tieto dva balíčky:
Krok 2
Deklarujte premennú WebDriverWait. V tomto príklade použijeme ako premennú „myWaitVar“.
Krok 3
Použite myWaitVar s ExpectedConditions na častiach, kde je potrebné výslovne počkať. V takom prípade použijeme explicitné čakanie na vstup „používateľské meno“ (Mercury Tours HomePage), kým doň napíšeme textový „návod“.
Podmienky
V podmienených a slučkových operáciách sa používajú nasledujúce metódy -
- isEnabled () sa používa, ak chcete pred vykonaním príkazu overiť, či je určitý prvok povolený alebo nie.
- isDisplayed () sa používa, ak chcete pred vykonaním príkazu overiť, či je alebo nie je zobrazený určitý prvok.
- isSelected () sa používa, ak chcete overiť, či je začiarknuté určité políčko, prepínač alebo možnosť v rozbaľovacom poli . Na iné prvky to nefunguje.
Používanie ExpectedConditions
Trieda ExpectedConditions ponúka širšiu množinu podmienok, ktoré môžete použiť v spojení s metódou WebDriverWait do ().
Ďalej uvádzame niektoré z najbežnejších metód ExpectedConditions.
- alertIsPresent () - počká, kým sa zobrazí výstražné pole.
- elementToBeClickable () - Čaká, kým bude prvok viditeľný a zároveň povolený. Ukážkový kód selénu uvedený nižšie počká, kým sa prvok s stane viditeľným a povoleným ako prvý, pred priradením tohto prvku ako premennej WebElement s názvom „txtUserName“.
- frameToBeAvailableAndSwitchToIt () - Počká, kým daný rámec už nebude k dispozícii, a potom sa naň automaticky prepne.
Výnimky z chytania
Pri použití parametrov isEnabled (), isDisplayed () a isSelected () predpokladá WebDriver, že prvok na stránke už existuje. V opačnom prípade vyvolá NoSuchElementException . Aby sme sa tomu vyhli, mali by sme použiť blok try-catch, aby nedošlo k prerušeniu programu.
WebElement txtbox_username = driver.findElement (By.id ("používateľské meno"));skúsiť {if (txtbox_username.isEnabled ()) {txtbox_username.sendKeys ("návod");}}catch (NoSuchElementException nsee) {System.out.println (nsee.toString ());}
Ak používate explicitné čakanie, typ výnimky, ktorú by ste mali chytiť, je „TimeoutException“.
Zhrnutie
- Ak chcete začať používať rozhranie WebDriver API, musíte importovať aspoň tieto dva balíčky.
- org.openqa.selenium. *
- org.openqa.selenium.firefox.FirefoxDriver
- Metóda get () je ekvivalentom príkazu "otvoreného" selénu IDE.
- Lokalizácia prvkov v serveri WebDriver sa vykonáva pomocou metódy findElement () .
- Nasledujúce možnosti sú k dispozícii na vyhľadanie prvkov v serveri WebDriver:
- Autor:. className
- Autor:. cssSelector
- Autor:. id
- Autor:. linkText
- Autor:. názov
- Autor:. partialLinkText
- Autor:. tagName
- Autor:. xpath
- By.cssSelector () nebude podporovať "obsahuje" funkciu.
- Element môžete vytvoriť inštanciou pomocou triedy WebElement .
- Kliknutie na prvok sa vykonáva metódou click () .
- WebDriver poskytuje tieto užitočné príkazy na získanie :
- dostať ()
- getTitle ()
- getPageSource ()
- getCurrentUrl ()
- getText ()
- WebDriver poskytuje tieto užitočné navigačné príkazy
- navigovať (). dopredu ()
- navigovať (). späť ()
- navigovať (). do ()
- navigate (). refresh ()
- Na zatvorenie okien prehliadača sa používajú metódy close () a quit (). Close () sa používa na zatvorenie jedného okna; while quit () sa používa na zatvorenie všetkých okien spojených s nadradeným oknom, ktoré ovládal objekt WebDriver.
- Metódy switchTo (). Frame () a switchTo (). Alert () sa používajú na nasmerovanie zamerania nástroja WebDriver na rámec alebo výstrahu.
- Implicitné čakania sa používajú na nastavenie doby čakania v celom programe, zatiaľ čo explicitné čakania sa používajú iba na konkrétnych častiach.
- Pri overovaní stavu prvku môžete použiť metódy isEnabled (), isDisplayed (), isSelected () a kombináciu metód WebDriverWait a ExpectedConditions . Neoverujú však, či daný prvok neexistuje.
- Keď bol volaný isEnabled (), isDisplayed () alebo isSelected (), zatiaľ čo element neexistoval, WebDriver vyvolá NoSuchElementException .
- Keď sa volali metódy WebDriverWait a ExpectedConditions, zatiaľ čo prvok neexistoval, WebDriver by vyvolal TimeoutException .
Poznámka:
driver.get (): Používa sa na prechod na konkrétny web, ale neudržuje históriu a súbory cookie prehliadača, takže nemôžeme používať tlačidlá vpred a vzad, ak na ne klikneme, stránka nedostane plán.
driver.navigate (): slúži na prechod na konkrétnu webovú stránku, ale zachováva históriu prehliadača a súbory cookie. Na navigáciu medzi stránkami počas kódovania Testcase tak môžeme použiť tlačidlo dopredu a dozadu.