Eerste Selenium Webdriver Script: JAVA Sample Code Example
met behulp van de Java class “myclass” die we in de vorige tutorial hebben aangemaakt, proberen we een WebDriver script te maken dat:
- De homepage van Mercury Tours zou ophalen
- controleer de titel
- print De resultaat van de vergelijking
- sluit het voordat u het hele programma beëindigt.
WebDriver Code
Hieronder is de werkelijke WebDriver code voor de logica weergegeven door het bovenstaande scenario
opmerking: Vanaf Firefox 35, je nodig hebt om gecko driver gemaakt door Mozilla gebruiken om Web Driver te gebruiken. Selenium 3.0, gecko en firefox heeft compatibiliteitsproblemen en het correct instellen ervan kan een bergopwaartse taak worden. Als de code niet werkt, downgrade naar Firefox versie 47 of lager. Als alternatief kunt u uw scripts uitvoeren op Chrome. Selenium werkt uit de doos voor chroom. U hoeft alleen maar 3 regels code te wijzigen om uw script te laten werken met Chrome of Firefox
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 = "http://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(); }}
uitleg van de code
om te beginnen, moet u de volgende twee pakketten importeren:
- org.openqa.selenium.* – bevat de klasse WebDriver die nodig is om een nieuwe browser te installeren die geladen is met een specifiek stuurprogramma
- org.openqa.selenium.firefox.FirefoxDriver-bevat de firefoxdriver-klasse die nodig is om een Firefox-specifiek stuurprogramma op de browser te installeren die is ingesteld door de WebDriver-klasse
als uw test ingewikkelder acties nodig heeft, zoals het openen van een andere klasse, het nemen van browser screenshots of het manipuleren van externe bestanden, zult u zeker meer pakketten moeten importeren.
Instantiating objects and variables
normaal gesproken is dit hoe een driver object wordt geïnstalleerd.
een firefoxdriver klasse zonder parameters betekent dat het standaard Firefox profiel zal worden gestart door ons Java-programma. De standaard Firefox-profiel is vergelijkbaar met de lancering van Firefox in de veilige modus (geen extensies worden geladen).
voor het gemak hebben we de basis-URL en de verwachte titel opgeslagen als variabelen.
het starten van een browsersessie
WebDriver ‘ s get() methode wordt gebruikt om een nieuwe browsersessie te starten en stuurt deze naar de URL die u als parameter opgeeft.
haal de werkelijke Paginatitel
De klasse WebDriver heeft de gettitle() methode die altijd wordt gebruikt om de paginatitel van de momenteel geladen pagina te verkrijgen.
vergelijk de verwachte en werkelijke waarden
Dit gedeelte van de code gebruikt gewoon een basis Java if-else structuur om de werkelijke titel met de verwachte te vergelijken.
een browsersessie beëindigen
de methode” close () ” wordt gebruikt om het browservenster te sluiten.
het hele programma beëindigen
Als u dit commando gebruikt zonder eerst alle browservensters te sluiten, zal uw hele Java-programma eindigen terwijl het browservenster open blijft.
het uitvoeren van de Test
Er zijn twee manieren om code uit te voeren in Eclipse IDE.
- klik op de menubalk van Eclipse op Uitvoeren > uitvoeren.
- druk op Ctrl+F11 om de volledige code uit te voeren.
als je alles correct hebt gedaan, zou Eclipse output “Test Geslaagd!”
GUI-elementen lokaliseren
elementen in WebDriver lokaliseren wordt gedaan met behulp van de ” findElement(By.locator ())” methode. Het “locator” deel van de code is hetzelfde als alle locators die eerder besproken zijn in de Selenium IDE hoofdstukken van deze tutorials. In feite, is het raadzaam dat u GUI-elementen te lokaliseren met behulp van IDE en eenmaal met succes geïdentificeerd exporteren van de code naar WebDriver.
Hier is een Selenium sample code die een element lokaliseert aan de hand van zijn id. Facebook wordt gebruikt als de basis 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 hebben de methode getTagName() gebruikt om de tagnaam te extraheren van dat specifieke element waarvan de id”email” is. Wanneer deze code wordt uitgevoerd, moet deze in staat zijn om de tagnaam “input” correct te identificeren en zal deze afdrukken op het consolevenster van Eclipse.
Summary for locating elements
variatie | Description | Sample |
---|---|---|
By.className | vindt elementen gebaseerd op de waarde van het attribuut “class” | findElement(By.className (“someClassName”)) |
By.cssSelector | vindt elementen gebaseerd op de onderliggende CSS Selector engine van het stuurprogramma | findElement(door.cssSelector (“input#email”)) |
By.id | lokaliseert elementen met de waarde van hun “id” attribuut | findElement(By.id (“someId”)) |
By.linkText | vindt een link-element door de exacte tekst die het toont | findElement(By.linkText (“REGISTRATION”)) |
By.name | lokaliseert elementen met de waarde van het attribuut” name “ | findElement (By.name(“someName”)) |
By.partialLinkText | locates elements that contain the given link text | findElement(By.partialLinkText(“REG”)) |
By.tagName | locates elements by their tag name | findElement(By.tagName(“div”)) |
By.xpath | locates elements via XPath | findElement(By.xpath (“//html/body/div/table/tbody/tr/td/table/ tbody/tr/td/table/tbody/tr/td/table/tbody/tr/td/ form/table/tbody/tr”) |
opmerking over het gebruik van findElement (door.cssSelector ())
By.cssSelector () ondersteunt de functie “bevat” niet. Neem de Selenium IDE code hieronder –
In Selenium IDE hierboven, de hele test geslaagd. Echter in de Selenium WebDriver script hieronder, dezelfde test gegenereerd een fout, omdat WebDriver niet ondersteunt het” bevat ” trefwoord bij gebruik in de door.cssSelector () methode.
Common Commands
Instantiating Web Elements
in plaats van het gebruik van de lange ” driver.findElement (door.locator ())” syntaxis elke keer dat je een bepaald element opent, kunnen we er een webelement object voor instantiëren. De webelement klasse is opgenomen in de ” org.openqa.selenium.*” pakket.
klikken op een Element
klikken is misschien wel de meest voorkomende manier van interactie met webelementen. De click () methode wordt gebruikt om het klikken van een element te simuleren. Het volgende Selenium Java voorbeeld laat zien hoe click () werd gebruikt om te klikken op Mercury Tours’ “Sign-In” knop.
volgende dingen moeten worden opgemerkt bij het gebruik van de click () methode.
- Er wordt geen parameter/argument gebruikt.
- de methode wacht automatisch op het laden van een nieuwe pagina indien van toepassing.
- het element waarop moet worden geklikt, moet zichtbaar zijn (hoogte en breedte mogen niet gelijk zijn aan nul).
commando ’s ophalen
commando’ s ophalen verschillende belangrijke informatie ophalen over de pagina / element. Hier zijn een aantal belangrijke” get “commando’ s die u bekend moet zijn met.
opdrachten | gebruik | get() voorbeeld gebruik: |
|
---|---|
getTitle () voorbeeld gebruik: |
|
getPageSource() voorbeelden: |
|
getCurrentUrl() Voorbeeld van gebruik: |
|
getText() voorbeelden: |
|
Navigeren commando ‘ s
Deze opdrachten kunt u vernieuwen,go-in en heen en weer schakelen tussen de verschillende webpagina ‘ s.
navigate ().to () voorbeeld gebruik: |
|
navigeer ().refresh () voorbeeld gebruik: |
|
navigeer ().back () voorbeeld gebruik: |
|
navigeer ().forward () Sample gebruik: |
|
browservensters afsluiten
Close() sample usage: |
|
quit () voorbeeld gebruik: |
|
om het verschil tussen close() en quit duidelijk te illustreren(), probeer de onderstaande code uit te voeren. Het maakt gebruik van een webpagina die automatisch verschijnt een venster bij het laden van de pagina en opent een ander na het verlaten.
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 de ouder. Probeer het uitvoeren van de onderstaande code en u zult merken dat de twee pop-ups hierboven automatisch ook 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 eerst WebDriver richten op het frame of pop-up venster voordat we toegang krijgen tot elementen binnen hen. Neem bijvoorbeeld de webpagina http://demo.guru99.com/selenium/deprecated.html
deze pagina heeft 3 frames waarvan de” naam ” attributen hierboven zijn aangegeven. We willen toegang krijgen tot de” verouderde ” link die hierboven in het geel is omcirkeld. Om dat te doen, moeten we eerst WebDriver instrueren om over te schakelen naar het “classFrame” frame met behulp van de “switchTo().frame ()” methode. We zullen de naam attribuut van het frame gebruiken als de parameter voor het “frame()” deel.
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("http://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 wordt genomen naar de” Deprecated API “pagina, wat betekent dat onze code met succes in staat was om toegang te krijgen tot de” Deprecated ” link.
schakelen tussen Pop-upvensters
WebDriver laat pop-upvensters zoals waarschuwingen worden weergegeven, in tegenstelling tot in Selenium IDE. Om toegang te krijgen tot de elementen binnen de waarschuwing (zoals het bericht dat het bevat), moeten we de “switchTo () gebruiken.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 methode “getText()” en vervolgens automatisch het waarschuwingsvenster te sluiten met behulp van de “switchTo().waarschuwing().accepteren () ” methode.
ga eerst naar http://jsbin.com/usidix/1 en klik handmatig op ” Go!”knop daar en zie voor jezelf de tekst van het bericht.
laat de Selenium voorbeeldcode zien 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")).click(); alertMessage = driver.switchTo().alert().getText(); driver.switchTo().alert().accept(); System.out.println(alertMessage); driver.quit(); }}
op de Eclipse console is het afgedrukte waarschuwingsbericht:
waits
Er zijn twee soorten Waits.
- impliciet wachten-gebruikt om de standaard wachttijd in het hele programma in te stellen
- expliciet wachten – gebruikt om de wachttijd voor een bepaalde instantie alleen in te stellen
impliciet wachten
- Het is eenvoudiger om te coderen dan expliciete wachten.
- Het wordt meestal aangegeven in het instantiation gedeelte van de code.
- u hebt slechts één extra pakket nodig om te importeren.
om een impliciete wachttijd te gebruiken, moet u dit pakket importeren in uw code.
voeg dan op het instantiation gedeelte van uw code dit toe.
expliciete Wait
expliciete waits worden gedaan met behulp van de WebDriverWait en ExpectedCondition classes. Voor het volgende Selenium WebDriver voorbeeld, zullen we tot 10 seconden wachten tot een element waarvan het id “gebruikersnaam” is zichtbaar wordt voordat we verder gaan met het volgende commando. Hier zijn de stappen.
Stap 1
importeer deze twee pakketten:
Stap 2
Declare a WebDriverWait variable. In dit voorbeeld gebruiken we “myWaitVar” als de naam van de variabele.
Stap 3
gebruik myWaitVar met ExpectedConditions op porties waar het expliciete wachten nodig is om op te treden. In dit geval zullen we expliciet wachten op de “gebruikersnaam” (Mercury Tours HomePage) invoer gebruiken voordat we de tekst “tutorial” erop typen.
Voorwaarden
volgende methoden worden gebruikt in voorwaardelijke en looping operaties —
- isEnabled() wordt gebruikt wanneer u wilt controleren of een bepaald element is ingeschakeld of niet voor een commando uitvoeren.
- isDisplayed() wordt gebruikt wanneer u wilt controleren of een bepaald element wordt weergegeven of niet voordat u een opdracht uitvoert.
- isSelected() wordt gebruikt wanneer u wilt controleren of een bepaald selectievakje, keuzerondje of optie in een drop-down box is geselecteerd. Het werkt niet op andere elementen.
gebruikmakend van ExpectedConditions
De ExpectedConditions klasse biedt een bredere set van voorwaarden die u kunt gebruiken in combinatie met WebDriverWait ‘ s until() methode.
hieronder zijn enkele van de meest voorkomende ExpectedConditions methoden.
- alertIsPresent () – wacht tot er een waarschuwingsvenster wordt weergegeven.
- elementToBeClickable () – wacht tot een element zichtbaar is en tegelijkertijd ingeschakeld. Het voorbeeld Selenium Code hieronder zal wachten tot het element met om zichtbaar te worden en ingeschakeld eerst voordat het toewijzen van dat element als een webelement variabele genaamd “txtUserName”.
- frametobeavailable andwitchtoit () – wacht tot het gegeven frame al beschikbaar is, en schakelt er dan automatisch naar Over.
uitzonderingen vangen
bij gebruik van isEnabled(), isDisplayed () en isSelected (), neemt WebDriver aan dat het element al op de pagina bestaat. Anders zal het een Nosuchelementuitzondering gooien. 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 waits gebruikt, is het type uitzondering dat u moet vangen de”Time-Outexception”.
samenvatting
- om de WebDriver API te kunnen gebruiken, moet u ten minste deze twee pakketten importeren.
- org.openqa.selenium.*
- org.openqa.selenium.firefox.FirefoxDriver
- de get() methode is het equivalent van Selenium IDE ‘ s “open” commando.
- het lokaliseren van elementen in WebDriver wordt gedaan met behulp van de findElement() methode.
- de volgende opties zijn beschikbaar voor het lokaliseren van elementen in WebDriver:
- By.className
- By.cssSelector
- By.id
- door.linkText
- By.name
- door.partialLinkText
- door.tagName
- door.xpath
- de door.cssSelector () ondersteunt de functie “bevat” niet.
- u kunt een element activeren met behulp van de klasse WebElement.
- klikken op een element wordt gedaan met behulp van de click() methode.
- WebDriver biedt deze handige get-opdrachten:
- get()
- getTitle()
- getPageSource()
- getCurrentUrl()
- getText()
- WebDriver provides these useful navigation commands
- navigate().forward()
- navigate().back()
- navigate().to()
- navigate().refresh()
- The close() and quit() methods are used to close browser windows. Close() wordt gebruikt om een enkel venster te sluiten; terwijl quit () wordt gebruikt om alle vensters te sluiten die zijn gekoppeld aan het bovenliggende venster dat het WebDriver-object bestuurt.
- de switchTo ().frame () en switchTo ().alert() methoden worden gebruikt om de focus van WebDriver te richten op een frame of alert, respectievelijk.
- impliciete wachttijden worden gebruikt om de wachttijd in het hele programma in te stellen, terwijl expliciete wachttijden alleen worden gebruikt op specifieke gedeelten.
- u kunt de methoden isEnabled(), isDisplayed(),isSelected () en een combinatie van WebDriverWait en ExpectedConditions gebruiken bij het verifiëren van de status van een element. Ze controleren echter niet of het element niet bestaat.
- wanneer isEnabled(), isDisplayed(),of isSelected() werd aangeroepen terwijl het element niet bestond, zal WebDriver een NoSuchElementException gooien.
- wanneer WebDriverWait en ExpectedConditions methoden werden aangeroepen terwijl het element niet bestond, zou WebDriver een time-Outexception geven.
opmerking:
driver.krijgen() : Het wordt gebruikt om naar de specifieke website te gaan , maar het houdt de browsergeschiedenis en cookies niet bij , dus we kunnen de knop vooruit en achteruit niet gebruiken , als we daarop klikken , krijgt de pagina geen schema
driver.navigate() : het wordt gebruikt om naar de specifieke website te gaan , maar het onderhoudt de browsergeschiedenis en cookies, zodat we de vooruit-en achteruitknop kunnen gebruiken om tussen de pagina ‘ s te navigeren tijdens het coderen van Testcase
Leave a Reply