Selenium Webstuurprogramma Java Programmavoorbeeld
⚡ Slimme samenvatting
Selenium webdriver Java Het programmavoorbeeld leidt u door uw eerste complete automatiseringsscript. LessDe tests behandelen onderwerpen zoals het instellen van de testomgeving, het lokaliseren van elementen, het verzenden van invoer, navigatie, validatie, wachten, foutafhandeling en best practices voor betrouwbare WebDriver-tests.
Selenium Java Voorbeeld
De Java class “myclass” die we in de vorige tutorial hebben gemaakt, laten we proberen een WebDriver-script te maken dat:
Stap 1: halen Mercury De startpagina van Tours
Stap 2: verifieer de titel ervan
Stap 3: druk het resultaat van de vergelijking af
Stap 4: sluit het voordat u het hele programma beëindigt.
Selenium WebDriver-voorbeeld Code
Hieronder vindt u de daadwerkelijke WebDriver-code voor de logica die in het bovenstaande scenario wordt gepresenteerd
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(); } }
Opmerking: starten Firefox 35, moet u het door Mozilla gemaakte gekko-stuurprogramma gebruiken om Web Driver te gebruiken. Selenium 3.0, gecko en firefox hebben compatibiliteitsproblemen en het correct instellen ervan kan een lastige opgave worden. Als de code niet werkt, downgrade dan naar Firefox versie 47 of lager. Als alternatief kunt u uw scripts uitvoeren in Chrome. Selenium werkt out of the box voor Chrome. U hoeft slechts 3 regels code te wijzigen om uw script te laten werken met Chrome of Firefox
De code uitleggen
Pakketten importeren
Om te beginnen moet u de volgende twee pakketten importeren:
- org.openqa.selenium.*– bevat de WebDriver-klasse die nodig is om een nieuwe browser te instantiëren die is geladen met een specifiek stuurprogramma
- org.openqa.selenium.firefox.Firefoxbestuurder - bevat de FirefoxBestuurdersklasse die nodig is om a te instantiëren Firefox-specifiek stuurprogramma naar de browser die wordt geïnstantieerd door de WebDriver-klasse
Als uw test ingewikkelder acties vereist, zoals toegang krijgen tot een andere klasse, browserscreenshots maken of externe bestanden manipuleren, zult u zeker meer pakketten moeten importeren.
Objecten en variabelen instantiëren
Normaal gesproken is dit de manier waarop een driverobject wordt geïnstantieerd.
WebDriver driver = new FirefoxDriver();
A FirefoxStuurprogrammaklasse zonder parameters betekent dat de standaard Firefox profiel wordt gelanceerd door onze Java programma. De standaard Firefox profiel is vergelijkbaar met lanceren Firefox in de veilige modus (er zijn geen extensies geladen).
Voor het gemak hebben we de basis opgeslagen. URL en de verwachte titel als variabelen.
Een browsersessie starten
WebDrivers krijgen() Deze methode wordt gebruikt om een nieuwe browsersessie te starten en deze door te sturen naar de URL die u als parameter opgeeft.
driver.get(baseUrl);
Haal de werkelijke paginatitel op
De WebDriver-klasse heeft de getTitle () methode die altijd wordt gebruikt om de paginatitel van de momenteel geladen pagina te verkrijgen.
actualTitle = driver.getTitle();
Vergelijk de verwachte en werkelijke waarden
Dit gedeelte van de code gebruikt eenvoudigweg een basis Java if-else-structuur om de werkelijke titel te vergelijken met de verwachte titel.
if (actualTitle.contentEquals(expectedTitle)){ System.out.println("Test Passed!"); } else { System.out.println("Test Failed"); }
Een browsersessie beëindigen
De "dichtbij()”-methode wordt gebruikt om het browservenster te sluiten.
driver.close();
Het hele programma beëindigen
Als u deze opdracht gebruikt zonder eerst alle browservensters te sluiten, wordt uw hele Java het programma eindigt terwijl het browservenster open blijft.
System.exit(0);
De test uitvoeren
Er zijn twee manieren om code uit te voeren Eclipse IDE.
- On Eclipse's menubalk, klik op Uitvoeren > Uitvoeren.
- Media Ctrl + F11 om de volledige code uit te voeren.
Als je alles goed hebt gedaan, Eclipse zou "Test geslaagd!" weergeven
GUI-elementen lokaliseren
Het lokaliseren van elementen in WebDriver gebeurt met behulp van de “findElement(door.locator())methode. Het “locator”-gedeelte van de code is hetzelfde als elk van de locators die eerder zijn besproken in de Selenium IDE hoofdstukken van deze tutorials. In feite wordt aanbevolen dat u GUI-elementen lokaliseert met behulp van IDE en, zodra deze succesvol zijn geïdentificeerd, de code naar WebDriver exporteert.
Hier is een Selenium Voorbeeldcode die een element lokaliseert aan de hand van zijn ID. Facebook wordt als basis gebruikt. 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); } }
We gebruikten de getTagNaam() methode om uit tetract de tagnaam van dat specifieke element met de id "email". Wanneer deze code wordt uitgevoerd, zou deze de tagnaam "input" correct moeten kunnen identificeren en deze moeten afdrukken. Eclipse's Consolevenster.
Samenvatting voor het lokaliseren van elementen
| Variatie | Beschrijving | Sample |
|---|---|---|
| By.className | vindt elementen op basis van de waarde van het attribuut “class”. | findElement(By.className(“someClassName”)) |
| Door.cssSelector | vindt elementen op basis van de onderliggende CSS Selector-engine van het stuurprogramma | findElement(By.cssSelector(“input#email”)) |
| Door.id | lokaliseert elementen op basis van de waarde van hun 'id'-attribuut |
findElement(By.id(“someId”)) |
| Door.linkText | vindt een linkelement op basis van de exacte tekst die het weergeeft |
findElement(By.linkText(“REGISTRATIE”)) |
| Bij naam | lokaliseert elementen op basis van de waarde van het attribuut “name”. |
findElement(By.name(“eenNaam”)) |
| Door.gedeeltelijkeLinkText | lokaliseert elementen die de gegeven linktekst bevatten |
findElement(By.partialLinkText(“REG”)) |
| Op.tagnaam | lokaliseert elementen op basis van hun tagnaam |
findElement(By.tagName(“div”)) |
| Door.xpath | lokaliseert elementen via 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]”)) |
Opmerking over het gebruik van findElement(By.cssSelector())
By.cssSelector() ondersteunt de functie "bevat" niet. Houd rekening met de Selenium IDE-code hieronder –
In Selenium IDE hierboven, de hele test is geslaagd. Echter in de Selenium WebDriver-script hieronder genereerde dezelfde test een fout omdat WebDriver het trefwoord “bevat” niet ondersteunt bij gebruik in de methode By.cssSelector().
Gemeenschappelijke commando's
Webelementen instantiëren
In plaats van de lange syntaxis "driver.findElement(By.locator())" te gebruiken elke keer dat u een bepaald element wilt benaderen, kunnen we een WebElement-object hiervoor instantiëren. De WebElement-klasse is opgenomen in het pakket "org.openqa.selenium.*".
Klikken op een element
Klikken is misschien wel de meest gebruikelijke manier van interactie met webelementen. De click() methode wordt gebruikt om het klikken op een element te simuleren. De volgende Selenium Java voorbeeld laat zien hoe click() werd gebruikt om op te klikken Mercury De knop 'Inloggen' van Tours.
Bij het gebruik van de click()-methode moet u op de volgende zaken letten.
- Er zijn geen parameters/argumenten voor nodig.
- De methode wacht automatisch tot er een nieuwe pagina wordt geladen, indien van toepassing.
- Het op te klikken element moet zichtbaar zijn (hoogte en breedte mogen niet gelijk zijn aan nul).
Krijg opdrachten
Get-opdrachten halen verschillende belangrijke informatie over de pagina/het element op. Hier zijn enkele belangrijke “get”-opdrachten waarmee u bekend moet zijn.
| commando's | Gebruik |
|---|---|
| krijgen()
Voorbeeld gebruik: |
|
| getTitle ()
Voorbeeld gebruik: |
|
| getPageSource()
Voorbeeld gebruik: |
|
| getCurrentUrl()
Voorbeeld gebruik: |
|
| getText ()
Voorbeeld gebruik: |
|
Navigeer door opdrachten
Met deze opdrachten kunt u verschillende webpagina's vernieuwen, openen en heen en weer schakelen.
| navigeren naar()
Voorbeeld gebruik: |
|
| navigeren().vernieuwen()
Voorbeeld gebruik: |
|
| navigeren().terug()
Voorbeeld gebruik: |
|
| navigeren().vooruit()
Voorbeeld gebruik: |
|
Browser sluiten en afsluiten Windows
| dichtbij()
Voorbeeld gebruik: |
|
| quit ()
Voorbeeld gebruik: |
|
Om het verschil tussen duidelijk te illustreren close() en quit(), probeer de onderstaande code uit te voeren. Het maakt gebruik van een webpagina die automatisch een venster opent bij het laden van de pagina en een ander opent na het afsluiten.
Merk op dat alleen het bovenliggende browservenster werd gesloten en niet de twee pop-upvensters.
Maar als u quit() gebruikt, worden alle vensters gesloten, niet alleen het bovenliggende venster. Probeer de onderstaande code uit te voeren en u zult merken dat de twee pop-ups hierboven ook automatisch worden gesloten.
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 } }
Schakelen tussen frames
Om toegang te krijgen tot GUI-elementen in een frame, moeten we WebDriver eerst opdracht geven zich eerst op het frame of het pop-upvenster te concentreren voordat we toegang krijgen tot elementen daarin. Laten we bijvoorbeeld de webpagina nemen https://demo.guru99.com/selenium/deprecated.html
Deze pagina heeft 3 frames waarvan de “naam”-attributen hierboven zijn aangegeven. We willen toegang krijgen tot de link 'Verouderd' die hierboven in het geel is omcirkeld. Om dat te doen, moeten we WebDriver eerst de opdracht geven om over te schakelen naar het “classFrame”-frame met behulp van de “schakelNaar().frame()” methode. We zullen het naamattribuut van het frame gebruiken als de parameter voor het gedeelte “frame()”.
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(); } }
Na het uitvoeren van deze code zult u zien dat het ‘classFrame’-frame naar de pagina ‘Verouderde API’ wordt gebracht, wat betekent dat onze code met succes toegang heeft gekregen tot de link ‘Verouderd’.
Schakelen tussen pop-ups Windows
WebDriver maakt het mogelijk om pop-upvensters weer te geven die lijken op waarschuwingen, in tegenstelling tot Selenium IDE. Om toegang te krijgen tot de elementen binnen de waarschuwing (zoals het bericht dat deze bevat), moeten we de "switchTo().alert()" methode. In de onderstaande code gebruiken we deze methode om toegang te krijgen tot het waarschuwingsvenster en vervolgens het bericht op te halen met behulp van de "getText()" methode, en sluit vervolgens automatisch het waarschuwingsvenster met behulp van de "switchTo().alert().accept()" methode.
Ga eerst naar https://output.jsbin.com/usidix/1 en klik handmatig op de knop "Go!" knop daar en bekijk zelf de berichttekst.
Laten we eens kijken Selenium voorbeeldcode om dit te doen-
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(); } }
Op de Eclipse console, merk op dat het afgedrukte waarschuwingsbericht het volgende is:
Wacht
Er zijn twee soorten wachttijden.
- Impliciet wachten – wordt gebruikt om de standaardwachttijd voor het hele programma in te stellen
- Expliciet wachten – wordt gebruikt om de wachttijd alleen voor een bepaald exemplaar in te stellen
Impliciete wachttijd
- Het is eenvoudiger te coderen dan Explicit Waits.
- Het wordt meestal gedeclareerd in het instantiatiegedeelte van de code.
- U heeft slechts één extra pakket nodig om te importeren.
Om een impliciete wachttijd te gaan gebruiken, moet u dit pakket in uw code importeren.
Voeg dit vervolgens toe aan het instantiatiegedeelte van uw code.
Expliciete wachttijd
Expliciete wachttijden worden uitgevoerd met behulp van de klassen WebDriverWait en ExpectedCondition. Voor de volgende Selenium WebDriver zullen we bijvoorbeeld maximaal 10 seconden wachten totdat een element met de id “gebruikersnaam” zichtbaar wordt voordat we doorgaan met de volgende opdracht. Hier zijn de stappen.
Stap 1:
Importeer deze twee pakketten:
Stap 2:
Declareer een WebDriverWait-variabele. In dit voorbeeld gebruiken we “myWaitVar” als de naam van de variabele.
Stap 3:
Gebruik myWaitVar met ExpectedConditions voor gedeelten waar u expliciet moet wachten. In dit geval gebruiken we expliciet wachten op de “gebruikersnaam” (Mercury Tours HomePage) invoer voordat we de tekst “tutorial” erop typen.
Voorwaarden
De volgende methoden worden gebruikt in voorwaardelijke en loo-constructies.ping operaties —
- is ingeschakeld() wordt gebruikt wanneer u wilt verifiëren of een bepaald element is ingeschakeld of niet voordat u een opdracht uitvoert.
- wordt weergegeven() wordt gebruikt als u wilt controleren of een bepaald element wordt weergegeven voordat u een opdracht uitvoert.
- is geselecteerd() wordt gebruikt wanneer u wilt verifiëren of een bepaalde selectievakje, keuzerondje of optie in een vervolgkeuzelijst is geselecteerd. Op andere elementen werkt het niet.
Verwachte voorwaarden gebruiken
De klasse ExpectedConditions biedt een bredere set voorwaarden die u kunt gebruiken in combinatie met de methode until() van WebDriverWait.
Hieronder staan enkele van de meest voorkomende ExpectedConditions-methoden.
- alertIsAanwezig() – wacht totdat er een waarschuwingsvenster wordt weergegeven.
- elementToBeClickable() – Wacht tot een element zichtbaar en tegelijkertijd ingeschakeld is. Het voorbeeld Selenium Code Hieronder wordt gewacht totdat het element met id=”username” eerst zichtbaar en ingeschakeld is, voordat aan dat element een WebElement-variabele met de naam “txtUserName” wordt toegewezen.
- frameToBeAvailableAndSwitchToIt() – Wacht tot het opgegeven frame al beschikbaar is en schakelt er vervolgens automatisch naar over.
Uitzonderingen opvangen
Bij gebruik van isEnabled(), isDisplayed() en isSelected() gaat WebDriver ervan uit dat het element al op de pagina bestaat. Anders zal het een Geen DergelijkElementUitzondering. Om dit te voorkomen, moeten we een try-catch-blok gebruiken, zodat het programma niet wordt onderbroken.
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()); }
Als u expliciete wachttijden gebruikt, is het type uitzondering dat u moet opvangen de “TimeoutException”.


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

.png)


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

.png)
.png)
.png)