Selenium-tutoriaal - leer blaaierautomatisering met Selenium WebDriver

Selenium is 'n stel biblioteke wat gebruik word om die gebruiker se interaksie met 'n blaaier na te volg.

Gebruikers skryf skrifte met behulp van seleniumbiblioteke om algemene interaksies tussen die blaaier te simuleer, soos om na 'n bladsy te gaan, op 'n knoppie te klik en 'n vorm in te vul.

Selenium word algemeen gebruik in projekte wat webfront-end (UI) toepassings bou. Dit word gebruik om scenario's te outomatiseer wat die interaksie van 'n gebruiker met die webtoepassing naboots.




Installeer Selenium

Om Selenium WebDriver in 'n projek te gebruik, moet ons eers Selenium Core en WebDriver Binaries installeer.

Ons moet ook die pad vir elke bestuurder uitvoerbaar stel.


As u Selenium met Java wil gebruik, is die maklikste manier om Selenium te installeer via 'n Maven-afhanklikheid in u projek pom.xml lêer:


org.seleniumhq.selenium
selenium-java
3.141.59

Om Selenium-toetse in die Google Chrome- of Firefox-blaaier uit te voer, moet u die toepaslike afhanklikheid by u pom.xml voeg lêer:

Google Chrome-blaaier


org.seleniumhq.selenium
selenium-chrome-driver
3.141.59

Firefox-blaaier


org.seleniumhq.selenium
selenium-firefox-driver
3.141.59

Installeer WebDriver Binaries en stel die pad in

Om Selenium-toetse op 'n spesifieke blaaier uit te voer, moet u die toepaslike blaaier-spesifieke WebDriver-binaries laat installeer en die regte pad instel.

Chroom Om die pad na die chroom uitvoerbaar op 'n MacOS-stelsel in te stel, kan u:


$ export PATH='$PATH:/path/to/chromedriver'

U kan ook die pad programmaties instel, direk in die kode:

System.setProperty('webdriver.chrome.driver', '/path/to/chromedriver');

Firefox - Geckodriver:

System.setProperty('webdriver.gecko.driver', '/path/to/geckodriver');

Rand:

System.setProperty('webdriver.edge.driver', 'C:/path/to/MicrosoftWebDriver.exe');

Internet Explorer:


System.setProperty('webdriver.ie.driver', 'C:/path/to/IEDriver.exe');

Instantiate Browser Driver

Nadat u Selenium geïnstalleer het, is die volgende om 'n spesifieke blaaierbestuurder te installeer om die UI-toetse uit te voer.

Selenium-toetse word uitgevoer teen die gebruikerskoppelvlak van 'n toepassing en benodig 'n blaaier om mee te werk. Ons kan spesifiseer teen watter blaaier ons wil toets, en dan die toepaslike bestuurder installeer.

Nota:Seleniumtoetse word slegs gebruik vir UI-outomatisering en die toetse loop teen 'n blaaier.

Chroom

import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; WebDriver driver = new ChromeDriver();

Firefox

import org.openqa.selenium.WebDriver; import org.openqa.selenium.Firefox.FirefoxDriver; WebDriver driver = new FirefoxDriver();

Rand

import org.openqa.selenium.WebDriver; import org.openqa.selenium.edge.EdgeDriver; WebDriver driver = new EdgeDriver();

Internet Explorer

import org.openqa.selenium.WebDriver; import org.openqa.selenium.ie.InternetExplorerDriver; WebDriver driver = new InternetExplorerDriver();

Blaaiernavigasie

Sodra ons 'n aktiewe WebDriver-sessie het en 'n blaaier begin, is die volgende ding wat ons wil doen om na 'n bladsy te gaan en toetse uit te voer.

Selenium WebDriver bied 'n aantal handige metodes om met die blaaier te kommunikeer. Ons kan navigeer en inligting kry oor die huidige bladsy.


Ons het twee opsies om na 'n URL te navigeer:

//The short form driver.get('https://devqa.io'); //The long form driver.navigate().to('https://devqa.io');

Teruggaan

Die Selenium back() metode simuleer deur op die terugknoppie van die blaaier te klik:

driver.navigate().back();

Gaan vorentoe

Die Selenium forward() metode simuleer die klik op die voorwaartse knoppie van die blaaier:

driver.navigate().forward();

Verfris die bladsy

