how take screenshot selenium
V tej vadnici so razloženi pomembnosti posnetka zaslona Selenium in kako uporabljati Ashot za zajem zaslona v aplikaciji Selenium s primeri:
Posnetki zaslona se v osnovi uporabljajo pri analizi napak. Pomagajo razumeti, ali aplikacija deluje v skladu z zahtevami uporabnika ali ne.
Za vsak testni primer je lahko prejeti izhod drugačen, včasih je prejet pravilen izhod, včasih dobimo napako, včasih prejme sporočilo o napaki zaradi manjkajočih ali nezadostnih vhodnih podatkov itd. Posnetek zaslona pomaga pri sledenju dokazom o dejanjih / izhodih prejel.
=> Tukaj preverite VSE vadnice za selen
V tej vadnici bomo izvedeli, kje so potrebni posnetki zaslona Selenium. Pogovorili se bomo o Ashotu in o tem, kako lahko uporabimo Ashot v programu Selenium (namestitev in konfiguracija ashota ()), se naučili zajemati posnetke zaslona v programu Selenium (za celotno spletno stran, en element na strani in trenutno odprto okno, primerjamo 2 sliki), nato pa si oglejte nekaj primerov, ko so posnetki zaslona pogosto zajeti.
Kaj se boste naučili:
Razumevanje posnetkov zaslona selena
Zgornja slika je primer posnetka zaslona, posnetega med izvajanjem kode s spletnega mesta Gmail. Slika pomaga potrditi, da se je uporabnik uspešno prijavil v e-poštni račun s pravilnim uporabniškim imenom in geslom.
Tako so posnetki zaslona v veliko pomoč pri zajemanju dejanj / izhodov, prejetih po izvedenem dejanju, in tako pomagajo pri potrditvi dejanja, ki se izvaja brez kakršnih koli težav.
Selen lahko samodejno posname posnetke zaslona; v postopek izvajanja katere koli kode, kjer so potrebni posnetki zaslona, moramo dodati samo kodo za posnetek zaslona.
Kje so potrebni posnetki zaslona selena
Sledile bi možnosti:
- Ko pride do težav pri iskanju elementa na spletni strani.
- Kjer pri iskanju spletnih elementov na strani obstaja časovna omejitev.
- Ko pride do napake ali težave v sistemu / aplikaciji.
- Ko naletimo na napako trditve.
Kaj je Ashot
Ashot () je pripomoček tretje osebe, ki ga za zajem posnetkov zaslona podpira spletni gonilnik Selenium.
Ashot () ponuja spodnje postopke pri zajemanju posnetkov zaslona:
- Zajem celotne strani
- Zajemanje spletnega elementa
- Primerjava slik
Poglejmo, kako natančno to deluje v naslednjem razdelku.
Značilnosti Ashota:
- Možno je narediti posnetek zaslona celotne strani.
- Možno je narediti tudi posnetek zaslona spletnega elementa, ki je podprt na različnih platformah, kot so brskalnik Android Emulator, iOS Simulator Mobile Safari, različni namizni brskalniki).
- Ponuja prilagodljivo primerjavo posnetkov zaslona.
- Okrasi posnetke zaslona.
Ashot lahko posname posnetke zaslona v treh korakih:
- Posname posnetek zaslona celotne strani.
- Poiščite velikost in položaj elementa.
- Obreže prvotni posnetek zaslona.
Kako lahko uporabimo ashot v selenu
Upoštevajte naslednje korake za nalaganje in konfiguriranje Ashota na vaši napravi:
- Pojdi na povezava.
- Poiščite najnovejšo različico datoteke jar, ki je prisotna za Ashot.
- Prenesite in shranite datoteko jar na določeno pot v računalniku.
- Zdaj pa za dodajanje datoteke jar v svoj projekt v Eclipse - Pojdite na svoj projekt -> Z desno miškino tipko kliknite -> pojdite na lastnosti -> izberite Build Build -> Knjižnice -> dodajte zunanje kozarce
- Prebrskajte pot, kjer je shranjena prenesena datoteka jar.
- Izberite datoteko jar, kliknite Uporabi in zaprite.
Kako zajeti posnetke zaslona v selenu
Selenium ponuja vgrajeno funkcionalnost za zajem posnetkov zaslona. V skladu z zahtevo, TakesScreenshot Vmesnik se uporablja za posnetke zaslona med izvajanjem skriptov Selenium. Tako Selenium Webdriver pomaga pri zajemanju posnetkov zaslona med izvajanjem kode.
V spodnjem razdelku bomo spoznali različne vrste posnetih posnetkov zaslona.
Sledijo naslednje vrste:
Zajem posnetka zaslona:
- Trenutno odprto okno
- Celotna spletna stran
- Samo določen spletni element
- Primerjava slike zaslona s prvotno sliko
Podrobno razumemo zgornje točke.
# 1) Trenutno odprto okno
Oglejmo si izvajanje kode za obdelavo posnetkov zaslona v programu Selenium za trenutno odprto okno:
package SeleniumPrograms; import java.io.File; import java.io.IOException; import java.util.concurrent.TimeUnit; import org.apache.commons.io.FileUtils; import org.openqa.selenium.OutputType; import org.openqa.selenium.TakesScreenshot; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.annotations.Test; @Test public class Screenshot { public static void main(String() args) throws IOException { // TODO Auto-generated method stub WebDriver drv = new FirefoxDriver(); drv.manage().window().maximize(); //always write wait code after this drv.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);//for page load drv.get('https://opensource-demo.orangehrmlive.com/'); //Testing webpage drv.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); //for Implicit wait //Capturing the screenshot File f = ((TakesScreenshot) drv).getScreenshotAs(OutputType.FILE); FileUtils.copyFile(f, new File('C:/Users/Chait/Desktop/Screenshots/screenshot01.png')); //screenshot copied from buffer is saved at the mentioned path. System.out.println('The Screenshot is captured.'); } }
Spodnja slika je rezultat zgornje implementacije kode. Tu je spletno mesto OrangeHRM odprto in posnet posnetek zaslona strani za prijavo.
(slika vir )
Tako lahko med izvajanjem kode posnamemo posnetke zaslona, kadar koli je to potrebno. Posneti posnetek zaslona se shrani v datoteko s pripono .png ali .jpeg. Navesti moramo pot, kamor je treba shraniti slikovno datoteko.
# 2) Celotna spletna stran
Oglejmo si spodnjo izvedbeno kodo za zajem posnetka zaslona celotne strani s pomočjo Ashota v spletnem pogonu Selenium. Za to si oglejmo primer strani (Jmeter-uporabniško definirane spremenljivke) iz - softwaretestinghelp.com .
package SeleniumPrograms; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.concurrent.TimeUnit; import javax.imageio.ImageIO; import org.apache.commons.io.FileUtils; import org.openqa.selenium.By; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.OutputType; import org.openqa.selenium.TakesScreenshot; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import ru.yandex.qatools.ashot.AShot; import ru.yandex.qatools.ashot.Screenshot; import ru.yandex.qatools.ashot.shooting.ShootingStrategies; public class Screenshot_EntirePage { public static void main(String() args) throws InterruptedException, IOException { WebDriver drv = new FirefoxDriver(); drv.manage().window().maximize(); //always write wait code after this drv.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS); //for page load drv.get('https://www.softwaretestinghelp.com/'); //Testing webpage drv.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); //for Implicit wait WebElement auto = drv.findElement(By.xpath('//ul(@id='mega-menu-primary')/li(6)')); auto.click(); //click Automation tab WebElement jmeter = drv.findElement(By.linkText('JMeter')); //link to JMeter page jmeter.click(); //scroll down to open a link among various links, in the Video Tutorials section of the page JavascriptExecutor js = (JavascriptExecutor) drv; js.executeScript('window.scrollBy(0,1700)'); //scrolling downwards Thread.sleep(1500); WebElement udv = drv.findElement(By.linkText('User-Defined Variables')); udv.click(); //opening User-Defined Variables link Thread.sleep(1500); //Capturing the Screenshot with the help of ashot() Screenshot screenshot=new AShot().takeScreenshot(drv); ImageIO.write(screenshot.getImage(),'PNG',new File('C:\Users\Chait\Desktop\Screenshots\entirepage.png')); //The screenshot to be captured will be in .png image format and would be saved at above mentioned path. System.out.println('Screenshot for full page is captured successfully!'); } }
Tukaj jmeter-uporabniško definirane spremenljivke stran našega spletnega mesta: www.softwaretestinghelp.com se odpre in nato naredimo posnetek zaslona te celotne spletne strani (s pomočjo ashot () v selenu) v obliki .png in shranimo na želeno pot. Na enak način lahko posnamemo posnetek zaslona celotne strani za katero koli spletno stran.
Tako je pri izvedbi zgornje kode za zajem posnetka zaslona celotne strani prejeti izhod takšen, kot je prikazan na spodnji sliki za celoten posnetek zaslona spletne strani.
odprtokodna orodja za upravljanje življenjskega cikla
# 3) Spletni element
Oglejmo si spodnjo izvedbeno kodo z uporabo Ashota v spletnem pogonu Selenium za zajem posnetka zaslona določenega spletnega elementa na spletni strani.
package SeleniumPrograms; import java.io.File; import java.io.IOException; import java.util.concurrent.TimeUnit; import javax.imageio.ImageIO; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.annotations.Test; import ru.yandex.qatools.ashot.AShot; import ru.yandex.qatools.ashot.Screenshot; import ru.yandex.qatools.ashot.shooting.ShootingStrategies; @Test public class Screenshot_WebEle_Ashot { public static void main(String() args) throws IOException { // TODO Auto-generated method stub WebDriver drv = new FirefoxDriver(); drv.manage().window().maximize(); //always write wait code after this drv.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS); //for page load drv.get('https://opensource-demo.orangehrmlive.com/'); //Testing webpage drv.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); //for Implicit wait WebElement uname = drv.findElement(By.id('txtUsername')); //Username....ID.... uname.sendKeys('Admin'); WebElement pword = drv.findElement(By.id('txtPassword')); //Password....ID.... pword.sendKeys('admin123'); WebElement login_b = drv.findElement(By.xpath('//input(@id='btnLogin')')); login_b.click(); //Login button....XPATH.... WebElement ele = drv.findElement(By.linkText('Maintenance')); ele.click(); //opening link for element for which we want screenshot // pass driver as well as the element in takeScreenshot() method. Screenshot Screenshot_webele = new AShot().shootingStrategy(ShootingStrategies.viewportPasting(100)).takeScreenshot(drv, ele); // For saving the screenshot in .png/.jpeg format at the desired location ImageIO.write(Screenshot_webele.getImage(),'png',new File('C:\Users\Chait\Desktop\Screenshots\element.jpeg')); System.out.println('Screenshot for specified element captured successfully!'); } }
Tako pri izvajanju zgornje kode za zajem posnetka zaslona določenega elementa (tukaj zavihek Vzdrževanje), prejeti izhod je prikazan na spodnji sliki.
Tu izberemo zavihek »Vzdrževanje« kot element, za katerega je potreben posnetek zaslona. Omenite pot, kjer želimo, da se posnetek zaslona shrani. Na enak način lahko posnamemo posnetek zaslona za kateri koli drug element, pa tudi na kateri koli taki spletni strani.
# 4) Primerjava posnetka zaslona z izvirno sliko
Oglejmo si spodnjo izvedbeno kodo z uporabo Ashota v spletnem pogonu Selenium za zajem posnetka zaslona elementa logotipa na spletni strani in primerjavo z izvirnim logotipom.
Za to si oglejmo primer naukri.com :
package SeleniumPrograms; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.concurrent.TimeUnit; import javax.imageio.ImageIO; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.firefox.FirefoxDriver; import ru.yandex.qatools.ashot.AShot; import ru.yandex.qatools.ashot.Screenshot; import ru.yandex.qatools.ashot.comparison.ImageDiff; import ru.yandex.qatools.ashot.comparison.ImageDiffer; public class Screen_Compare { public static void main(String() args) throws IOException { // TODO Auto-generated method stub WebDriver drv = new FirefoxDriver(); drv.manage().window().maximize(); //always write wait code after this drv.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS); //for page load drv.get('https://www.naukri.com/nlogin/login'); //Testing webpage drv.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); //for Implicit wait // Finding the logo element and capturing its screenshot WebElement logo = drv.findElement(By.xpath('//a(@class='nLogo fl')/img')); Screenshot logoSrcshot = new AShot().takeScreenshot(drv, logo); // Reading the image for comparision BufferedImage expectedImage = ImageIO.read(new File('C:\Users\Chait\Desktop\naukri_Logo.png')); BufferedImage actualImage = logoSrcshot.getImage(); ImageDiffer img_differnece = new ImageDiffer(); // Creating ImageDiffer object and calling the method makeDiff() ImageDiff differnece = img_differnece.makeDiff(actualImage, expectedImage); if (differnece.hasDiff() == true) //Checking the difference using in-built functions) { System.out.println('Both logo images matched') //in case when no difference found } else { System.out.println('The logo images are different'); //in case when difference found } } }
Tako je pri izvajanju zgornje kode za primerjavo posnetka zaslona elementa logotipa (tukaj logotip naukri.com) prejet izhod takšen, kot je prikazan na spodnji sliki.
Tu izberemo logotip »naukri.com«, posnamemo posnetek zaslona in nato primerjamo z originalnim logotipom. Razliko med slikami najdemo z vgrajenimi funkcijami. Če na slikah logotipa ni nobene razlike, program izpis izpiše kot » Obe sliki logotipa sta se ujemali 'Sicer natisne' Slike logotipa so različne '.
Primeri, kjer so posnetki zaslona pogosto zajeti
# 1) Potrditev odjave
Za prijavo na spletno mesto moramo vnesti pravilno uporabniško ime in geslo, po katerem se bomo prijavili na spletno mesto. Nato uporabnik izvede zahtevane možnosti in po končanem delu se odjavi.
Torej, če po odjavi zagotovimo kodo za posnetek zaslona, bo spet prikazana stran za prijavo, ki bo potrdila odjavo. Za več podrobnosti glejte spodnjo sliko:
# 2) Potrditev novo ustvarjenega zapisa
Dodajanje kode za posnetek zaslona po ustvarjanju novega zapisa potrdi, da je bil zapis uspešno ustvarjen. Za več podrobnosti si oglejte spodnji posnetek zaslona.
V primeru, da se zapis ne ustvari, koda ne bo nadaljevala s snemanjem posnetka zaslona, kar bi potrdilo, da se zapis ne ustvarja uspešno.
# 3) Primer manjkajočega / napačnega izhoda
Ta primer vključuje ustvarjanje novega zapisa za naslov delovnega mesta na spletnem mestu OrangeHRM. Tu je polje Naslov delovnega mesta označeno z *, kar pomeni, da je obvezno polje. Torej, zapis ne bi bil ustvarjen, dokler se ne izpolnijo zahtevana polja, nato pa bi ga lahko shranili samo mi. Za več podrobnosti si oglejte spodnji posnetek zaslona.
Zaključek
V tem članku smo torej videli, kje so potrebni posnetki zaslona Selenium, kako lahko obdelujemo posnetke zaslona v programu Selenium, kaj je Ashot, kako ga lahko prenesemo, konfiguriramo in dejansko uporabimo v programu Selenium. Razumeli smo izvajanje kode za obdelavo posnetka zaslona in videli smo tudi nekaj primerov, ko so posnetki zaslona pogosto zajeti.
=> Preberite celotni vodnik po selenu
Priporočeno branje
- 30+ najboljših vadnic o selenu: Naučite se selena z resničnimi primeri
- Vadnica za iskanje selena z besedilom z primeri
- Uvod v Selenium WebDriver - Vadnica za selenij št. 8
- Vadnica za ChromeDriver Selenium: Testi za selenium Webdriver v Chromu
- Ravnanje z okvirji iFram z uporabo metode Selenium WebDriver switchTo ()
- Kako ustvariti projekt Gradle s selenom
- Kako ravnati z opozorili / pojavnimi okni v programu Selenium WebDriver - Vodič za selenij št. 16
- Kako ravnati z drsnikom v programu Selenium Webdriver