Selenium Webdriver Java Příklad programu

Selenium Java Příklad

Za použití Java třídy „myclass“, kterou jsme vytvořili v předchozím tutoriálu, zkusme vytvořit skript WebDriver, který by:

Krok 1: vynést Mercury Domovská stránka Tours
Krok 2: ověřit jeho název
Krok 3: vytisknout výsledek srovnání
Krok 4: zavřete jej před ukončením celého programu.

Selenium Ukázka webového ovladače Code

Níže je skutečný kód WebDriver pro logiku prezentovanou ve výše uvedeném scénáři

package newproject;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
//comment the above line and uncomment below line to use Chrome
//import org.openqa.selenium.chrome.ChromeDriver;
public class PG1 {


    public static void main(String[] args) {
        // declaration and instantiation of objects/variables
    	System.setProperty("webdriver.gecko.driver","C:\\geckodriver.exe");
		WebDriver driver = new FirefoxDriver();
		//comment the above 2 lines and uncomment below 2 lines to use Chrome
		//System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe");
		//WebDriver driver = new ChromeDriver();
    	
        String baseUrl = "https://demo.guru99.com/test/newtours/";
        String expectedTitle = "Welcome: Mercury Tours";
        String actualTitle = "";

        // launch Fire fox and direct it to the Base URL
        driver.get(baseUrl);

        // get the actual value of the title
        actualTitle = driver.getTitle();

        /*
         * compare the actual title of the page with the expected one and print
         * the result as "Passed" or "Failed"
         */
        if (actualTitle.contentEquals(expectedTitle)){
            System.out.println("Test Passed!");
        } else {
            System.out.println("Test Failed");
        }
       
        //close Fire fox
        driver.close();
    }

}

Poznámka: Spuštění Firefox 35, musíte použít ovladač gecko vytvořený Mozillou, abyste mohli používat Web Driver. Selenium 3.0, gecko a firefox mají problémy s kompatibilitou a jejich správné nastavení by se mohlo stát náročným úkolem. Pokud kód nefunguje, přejděte na nižší verzi Firefox verze 47 nebo nižší. Případně můžete spouštět skripty v prohlížeči Chrome. Selenium funguje hned po vybalení pro Chrome. Stačí změnit 3 řádky kódu, aby váš skript fungoval s Chrome nebo Firefox

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 konkrétním ovladačem
  2. org.openqa.selenium.firefox.FirefoxŘidič – obsahuje FirefoxTřída ovladače potřebná k vytvoření instance a Firefox-specifický ovladač do prohlížeče vytvořený 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 více balíčků.

Instantování objektů a proměnných

Normálně se tímto způsobem vytváří instance objektu ovladače.

WebDriver driver = new FirefoxDriver();

A FirefoxTřída ovladače bez parametrů znamená, že výchozí Firefox profil bude spuštěn naším Java naprogramovat. Výchozí Firefox profil je podobný spuštění Firefox v nouzovém režimu (nenačítají se žádná rozšíření).

Pro usnadnění jsme uložili základní adresu URL a očekávaný název jako proměnné.

Spuštění relace prohlížeče

WebDriver's dostat() metoda se používá ke spuštění nové relace prohlížeče a nasměruje ji na adresu URL, kterou zadáte jako její parametr.

driver.get(baseUrl);

Získejte skutečný název stránky

Třída WebDriver má getTitle() metoda, která se vždy používá k získání názvu stránky aktuálně načtené stránky.

actualTitle = driver.getTitle();

Porovnejte očekávané a skutečné hodnoty

Tato část kódu jednoduše používá základní Java if-else pro porovnání skutečného názvu s očekávaným.

if (actualTitle.contentEquals(expectedTitle)){
            System.out.println("Test Passed!");
        } else {
            System.out.println("Test Failed");
        }

Ukončení relace prohlížeče

"zavřít()” metoda se používá k zavření okna prohlížeče.

driver.close();

Ukončení celého programu

Pokud použijete tento příkaz bez zavření všech oken prohlížeče, váš celek Java program se ukončí, zatímco okno prohlížeče zůstane otevřené.

System.exit(0);

Spuštění testu