Die Selenium refresh() metode simuleer om die blaaier se verfris-knoppie te klik:


driver.navigate().refresh();

Kry huidige bladsy-inligting

Selenium bied ook metodes om die huidige url, bladsytitel en bladsybron te kry.

Kry huidige URL

Ons kan die URL van die huidige bladsy kry:

driver.getCurrentUrl();

Kry bladsy titel

Ons kan die titel van die huidige bladsy kry:

driver.getTitle();

Kry bladsybron

Ons kan die bron van die huidige bladsy kry:

driver.getPageSource();

Sluit en sluit die blaaier-sessie

Om die huidige blaaiervenster te sluit:

driver.close(); Nota:Sluit die blaaiervenster doen nie beëindig die WebDriver-sessie.

Om die WebDriver-sessie aan die einde van die toetsgebruik te staak:

driver.quit();

Die stop metode sal:

  • Sluit al die vensters wat verband hou met die WebDriver-sessie
  • Maak die blaaierproses dood
  • Maak die bestuurdersproses dood


Selenium-opspoorders - Hoe om webelemente op te spoor

Voordat u met 'n webelement kan kommunikeer, moet ons die element op die html-bladsy opspoor.

Een van die belangrikste vaardighede van 'n toetsautomatiseringsingenieur wat met Selenium WebDriver werk, is om in staat te wees om toepaslike metodes te gebruik om elemente op 'n bladsy op te spoor.

As ons byvoorbeeld op 'n skakel wil klik, wil bevestig dat 'n boodskap vertoon word of om op 'n knoppie te klik, moet ons eers die element opspoor.

Selenium WebDriver bied verskillende metodes om elemente op 'n bladsy op te spoor.

'N Opspoorder beskryf wat u op 'n bladsy wil vind. In Java skep ons 'n opspoorder deur die By te gebruik klas.

As ons byvoorbeeld 'n h1 wil vind op 'n bladsy, sou ons skryf

WebElement h1Element = driver.findElement(By.tagName('h1'));

Of, as ons al die paragraafelemente op 'n bladsy wil vind, sal ons dit gebruik

List pElements = driver.findElements(By.tagName('p'));

Per skakel teks

Hierdie metode vind elemente volgens die presiese teks wat dit vertoon. Hierdie metode is normaalweg die voorkeuropsoeker vir skakels op 'n bladsy.

Veronderstel byvoorbeeld dat ons hierdie skakel op 'n bladsy het:

Forgotten Password

Dan kan die skakel gevind word deur:

driver.findElement(By.linkText('Forgotten Password'));

Deur gedeeltelike skakelteks

As ons nie seker is van die presiese bewoording van die skakelteks nie, maar 'n skakel of skakels hierna wil vind bevat 'n gegewe teks, kan ons gebruik

driver.findElement(By.partialLinkText('Forgotten '));

of

driver.findElement(By.partialLinkText('Password'));

U moet versigtig wees wanneer u findElement gebruik met hierdie opspoorder, aangesien daar ander elemente kan wees wat dieselfde gedeeltelike teks bevat, dus moet dit nie gebruik word om 'n enkele element op sy eie op te spoor nie. Dit is die beste om dit te gebruik om 'n groep elemente op te spoor met behulp van die findElements metode.

Volgens klaskenmerk

Dit vind elemente volgens die waarde van die klaskenmerk. Dit kan slegs gebruik word vir die elemente met 'n klaskenmerk, maar dit is nie 'n goeie keurder om saam met die findElement metode.

Met dieselfde voorbeeld hierbo met die skakel, het die skakel 'Wagwoord vergeet' een CSS-klas: btn wat gebruik kan word om dit op te spoor

Forgotten Password

Dan kan die skakel gevind word deur:

driver.findElement(By.className('btn')); Nota:Die klaskenmerk word gebruik vir stilering van bladsye, en die kans is groot dat baie elemente waarskynlik dieselfde klas het.

Deur id

Op id, lokaliseer elemente volgens die waarde van hul id-kenmerk. Die skakel in die voorbeeld hierbo het 'n ID wat ons kan gebruik:

Forgotten Password

Dan kan die skakel gevind word deur:

driver.findElement(By.id('change-password'));

As die id-eienskap beskikbaar is, moet dit as die eerste keuse gebruik word.

By naam

