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:
- 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
- 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.
- On Eclipse's menu, klikněte Spustit > Spustit.
- Pro média Ctrl + F11 pro spuštění celého kódu.
Pokud jste vše udělali správně, Eclipse vypíše "Test prošel!"
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.
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 –
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().
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.*“.
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.
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í: |
|
| getTitle()
Ukázka použití: |
|
| getPageSource()
Ukázka použití: |
|
| getCurrentUrl()
Ukázka použití: |
|
| getText()
Ukázka použití: |
|
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í: |
|
| navigate().refresh()
Ukázka použití: |
|
| navigovat().zpět()
Ukázka použití: |
|
| navigovat().forward()
Ukázka použití: |
|
Zavření a ukončení prohlížeče Windows
| zavřít()
Ukázka použití: |
|
| přestat()
Ukázka použití: |
|
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ší.
Všimněte si, že bylo zavřeno pouze nadřazené okno prohlížeče a nikoli dvě vyskakovací okna.
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
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.
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:
Čeká
Existují dva druhy čekání.
- Implicitní čekání – slouží k nastavení výchozí doby čekání v průběhu programu
- 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.
Poté do instanční části vašeho kódu přidejte toto.
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:
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 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“.
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.
- isDisplayed() se používá, když chcete před provedením příkazu ověřit, zda je určitý prvek zobrazen nebo ne.
- 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.
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.
- 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”.
- frameToBeAvailableAndSwitchToIt() – Počká, až bude daný rámec již dostupný, a poté se na něj automaticky přepne.
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“.
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ímcoquit()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()aswitchTo().alert()metody se používají k nasměrování zaměření WebDriveru na snímek nebo výstrahu. Implicit waitsse používají k nastavení doby čekání v průběhu programu, zatímcoexplicit waitsse 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.

.png)
.png)
.png)
.png)
.png)
.png)

.png)


.png)
.png)
.png)
.png)
.png)
.png)

.png)
.png)
.png)