První skript selenového webdriveru: Ukázka ukázkového kódu JAVA

Obsah:

Anonim

Pomocí třídy Java „myclass“, kterou jsme vytvořili v předchozím kurzu, zkusme vytvořit skript WebDriver, který by:

  1. načíst domovskou stránku Mercury Tours
  2. ověřit jeho název
  3. vytisknout výsledek srovnání
  4. 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:

  1. 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
  2. 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.

  1. Na liště nabídek Eclipse klikněte na Spustit> Spustit.
  2. 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í:
  • Automaticky otevře nové okno prohlížeče a načte stránku, kterou určíte v jeho závorkách.
  • Jedná se o protějšek příkazu „open“ selenového IDE.
  • Parametr musí být String objekt.
getTitle () Ukázkové použití:
  • Nepotřebuje žádné parametry
  • Načte název aktuální stránky
  • Přední a koncové mezery jsou oříznuty
  • Vrátí prázdný řetězec, pokud stránka nemá název
getPageSource () Ukázkové použití:
  • Nepotřebuje žádné parametry
  • Vrátí zdrojový kód stránky jako String hodnotu
getCurrentUrl () Ukázkové použití:
  • Nepotřebuje žádné parametry
  • Načte řetězec představující aktuální adresu URL , na kterou se prohlížeč dívá
getText () Ukázkové použití:
  • Načte vnitřní text prvku, který zadáte

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í:
  • Automaticky otevře nové okno prohlížeče a načte stránku , kterou určíte v jeho závorkách.
  • Dělá přesně to samé jako metoda get ().
navigate (). refresh () Ukázkové použití:
  • Nepotřebuje žádné parametry.
  • To obnoví aktuální stránku.
navigate (). back () Ukázkové použití:
  • Nepotřebuje žádné parametry
  • Vrátí vás zpět o jednu stránku historie prohlížeče.
navigate (). forward () Ukázkové použití:
  • Nepotřebuje žádné parametry
  • Přesune vás o jednu stránku v historii prohlížeče.

Zavření a ukončení systému Windows

close () Ukázkové použití:
  • Nepotřebuje žádné parametry
  • Zavře pouze okno prohlížeče, které WebDriver aktuálně ovládá .
quit () Ukázkové použití:
  • Nepotřebuje žádné parametry
  • Zavře všechna okna, která WebDriver otevřel.

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í.

  1. Implicitní čekání - slouží k nastavení výchozí doby čekání v celém programu
  2. 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