Existují dva způsoby, jak spustit kód Eclipse SDI.

  1. On Eclipse's menu, klikněte Spustit > Spustit.
  2. Pro média Ctrl + F11 pro spuštění celého kódu.

Spuštění testu

Pokud jste vše udělali správně, Eclipse vypíše "Test prošel!"

Spuštění testu

Vyhledání prvků GUI

Umístění prvků ve WebDriver se provádí pomocí „findElement(Podle.Vyhledávání())“ metoda. Část kódu „lokátor“ je stejná jako kterýkoli z lokátorů, které byly dříve popsány v dokumentu Selenium IDE kapitoly těchto tutoriálů. Ve skutečnosti se doporučuje najít prvky GUI pomocí IDE a po úspěšné identifikaci exportovat kód do WebDriver.

Zde je Selenium ukázkový kód, který vyhledá prvek podle jeho id. Facebook se používá jako základní URL.

package newproject;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class PG2 {
    public static void main(String[] args) {
    	System.setProperty("webdriver.gecko.driver","C:\\geckodriver.exe");
    	WebDriver driver = new FirefoxDriver();
        String baseUrl = "http://www.facebook.com";
        String tagName = "";
        
        driver.get(baseUrl);
        tagName = driver.findElement(By.id("email")).getTagName();
        System.out.println(tagName);
        driver.close();
        System.exit(0);
}
}

Použili jsme getTagName() metoda k extracnázev tagu daného prvku, jehož ID je „email“. Po spuštění by měl být tento kód schopen správně identifikovat název tagu „input“ a vypsat ho na EclipseOkno konzoly.

Vyhledání prvků GUI

Souhrn pro umístění prvků

