Pomocí třídy Java „myclass“, kterou jsme vytvořili v předchozím kurzu, zkusme vytvořit skript WebDriver, který by:
- načíst domovskou stránku Mercury Tours
- ověřit jeho název
- vytisknout výsledek srovnání
- zavřete jej před ukončením celého programu.
Kód WebDriver
Níže je uveden skutečný kód WebDriver pro logiku prezentovanou výše uvedeným scénářem
Poznámka: Od spuštění Firefoxu 35 musíte k použití webového ovladače používat ovladač gecko vytvořený Mozillou. Selenium 3.0, gecko a firefox mají problémy s kompatibilitou a jejich správné nastavení by se mohlo stát úkolem do kopce. Pokud kód nefunguje, proveďte downgrade na Firefox verze 47 nebo nižší. Případně můžete skripty spustit v prohlížeči Chrome. Selen funguje pro Chrome hned po vybalení z krabice. Musíte jen změnit 3 řádky kódu, aby váš skript fungoval v prohlížeči Chrome nebo Firefox
balíček newproject;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;// komentář k výše uvedenému řádku a odkomentování pod řádkem k použití prohlížeče Chrome// import org.openqa.selenium.chrome.ChromeDriver;veřejná třída PG1 {public static void main (String [] args) {// deklarace a vytváření instancí objektů / proměnnýchSystem.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Ovladač WebDriver = nový FirefoxDriver ();// komentujte výše uvedené 2 řádky a odkomentujte pod 2 řádky, abyste mohli používat Chrome//System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe ");// ovladač WebDriver = nový ChromeDriver ();Řetězec baseUrl = "http://demo.guru99.com/test/newtours/";String expectTitle = "Welcome: Mercury Tours";Řetězec actualTitle = "";// spusťte Fire fox a přesměrujte jej na základní URLdriver.get (baseUrl);// získá skutečnou hodnotu tituluactualTitle = driver.getTitle ();/ ** porovnejte skutečný název stránky s očekávaným a vytiskněte* výsledek jako „úspěšný“ nebo „neúspěšný“* /if (actualTitle.contentEquals (expectTitle)) {System.out.println ("Test proběhl úspěšně!");} else {System.out.println ("Test selhal");}// zavřít Fire foxdriver.close ();}}
Vysvětlení kódu
Import balíčků
Chcete-li začít, musíte importovat následující dva balíčky:
- org.openqa.selenium. * - obsahuje třídu WebDriver potřebnou k vytvoření instance nového prohlížeče načteného s konkrétním ovladačem
- org.openqa.selenium.firefox.FirefoxDriver - obsahuje třídu FirefoxDriver potřebnou k vytvoření instance ovladače specifického pro Firefox do prohlížeče vytvořeného třídou WebDriver
Pokud váš test vyžaduje složitější akce, jako je přístup k jiné třídě, pořizování snímků obrazovky prohlížeče nebo manipulace s externími soubory, určitě budete muset importovat další balíčky.
Vytváření instancí objektů a proměnných
Normálně je takto vytvořena instance ovladače.
Třída FirefoxDriver bez parametrů znamená, že náš profil Java spustí výchozí profil Firefoxu. Výchozí profil Firefoxu je podobný spouštění Firefoxu v nouzovém režimu (nenačtou se žádná rozšíření).
Pro větší pohodlí jsme základní adresu URL a očekávaný název uložili jako proměnné.
Spuštění relace prohlížeče
Metoda get () WebDriver se používá ke spuštění nové relace prohlížeče a přesměruje ji na adresu URL, kterou zadáte jako její parametr.
Získejte aktuální název stránky
Třída WebDriver má metodu getTitle (), která se vždy používá k získání názvu stránky aktuálně načtené stránky.
Porovnejte očekávané a skutečné hodnoty
Tato část kódu jednoduše používá základní strukturu Java if-else k porovnání skutečného názvu s očekávaným.
Ukončení relace prohlížeče
K zavření okna prohlížeče se používá metoda „ close () “.
Ukončení celého programu
Pokud použijete tento příkaz, aniž byste nejprve zavřeli všechna okna prohlížeče, celý váš program Java skončí a ponechá okno prohlížeče otevřené.
Provedení testu
Existují dva způsoby, jak spustit kód v Eclipse IDE.
- Na liště nabídek Eclipse klikněte na Spustit> Spustit.
- Stisknutím Ctrl + F11 spusťte celý kód.
Pokud jste udělali vše správně, Eclipse by vydal „Test proběhl úspěšně!“
Nalezení prvků GUI
Umístění prvků ve WebDriveru se provádí pomocí metody „ findElement (By. Locator ()) “. Část kódu „lokátoru“ je stejná jako kterákoli z lokátorů dříve popsaných v kapitolách Selenium IDE těchto kurzů. Infact, doporučuje se vyhledat prvky grafického uživatelského rozhraní pomocí IDE a po úspěšné identifikaci exportovat kód do WebDriver.
Zde je ukázkový kód selenu, který vyhledá prvek podle jeho id. Jako základní URL se používá Facebook.
balíček newproject;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;veřejná třída PG2 {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Ovladač WebDriver = nový FirefoxDriver ();Řetězec baseUrl = "http://www.facebook.com";Řetězec tagName = "";driver.get (baseUrl);tagName = driver.findElement (By.id ("email")). getTagName ();System.out.println (tagName);driver.close ();System.exit (0);}}
Metodu getTagName () jsme použili k extrahování názvu značky konkrétního prvku, jehož ID je „email“. Po spuštění by tento kód měl být schopen správně identifikovat název značky „vstup“ a vytiskne jej v okně konzoly Eclipse.
Souhrn pro lokalizaci prvků
Variace | Popis | Vzorek |
---|---|---|
Podle. jméno třídy | najde prvky na základě hodnoty atributu „třída“ | findElement (By.className ("someClassName")) |
Podle. cssSelector | najde prvky na základě základního motoru CSS Selector ovladače | findElement (By.cssSelector ("vstup # e-mail")) |
Podle. id | vyhledá prvky podle hodnoty jejich atributu „id“ | findElement (By.id ("someId")) |
Podle. linkText | vyhledá prvek odkazu podle přesného textu, který zobrazí | findElement (By.linkText ("REGISTRACE")) |
Podle. název | vyhledá prvky podle hodnoty atributu „name“ | findElement (By.name ("someName")) |
Podle. partialLinkText | vyhledá prvky, které obsahují zadaný text odkazu | findElement (By.partialLinkText ("REG")) |
Podle. název štítku | vyhledá prvky podle názvu značky | findElement (By.tagName ("div")) |
Podle. xpath | vyhledá prvky 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] ")) |
Poznámka k používání findElement (By.cssSelector ())
By.cssSelector () nepodporuje funkci „obsahuje“ . Zvažte níže uvedený IDE kód selenu -
Ve výše uvedeném Selenium IDE prošel celý test. Ve skriptu Selenium WebDriver níže však stejný test vygeneroval chybu, protože WebDriver nepodporuje klíčové slovo „contains“ při použití v metodě By.cssSelector ().
Společné příkazy
Vytváření instancí webových prvků
Namísto použití dlouhé syntaxe „driver.findElement (By.locator ())“ pokaždé, když přistupujete k určitému prvku, můžeme pro něj vytvořit instanci objektu WebElement. Třída WebElement je obsažena v balíčku „org.openqa.selenium. *“.
Kliknutím na prvek
Klikání je možná nejběžnějším způsobem interakce s webovými prvky . Metoda click () se používá k simulaci klepnutí na libovolný prvek. Následující příklad prostředí Selenium Java ukazuje, jak bylo kliknutí () použito ke kliknutí na tlačítko „Přihlásit se“ Mercury Tours.
Při použití metody click () je třeba si uvědomit následující věci.
- Nezabere žádný parametr / argument.
- Metoda automaticky čeká na načtení nové stránky, pokud je k dispozici.
- Prvek, na který se má kliknout, musí být viditelný (výška a šířka se nesmí rovnat nule).
Získejte příkazy
Získejte příkazy k načtení různých důležitých informací o stránce / prvku. Zde je několik důležitých příkazů „get“, které musíte znát.
Příkazy | Používání |
---|---|
get () Ukázkové použití: |
|
getTitle () Ukázkové použití: |
|
getPageSource () Ukázkové použití: |
|
getCurrentUrl () Ukázkové použití: |
|
getText () Ukázkové použití: |
|
Navigace v příkazech
Tyto příkazy vám umožňují obnovit, přejít a přepínat mezi různými webovými stránkami.
navigate (). to () Ukázkové použití: |
|
navigate (). refresh () Ukázkové použití: |
|
navigate (). back () Ukázkové použití: |
|
navigate (). forward () Ukázkové použití: |
|
Zavření a ukončení systému Windows
close () Ukázkové použití: |
|
quit () Ukázkové použití: |
|
Chcete-li jasně ilustrovat rozdíl mezi close () a quit (), zkuste spustit níže uvedený kód. Používá webovou stránku, která po načtení stránky automaticky zobrazí okno a po ukončení otevře další.
Všimněte si, že bylo zavřeno pouze nadřazené okno prohlížeče, nikoli dvě vyskakovací okna.
Pokud ale použijete quit (), zavřou se všechna okna - nejen nadřazená. Zkuste spustit níže uvedený kód a všimnete si, že výše uvedená dvě automaticky otevíraná okna se také automaticky uzavřou.
balíček newproject;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;veřejná třída PG3 {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Ovladač WebDriver = nový FirefoxDriver ();driver.get ("http://www.popuptest.com/popuptest2.html");driver.quit (); // pomocí QUIT se všechna okna zavřou}}
Přepínání mezi snímky
Abychom mohli přistupovat k prvkům grafického uživatelského rozhraní v rámci, měli bychom nejprve nasměrovat WebDriver, aby se nejprve zaměřil na rám nebo vyskakovací okno, než budeme moci přistupovat k prvkům v nich. Vezměme si například webovou stránku http://demo.guru99.com/selenium/deprecated.html
Tato stránka má 3 rámce, jejichž atributy „name“ jsou uvedeny výše. Přejeme si otevřít odkaz „Zastaralé“ obklopený výše žlutou barvou. Abychom to mohli udělat, musíme nejprve dát WebDriveru pokyn k přepnutí na rámec „classFrame“ pomocí metody „switchTo (). Frame ()“ . Jako parametr pro část "frame ()" použijeme atribut name rámce.
balíček newproject;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;veřejná třída PG4 {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Ovladač WebDriver = nový FirefoxDriver ();driver.get ("http://demo.guru99.com/selenium/deprecated.html");driver.switchTo (). frame ("classFrame");driver.findElement (By.linkText ("zastaralý")). click ();driver.close ();}}
Po provedení tohoto kódu uvidíte, že rámec „classFrame“ je přenesen na stránku „Zastaralé API“, což znamená, že náš kód byl úspěšně schopen získat přístup k odkazu „Zastaralé“.
Přepínání mezi automaticky otevíranými okny
WebDriver umožňuje vyskakovací okna, jako jsou výstrahy, na rozdíl od Selenium IDE. Pro přístup k prvkům v rámci upozornění (například ke zprávě, kterou obsahuje) musíme použít metodu „switchTo (). Alert ()“ . V níže uvedeném kódu použijeme tuto metodu pro přístup k výstražnému poli a poté načteme jeho zprávu pomocí metody „getText ()“ a poté automaticky zavřeme výstražné pole pomocí „switchTo (). Alert (). Accept () " metoda.
Nejprve přejděte na stránku http://jsbin.com/usidix/1 a ručně klikněte na „Přejít!“ tlačítko tam a uvidíte sami text zprávy.
Podívejme se na ukázkový kód selenu, jak to udělat-
balíček mypackage;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;veřejná třída myclass {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Ovladač WebDriver = nový FirefoxDriver ();Řetězec 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šimněte, že vytištěná výstražná zpráva je:
Počká
Existují dva druhy čekání.
- Implicitní čekání - slouží k nastavení výchozí doby čekání v celém programu
- Explicitní čekání - slouží k nastavení doby čekání pouze pro konkrétní instanci
Implicitní počkat
- Je jednodušší kódovat než Explicit Waits.
- Obvykle se deklaruje v instanční části kódu.
- K importu budete potřebovat pouze jeden další balíček.
Chcete-li začít používat implicitní čekání, budete muset tento balíček importovat do svého kódu.
Pak na instanční část kódu přidejte toto.
Explicitní čekání
Explicitní čekání se provádí pomocí tříd WebDriverWait a ExpectedCondition . V následujícím příkladu Selenium WebDriver počkáme až 10 sekund, než se prvek, jehož id je „uživatelské jméno“, stane viditelným, než přistoupíme k dalšímu příkazu. Tady jsou kroky.
Krok 1
Importujte tyto dva balíčky:
Krok 2
Deklarujte proměnnou WebDriverWait. V tomto příkladu použijeme jako název proměnné „myWaitVar“.
Krok 3
Použijte myWaitVar s ExpectedConditions na částech, kde je třeba výslovně počkat. V tomto případě použijeme explicitní čekání na vstup „uživatelské jméno“ (Mercury Tours HomePage), než na něj napíšeme textový „tutoriál“.
Podmínky
V podmíněných a smyčkových operacích se používají následující metody -
- isEnabled () se používá, když chcete před provedením příkazu ověřit, zda je určitý prvek povolen či nikoli.
- isDisplayed () se používá, pokud si chcete před provedením příkazu ověřit, zda je nebo není zobrazen určitý prvek.
- isSelected () se používá, když chcete ověřit, zda je zaškrtnuto určité políčko, přepínač nebo volba v rozevíracím seznamu . Na jiné prvky to nefunguje.
Pomocí ExpectedConditions
Třída ExpectedConditions nabízí širší sadu podmínek, které můžete použít ve spojení s metodou WebDriverWait do ().
Níže jsou uvedeny některé z nejběžnějších metod ExpectedConditions.
- alertIsPresent () - čeká, až se zobrazí výstražné pole.
- elementToBeClickable () - Čeká, až bude prvek viditelný a současně povolený. Ukázkový kód selenu níže počká, než se prvek s stane viditelným a povoleným jako první, než tento prvek přiřadíte jako proměnnou WebElement s názvem „txtUserName“.
- frameToBeAvailableAndSwitchToIt () - Čeká, až je daný snímek již k dispozici, a poté se na něj automaticky přepne.
Chytání výjimek
Při použití isEnabled (), isDisplayed () a isSelected () předpokládá WebDriver, že prvek na stránce již existuje. Jinak vyvolá NoSuchElementException . Aby se tomu zabránilo, měli bychom použít blok try-catch, aby program nebyl přerušen.
WebElement txtbox_username = driver.findElement (By.id ("uživatelské jméno"));Snaž se{if (txtbox_username.isEnabled ()) {txtbox_username.sendKeys ("výukový program");}}catch (NoSuchElementException nsee) {System.out.println (nsee.toString ());}
Pokud používáte explicitní čekání, typ výjimky, které byste měli zachytit, je „TimeoutException“.
souhrn
- Chcete-li začít používat rozhraní WebDriver API, musíte importovat alespoň tyto dva balíčky.
- org.openqa.selenium. *
- org.openqa.selenium.firefox.FirefoxDriver
- Metoda get () je ekvivalentem příkazu „open“ selenového IDE.
- Umístění prvků ve WebDriveru se provádí pomocí metody findElement () .
- Níže jsou k dispozici možnosti vyhledání prvků ve WebDriveru:
- Podle. jméno třídy
- Podle. cssSelector
- Podle. id
- Podle. linkText
- Podle. název
- Podle. partialLinkText
- Podle. název štítku
- Podle. xpath
- By.cssSelector () nebude podporovat „obsahuje“ funkci.
- Prvek můžete vytvořit pomocí třídy WebElement .
- Kliknutí na prvek se provádí pomocí metody click () .
- WebDriver poskytuje tyto užitečné příkazy pro získání :
- dostat()
- getTitle ()
- getPageSource ()
- getCurrentUrl ()
- getText ()
- WebDriver poskytuje tyto užitečné navigační příkazy
- navigovat (). vpřed ()
- navigovat (). zpět ()
- navigovat do()
- navigate (). refresh ()
- K zavření oken prohlížeče se používají metody close () a quit (). Close () se používá k zavření jednoho okna; while quit () se používá k zavření všech oken přidružených k nadřazenému oknu, které ovládal objekt WebDriver.
- Metody switchTo (). Frame () a switchTo (). Alert () se používají k nasměrování zaměření WebDriveru na rámec nebo výstrahu.
- Implicitní čekání se používají k nastavení doby čekání v celém programu, zatímco explicitní čekání se používají pouze na konkrétních částech.
- Při ověřování stavu prvku můžete použít isEnabled (), isDisplayed (), isSelected () a kombinaci metod WebDriverWait a ExpectedConditions . Neověřují však, zda prvek neexistuje.
- Když bylo voláno isEnabled (), isDisplayed () nebo isSelected (), zatímco prvek neexistoval, WebDriver vyvolá NoSuchElementException .
- Když byli povoláni WebDriverWait a ExpectedConditions metody, zatímco prvek byl neexistující, WebDriver bude hodit TimeoutException .
Poznámka:
driver.get (): Používá se k přechodu na konkrétní web, ale neudržuje historii prohlížeče a soubory cookie, takže nemůžeme použít tlačítko vpřed a vzad, pokud na něj klikneme, stránka nedostane plán
driver.navigate (): používá se k přechodu na konkrétní web, ale udržuje historii prohlížeče a soubory cookie, takže můžeme během kódování Testcase procházet mezi stránkami pomocí tlačítek vpřed a vzad