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.
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:
org.seleniumhq.selenium
selenium-chrome-driver
3.141.59
org.seleniumhq.selenium
selenium-firefox-driver
3.141.59
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');
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.import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; WebDriver driver = new ChromeDriver();
import org.openqa.selenium.WebDriver; import org.openqa.selenium.Firefox.FirefoxDriver; WebDriver driver = new FirefoxDriver();
import org.openqa.selenium.WebDriver; import org.openqa.selenium.edge.EdgeDriver; WebDriver driver = new EdgeDriver();
import org.openqa.selenium.WebDriver; import org.openqa.selenium.ie.InternetExplorerDriver; WebDriver driver = new InternetExplorerDriver();
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');
Die Selenium back()
metode simuleer deur op die terugknoppie van die blaaier te klik:
driver.navigate().back();
Die Selenium forward()
metode simuleer die klik op die voorwaartse knoppie van die blaaier:
driver.navigate().forward();
Die Selenium refresh()
metode simuleer om die blaaier se verfris-knoppie te klik:
driver.navigate().refresh();
Selenium bied ook metodes om die huidige url, bladsytitel en bladsybron te kry.
Ons kan die URL van die huidige bladsy kry:
driver.getCurrentUrl();
Ons kan die titel van die huidige bladsy kry:
driver.getTitle();
Ons kan die bron van die huidige bladsy kry:
driver.getPageSource();
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:
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'));
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'));
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.
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.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.
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'));
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'));
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:
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']'));
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()
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();
Die clear()
metode maak 'n invoerveld se waarde skoon.
Voorbeeld:
WebElement username = driver.findElement(By.id('username')); username.clear();
Ons gebruik die sendKeys()
metode om karakters in 'n invoerveldkassie in te voer.
Voorbeeld:
WebElement username = driver.findElement(By.id('username')); username.sendKeys('jondoe');
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.
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.