how take screenshot selenium
Ovaj vodič objašnjava važnost snimke zaslona selena i kako koristiti Ashot za snimanje zaslona u aplikaciji selenij s primjerima:
Snimke zaslona u osnovi se koriste u analizi grešaka. Oni pomažu u razumijevanju funkcionira li aplikacija prema zahtjevima korisnika ili ne.
Za svaki testni slučaj primljeni izlaz može biti drugačiji, ponekad se primi točan izlaz, ponekad dobijemo pogrešku, ponekad se primi poruka o pogrešci zbog nedostajućih ili nedovoljnih ulaznih podataka itd. Snimka zaslona pomaže u praćenju dokaza o radnjama / izlazima primio.
=> Ovdje provjerite SVE tutorijale za selenij
U ovom uputstvu naučit ćemo gdje su potrebne snimke zaslona Selenium. Razgovarat ćemo o Ashotu i kako možemo koristiti Ashot u Seleniju (instalacija i konfiguracija ashota ()), naučiti snimati snimke zaslona u Seleniju (za cijelu web stranicu, za jedan element na stranici i za trenutno otvoreni prozor, također uspoređujući 2 slike), a zatim pogledajte nekoliko primjera gdje se često snimaju snimke zaslona.
Što ćete naučiti:
Razumijevanje snimaka zaslona selena
Gornja slika primjer je snimke zaslona snimljene tijekom izvršavanja koda s web lokacije Gmail. Slika pomaže u potvrđivanju da se korisnik uspješno prijavio na račun e-pošte s ispravnim korisničkim imenom i lozinkom.
Stoga su snimke zaslona vrlo korisne u bilježenju radnji / rezultata primljenih nakon izvršene radnje, a time pomažu u potvrđivanju izvršavanja radnje bez ikakvih problema.
Selen može automatski snimati snimke zaslona; moramo dodati kôd za snimku zaslona u procesu bilo kojeg izvršavanja koda gdje su potrebne snimke zaslona.
Gdje su potrebne slike zaslona selena
Slijedile bi mogućnosti:
- Kada postoje problemi s pronalaženjem elementa na web stranici.
- Gdje postoji vremensko ograničenje u pronalaženju web elemenata na stranici.
- Kada se u sustavu / aplikaciji dogodi pogreška ili problem.
- Kada se naiđe na neuspjeh tvrdnje.
Što je Ashot
Ashot () je uslužni program treće strane koji podržava web upravljački program Selenium za snimanje snimaka zaslona.
Ashot () pruža slijedeće operacije snimanja snimki zaslona:
- Snimanje cijele stranice
- Hvatanje web elementa
- Usporedba slika
Pogledajmo kako to točno funkcionira u sljedećem odjeljku.
Značajke Ashota:
besplatni softver za pretvorbu video zapisa za Windows
- Moguće je napraviti snimku zaslona cijele stranice.
- Moguće je napraviti i snimku zaslona web-elementa, što je podržano na raznim platformama kao što su Android Emulator Browser, iOS Simulator Mobile Safari, različiti preglednici za radnu površinu).
- Pruža fleksibilnu usporedbu zaslona.
- Ukrašava snimke zaslona.
Ashot može snimati zaslon u tri koraka:
- Snima snimak zaslona cijele stranice.
- Pronađite veličinu i položaj elementa.
- Obrezuje izvorni snimak zaslona.
Kako možemo koristiti ashot u selenu
Razmotrite sljedeće korake za preuzimanje i konfiguriranje Ashota na vašem računalu:
- Idite na veza.
- Pronađite najnoviju verziju jar datoteke prisutne za Ashot.
- Preuzmite i spremite jar datoteku na određenu stazu na vašem stroju.
- Sada za dodavanje jar datoteke u svoj projekt u Eclipseu - Idite na svoj projekt -> Desni klik -> idite na svojstva -> odaberite Izgradi put -> Knjižnice -> dodajte vanjske staklenke
- Pregledajte put na kojem se sprema preuzeta jar datoteka.
- Odaberite jar datoteku, kliknite Primijeni i zatvorite.
Kako snimiti snimke zaslona u selenu
Selenium pruža ugrađenu funkcionalnost za snimanje snimaka zaslona. Prema zahtjevu, Snima snimak zaslona sučelje se koristi za snimanje zaslona, dok se izvršavaju selenijeve skripte. Dakle, Selenium Webdriver pomaže u snimanju snimaka zaslona dok se kôd izvršava.
U odjeljku u nastavku saznat ćemo o različitim vrstama snimljenih snimaka zaslona.
Slijede vrste:
Snimanje snimke zaslona:
- Trenutno otvoren prozor
- Cijela web stranica
- Samo određeni web element
- Usporedba slike zaslona sa izvornom slikom
Razumijemo gornje točke u detalje.
# 1) Trenutni otvoreni prozor
Pogledajmo implementaciju koda za rukovanje snimkama zaslona u Seleniju za trenutno otvoren prozor:
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.'); } }
Slika dolje je izlaz gornje implementacije koda. Ovdje je otvorena stranica OrangeHRM i snimljen je snimak zaslona stranice za prijavu.
[slika izvor ]
Dakle, možemo snimati snimke zaslona gdje god je to bilo potrebno tijekom izvršavanja koda. Snimka zaslona snimljena je u datoteku s nastavkom .png ili .jpeg. Moramo dati put na koji treba spremiti slikovnu datoteku.
# 2) Cijela web stranica
Pogledajmo donji implementacijski kôd za snimanje snimke zaslona cijele stranice, uz pomoć Ashota u Selenium webdriveru. Za ovo ćemo razmotriti primjer stranice (Jmeter-korisnički definirane varijable) 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!'); } }
Evo, jmeter-korisnički definirane varijable stranica naše web stranice: www.softwaretestinghelp.com se otvori, a zatim smo napravili snimku zaslona ove kompletne web stranice (uz pomoć ashot () u selenu) u .png formatu i spremili na željeni put. Na isti način na koji možemo snimiti snimku zaslona cijele stranice za bilo koju web stranicu.
Prema tome, na implementaciji gornjeg koda za snimanje snimke zaslona cijele stranice, dobiveni izlaz je kao što je prikazano na donjoj slici za cjeloviti snimak zaslona web stranice.
# 3) Web element
Pogledajmo donji implementacijski kod, uz upotrebu Ashota u web-pogonu Selenium za snimanje snimke zaslona određenog web-elementa na web-stranici.
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!'); } }
Stoga na implementaciji gornjeg koda za snimanje snimke zaslona određenog elementa (ovdje kartica Održavanje), primljeni izlaz je prikazan na donjoj slici.
Ovdje odabiremo karticu 'Održavanje' kao element za koji je potreban snimak zaslona. Spomenite put na kojem želimo da se snimka zaslona spremi. Na isti način možemo snimiti snimku zaslona za bilo koji drugi element, kao i na bilo kojem takvom web mjestu.
# 4) Usporedba snimke zaslona s izvornom slikom
Pogledajmo donji implementacijski kod s upotrebom Ashota u web-pogonu Selenium za snimanje snimke zaslona elementa logotipa na web stranici i njegovu usporedbu s izvornim logotipom.
Za ovo razmotrimo primjer 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 } } }
Prema tome, na implementaciji gornjeg koda za usporedbu snimke zaslona elementa logotipa (ovdje logotip naukri.com), dobiveni izlaz je kao što je prikazano na donjoj slici.
Ovdje odabiremo logotip „naukri.com“, snimamo njegov snimak zaslona, a zatim se uspoređuje s izvornim logotipom. Razlika između slika nalazi se pomoću ugrađenih funkcija. Ako se na 2 slike logotipa ne pronađe razlika, program ispisuje izlaz kao „ Obje slike logotipa podudaraju se 'Ostalo ispisuje' Slike logotipa su različite '.
Primjeri gdje se često snimaju snimke zaslona
# 1) Potvrda odjave
Da bismo se prijavili na web mjesto, moramo unijeti ispravno korisničko ime i lozinku nakon čega se prijavljujemo na web mjesto. Tada korisnik izvodi potrebne opcije i nakon što završi s radom, korisnik se odjavi.
Dakle, ako pružimo kod za snimku zaslona nakon odjave, ponovo će se vidjeti stranica za prijavu koja će potvrditi akciju odjave. Molimo pogledajte donju sliku za više detalja:
# 2) Potvrda novostvorenog zapisa
Dodavanje koda za snimku zaslona nakon stvaranja novog zapisa potvrđuje da je zapis uspješno stvoren. Za više detalja pogledajte donji snimak zaslona.
U slučaju da se zapis ne kreira, kod ne bi nastavio snimati snimku zaslona, a to bi potvrdilo da zapis nije uspješno kreiran.
# 3) Primjer nedostajućeg / netočnog izlaza
Ovaj primjer uključuje stvaranje novog zapisa o nazivu posla na web mjestu OrangeHRM. Ovdje je polje Naziv radnog mjesta označeno ‘*’, što znači da je obvezno polje. Dakle, zapis se neće stvoriti dok se ne popune potrebna polja i tada ćemo samo mi moći spremiti zapis. Za više detalja pogledajte donji snimak zaslona.
Zaključak
Stoga smo u ovom članku vidjeli gdje su potrebne snimke zaslona Selenium, zatim kako možemo rukovati snimkama zaslona u programu Selenium, što je Ashot, kako se može preuzeti, konfigurirati i zapravo koristiti u programu Selenium. Razumjeli smo implementaciju koda za rukovanje snimkom zaslona, a vidjeli smo i nekoliko primjera gdje se često snimaju snimke zaslona.
=> Pročitajte cjeloviti vodič za selen
Preporučena literatura
- 30+ najboljih vodiča za selen: naučite selen na stvarnim primjerima
- Selen Pronađi element pomoću tekstualne lekcije s primjerima
- Uvod u Selenium WebDriver - Vodič za selenij br. 8
- Vodič za ChromeDriver Selenium: Testovi Selenium Webdriver-a na Chromeu
- Rukovanje iFramovima pomoću metode Selenium WebDriver switchTo ()
- Kako stvoriti projekt Gradle sa selenom
- Kako postupati s upozorenjima / skočnim prozorima u Selenium WebDriver - Vodič za selen # 16
- Kako se rukuje klizačem u programu Selenium Webdriver