Soek elemente volgens die waarde van hul naamkenmerk. Normaalweg kan dit slegs gebruik word om vormelemente op te spoor wat gebou is met: , , , en .

Op 'n gewone aanmeldbladsy het u invoervelde wat kan lyk:

Ons kan dan die e-posveld opspoor volgens die invoernaamkenmerk

driver.findElement(By.name('email'));

Op die naam van die etiket

Hierdie opspoorder vind elemente volgens hul HTML-tagnaam. Aangesien die meeste etikette gereeld herhaal word, is dit nie 'n goeie idee om hierdie metode te gebruik om 'n enkele element op te spoor nie.

'N Tipiese gebruik van die opspoor van 'n element volgens die naam van die etiket is om die opskrif van die bladsy op te spoor, want daar is net een daarvan:

Welcome to DevQA!

Ons kan dan die opskrifveld op die naam van die etiket opspoor:

driver.findElement(By.tagName('h1'));

Deur CSS-keurders

Soek elemente via die bestuurder se onderliggende W3 CSS Selector-enjin. Die CSS-keurderlokator is kragtig omdat dit gebruik kan word om enige element op 'n bladsy op te spoor.

Forgotten Password

Ons kan dan die e-posveld opspoor volgens die invoernaamkenmerk

driver.findElement(By.cssSelector('#change-password'));

Hier, # verteenwoordig id van die element. En die . notasie verteenwoordig die klaskenmerk van 'n element.

Byvoorbeeld:

driver.findElement(By.cssSelector('.btn'));

Verwante:

Deur XPath

XPath-opspoorders is die mees ingewikkelde keurder om te gebruik. Dit vereis kennis in XPath-navraagtaal, dus as u nie die vraagtaal magtig is nie, sal u dit moeilik vind om elemente te vind met behulp van XPath-navrae.

Kom ons kyk na 'n voorbeeld van 'n XPath vir hierdie HTML:

Change Password

Ons kan dan die e-posveld opspoor volgens die invoernaamkenmerk

driver.findElement(By.xpath('//a[@id='change-password']'));

Interaksie met Web-elemente

Nadat ons 'n element op die bladsy opgespoor het, kan ons daarmee kommunikeer met behulp van verskillende metodes wat selenium bied.

Selenium WebDriver bied 'n aantal maniere om met web-elemente te kommunikeer, soos om op stuurknoppies te klik en teks in invoervelde in te voer.

Die WebElement klas het 'n aantal metodes wat ons kan gebruik om met bladsy-elemente te kommunikeer. Die mees algemene is:

  • click()
  • clear()
  • sendKeys()
  • submit()

Klik op

Die click() metode word gebruik om op 'n webelement te klik, soos 'n skakel of 'n knoppie.

Voorbeeld:

Menu WebElement mToggle = driver.findElement(By.id('menu-toggle')); mToggle.click();

Duidelik

Die clear() metode maak 'n invoerveld se waarde skoon.

Wenk:Dit word aanbeveel om die .clear () metode voordat u teks in 'n invoerveld invoer.

Voorbeeld:

WebElement username = driver.findElement(By.id('username')); username.clear();

Stuur sleutels

Ons gebruik die sendKeys() metode om karakters in 'n invoerveldkassie in te voer.

Voorbeeld:

WebElement username = driver.findElement(By.id('username')); username.sendKeys('jondoe');

Voorbeeld - Vul 'n vorm in

Hieronder is 'n voorbeeld van hoe u Selenium kan gebruik om 'n vorm in te vul

username:

Last name:


WebElement username = driver.findElement(By.id('username'));
username.sendKeys('jondoe');
WebElement password = driver.findElement(By.id('password'));
password.sendKeys('secret');
WebElement submit = driver.findElement(By.cssSelector('input[type='submit']'));
submit.click();

Noudat ons die basiese beginsels van Selenium WebDriver behandel het, is dit tyd om 'n raamwerk te bou.



Bou 'n Selenium-raamwerk

Leer hoe om 'n seleniumraamwerk van nuuts af te bou.

Die eerste gedeelte van die tutoriaal gee 'n stap-vir-stap oor hoe u 'n selenium WebDriver-raamwerk kan skep met behulp van Java, Maven en TestNG.

Die tweede deel fokus op die strukturering van seleniumtoetse gebaseer op die beroemde Page Object Model.