Změna Description Vzorek
By.className vyhledá prvky na základě hodnoty atributu „class“. findElement(By.className(“someClassName”))
By.cssSelector vyhledá prvky založené na základním enginu CSS Selector ovladače findElement(By.cssSelector(“input#email”))
Podle.id vyhledá prvky podle hodnoty jejich atributu „id“. findElement(By.id(“someId”))
 
By.linkText vyhledá prvek odkazu podle přesného textu, který zobrazí findElement(By.linkText(“REGISTRACE”))
 
Podle jména vyhledá prvky podle hodnoty atributu „name“. findElement(By.name(“someName”))
 
By.partialLinkText vyhledá prvky, které obsahují daný text odkazu findElement(By.partialLinkText(“REG”))
 
By.tagName vyhledá prvky podle názvu značky findElement(By.tagName(“div”))
 
By.xpath lokalizuje prvky přes 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žití findElement(By.cssSelector())

By.cssSelector() nepodporuje funkci „obsahuje“. Zvažte Selenium IDE kód níže –

Poznámka k použití findElement(By.cssSelector())

In Selenium IDE výše, celý test prošel. Nicméně v Selenium Skript WebDriver níže, stejný test vygeneroval chybu, protože WebDriver nepodporuje klíčové slovo „contains“ při použití v metodě By.cssSelector().

Poznámka k použití findElement(By.cssSelector())

Společné příkazy

Instantování webových prvků

Namísto použití dlouhé syntaxe „driver.findElement(By.locator())“ pokaždé, když přistupujete ke konkrétnímu prvku, můžeme pro něj vytvořit instanci objektu WebElement. Třída WebElement je obsažena v balíčku „org.openqa.selenium.*“.

Instantování webových prvků

Kliknutí na prvek

Klikání je možná nejběžnějším způsobem interakce s prvky webu. The click() metoda se používá k simulaci kliknutí na jakýkoli prvek. Následující Selenium Java příklad ukazuje jak click() byl použit ke kliknutí na Mercury Tlačítko „Přihlásit se“ prohlídky.

Kliknutí na prvek

Při použití metody click() je třeba vzít v úvahu následující věci.

  • Nepotřebuje žádný parametr/argument.
  • Metoda automaticky čeká na načtení nové stránky, pokud je to možné.
  • Prvek, na který se klikne, musí být viditelný (výška a šířka nesmí být rovna nule).

Získejte příkazy

Příkazy Get načítají různé důležité informace 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í
dostat()

Ukázka použití:

  • Automaticky otevře nové okno prohlížeče a načte stránku, kterou určíte v závorkách.
  • Je to protějšek Selenium Příkaz IDE „open“.
  • Parametr musí být a Řetězec objekt.
getTitle()

Ukázka použití:

  • Nevyžaduje žádné parametry
  • Načte název aktuální stránky
  • Úvodní a koncová bílá místa jsou oříznuta
  • Pokud stránka nemá žádný název, vrátí řetězec null
getPageSource()

Ukázka použití:

  • Nevyžaduje žádné parametry
  • Vrátí zdrojový kód stránky jako hodnotu řetězce
getCurrentUrl()

Ukázka použití:

  • Nevyžaduje žádné parametry
  • Načte řetězec představující aktuální adresu URL, na kterou se prohlížeč dívá
getText()

Ukázka použití:

  • Načte vnitřní text prvku, který určíte

Procházet příkazy

Tyto příkazy vám umožňují obnovit, přejít a přepínat tam a zpět mezi různými webovými stránkami.

navigovat do()

Ukázka použití:

  • Automaticky otevře nové okno prohlížeče a načte stránku, kterou určíte v závorkách.
  • Dělá přesně to samé jako get() metoda.
navigate().refresh()

Ukázka použití:

  • Nevyžaduje žádné parametry.
  • Obnoví aktuální stránku.
navigovat().zpět()

Ukázka použití:

  • Nevyžaduje žádné parametry
  • Vrátí vás o jednu stránku zpět do historie prohlížeče.
navigovat().forward()

Ukázka použití:

  • Nevyžaduje žádné parametry
  • Přesune vás vpřed o jednu stránku v historii prohlížeče.

Zavření a ukončení prohlížeče Windows

zavřít()

Ukázka použití:

  • Nevyžaduje žádné parametry
  • Zavře pouze okno prohlížeče, které WebDriver aktuálně ovládá.
přestat()

Ukázka použití:

  • Nevyžaduje žádné parametry
  • Zavře všechna okna, která WebDriver otevřel.

Zavření a ukončení prohlížeče Windows

Pro názornou ukázku rozdílu mezi close() a quit(), zkuste spustit níže uvedený kód. Využívá webovou stránku, která po načtení automaticky vyskočí okno a po opuštění otevře další.

Zavření a ukončení prohlížeče Windows

Všimněte si, že bylo zavřeno pouze nadřazené okno prohlížeče a nikoli dvě vyskakovací okna.

Zavření a ukončení prohlížeče Windows

Pokud ale použijete quit(), všechna okna se zavřou – nejen to nadřazené. Zkuste spustit kód níže a všimnete si, že se automaticky zavřou i dvě vyskakovací okna výše.

package newproject;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class PG3 {
    public static void main(String[] args) {
    	System.setProperty("webdriver.gecko.driver","C:\\geckodriver.exe");
    	WebDriver driver = new FirefoxDriver();
        driver.get("http://www.popuptest.com/popuptest2.html");
        driver.quit();  // using QUIT all windows will close
    }
}

Přepínání mezi snímky

Abychom získali přístup k prvkům GUI v rámci, měli bychom nejprve nasměrovat WebDriver, aby se zaměřil na rámec nebo vyskakovací okno, než budeme moci přistupovat k prvkům v nich. Vezměme si například webovou stránku https://demo.guru99.com/selenium/deprecated.html

Přepínání mezi snímky

Tato stránka má 3 rámce, jejichž atributy „name“ jsou uvedeny výše. Přejeme si získat přístup k odkazu „Zastaralé“ zakroužkovanému výše žlutě. Abychom to mohli udělat, musíme nejprve instruovat WebDriver, aby se přepnul do rámce „classFrame“ pomocí "switchTo().frame()" metoda. Jako parametr pro část „frame()“ použijeme atribut name snímku.

package newproject;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class PG4 {
	  public static void main(String[] args) {
		  	System.setProperty("webdriver.gecko.driver","C:\\geckodriver.exe");  
		  	WebDriver driver = new FirefoxDriver();
	        driver.get("https://demo.guru99.com/selenium/deprecated.html");
	        driver.switchTo().frame("classFrame");
	        driver.findElement(By.linkText("Deprecated")).click();
	        driver.close(); 
	    }
}

Po provedení tohoto kódu uvidíte, že rámec „classFrame“ se přesune na stránku „Deprecated API“, což znamená, že náš kód úspěšně získal přístup k odkazu „Deprecated“.

Přepínání mezi vyskakovacím oknem Windows

WebDriver umožňuje zobrazení vyskakovacích oken, jako jsou upozornění, na rozdíl od in Selenium IDE. Pro přístup k prvkům v rámci výstrahy (jako je zpráva, kterou obsahuje), musíme použít "switchTo().alert()" metoda. 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í "getText()" a poté automaticky zavřete okno výstrahy pomocí "switchTo().alert().accept()" metoda.

Nejprve zamiřte k https://output.jsbin.com/usidix/1 a ručně klikněte na „Go!“ a podívejte se sami na text zprávy.

Přepínání mezi vyskakovacím oknem Windows

Pojďme se podívat na Selenium příklad kódu, jak to udělat -

package mypackage;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class myclass {

    public static void main(String[] args) {
    	System.setProperty("webdriver.gecko.driver","C:\\geckodriver.exe");
        WebDriver driver = new FirefoxDriver();
        String alertMessage = "";

        driver.get("http://jsbin.com/usidix/1");
        driver.findElement(By.cssSelector("input[value=\"Go!\"]")).click();
        alertMessage = driver.switchTo().alert().getText();
        driver.switchTo().alert().accept();
       
        System.out.println(alertMessage);
        driver.quit();
       
    }
}

Na Eclipse konzole, všimněte si, že tištěná výstražná zpráva je:

Přepínání mezi vyskakovacím oknem Windows

Čeká

Existují dva druhy čekání.

  1. Implicitní čekání – slouží k nastavení výchozí doby čekání v průběhu programu
  2. Explicitní čekání – slouží k nastavení doby čekání pouze pro konkrétní instanci

Implicitní čekání

  • Je jednodušší kódovat než Explicit Waits.
  • Obvykle je deklarován 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í, museli byste tento balíček importovat do svého kódu.

Implicitní čekání

Poté do instanční části vašeho kódu přidejte toto.

Implicitní čekání

Explicitně čekejte

Explicitní čekání se provádí pomocí tříd WebDriverWait a ExpectedCondition. Pro následující Selenium Například WebDriver, počkáme až 10 sekund, než se prvek, jehož id je „username“, zviditelní, než přejdeme k dalšímu příkazu. Zde jsou kroky.

Krok 1:

Importujte tyto dva balíčky:

Explicitně čekejte

Krok 2:

Deklarujte proměnnou WebDriverWait. V tomto příkladu použijeme jako název proměnné „myWaitVar“.

Explicitně čekejte

Krok 3:

Použijte myWaitVar s ExpectedConditions na částech, kde potřebujete, aby došlo k explicitnímu čekání. V tomto případě použijeme explicitní čekání na „uživatelské jméno“ (Mercury Prohlídky domovské stránky), než na něj napíšeme text „výukový program“.

Explicitně čekejte

Podmínky

Následující metody se používají v podmíněných a looping operace —

  • je povoleno() se používá, když chcete před provedením příkazu ověřit, zda je určitý prvek povolen nebo ne.

Podmínky isEnabled()

  • isDisplayed() se používá, když chcete před provedením příkazu ověřit, zda je určitý prvek zobrazen nebo ne.

Podmínky isDisplayed()

  • isSelected() se používá, když chcete ověřit, zda je určitý zaškrtávací políčko, přepínač nebo možnost v rozevíracím seznamu je vybráno. Na jiných prvcích to nefunguje.

Podmínky isSelected()

Použití ExpectedConditions

Třída ExpectedConditions nabízí širší sadu podmínek, které můžete použít ve spojení s metodou Until() WebDriverWait.

Níže jsou uvedeny některé z nejběžnějších metod ExpectedConditions.

  • alertIsPresent() – čeká, dokud se nezobrazí výstražné pole.

Použití ExpectedConditions alertIsPresent()

  • elementToBeClickable() – Čeká, dokud nebude prvek viditelný a zároveň povolený. Vzorek Selenium Code níže bude čekat, dokud se element s id=”username” nestane viditelným a povoleným, než tento element přiřadí jako proměnnou WebElement s názvem „txtUserName”.

Použití ExpectedConditions

  • frameToBeAvailableAndSwitchToIt() – Počká, až bude daný rámec již dostupný, a poté se na něj automaticky přepne.

Použití ExpectedConditions elementToBeClickable()

Chytání výjimek

Při použití isEnabled(), isDisplayed() a isSelected() WebDriver předpokládá, že prvek již na stránce existuje. V opačném případě bude házet a NoSuchElementException. Abychom tomu zabránili, měli bychom použít blok try-catch, aby nedošlo k přerušení programu.

WebElement txtbox_username = driver.findElement(By.id("username"));
try{
        if(txtbox_username.isEnabled()){
            txtbox_username.sendKeys("tutorial");
        }
    }

catch(NoSuchElementException nsee){
            System.out.println(nsee.toString());
 }

Pokud používáte explicitní čekání, typ výjimky, kterou byste měli zachytit, je „TimeoutException“.

Chytání výjimek

Shrnutí

  • Chcete-li začít používat rozhraní WebDriver API, musíte importovat alespoň tyto dva balíčky.
  • org.openqa.selenium.*
  • org.openqa.selenium.firefox.FirefoxŘidič
  • Jedno get() metoda je ekvivalentem Selenium Příkaz IDE „open“.
  • Umístění prvků ve WebDriver se provádí pomocí findElement() metoda.
  • K dispozici jsou následující možnosti pro umístění prvků ve WebDriver:
  • By.className
  • By.cssSelector
  • Podle.id
  • By.linkText
  • Podle jména
  • By.partialLinkText
  • By.tagName
  • By.xpath
  • The By.cssSelector() není podporují "obsahuje" vlastnost.
  • Prvek můžete vytvořit pomocí třídy WebElement.
  • Kliknutí na prvek se provádí pomocí click() metoda.
  • WebDriver poskytuje tyto užitečné příkazy get:
  • dostat()
  • getTitle()
  • getPageSource()
  • getCurrentUrl()
  • getText()
  • WebDriver poskytuje tyto užitečné navigační příkazy
  • navigovat().forward()
  • navigovat().zpět()
  • navigovat do()
  • navigate().refresh()
  • Metody close() a quit() se používají k zavření oken prohlížeče. Close() používá se k zavření jednoho okna; zatímco quit() se používá k uzavření všech oken přidružených k nadřazenému oknu, které ovládal objekt WebDriver.
  • Jedno switchTo().frame() a switchTo().alert() metody se používají k nasměrování zaměření WebDriveru na snímek nebo výstrahu.
  • Implicit waits se používají k nastavení doby čekání v průběhu programu, zatímco explicit waits se používají pouze na určité části.
  • Můžete použít isEnabled(), isDisplayed(),isSelected() a jejich kombinaci WebDriverPočkejte a Očekávané podmínky metody při ověřování stavu prvku. Neověřují však, zda prvek neexistuje.
  • Když bylo zavoláno isEnabled(), isDisplayed(), nebo isSelected() v době, kdy prvek neexistoval, WebDriver vyvolá NoSuchElementException.
  • Když byly volány metody WebDriverWait a ExpectedConditions, zatímco prvek neexistoval, WebDriver by vyvolal TimeoutException.

Poznámka:

driver.get(): Tato metoda se používá k navigaci na konkrétní webovou stránku. Neuchovává však historii prohlížeče ani soubory cookie. V důsledku toho nebudou tlačítka vpřed a vzad fungovat a kliknutí na ně nenaplánuje navigaci po stránce.

driver.navigate(): Tato metoda se také používá k navigaci na konkrétní webovou stránku, ale zachovává historii prohlížeče a soubory cookie. To umožňuje použití tlačítek vpřed a vzad pro navigaci mezi stránkami při kódování testovacího případu.

Shrňte tento příspěvek takto: