how take screenshot selenium
Denne tutorial forklarer vigtigheden af Selenium Screenshot & hvordan man bruger Ashot til at tage Screenshot i Selenium-applikationen med eksempler:
Screenshots bruges dybest set i buganalyse. De hjælper med at forstå, om applikationen fungerer efter brugerens krav eller ej.
For hver testtilfælde kan det modtagne output være anderledes, nogle gange modtages det korrekte output, nogle gange får vi en fejl, nogle gange modtages der en fejlmeddelelse på grund af manglende eller utilstrækkelige inputdata osv. Screenshot hjælper med at spore bevis for handlinger / output modtaget.
=> Tjek ALLE Selen-vejledninger her
I denne vejledning lærer vi, hvor Selenium-skærmbilleder er nødvendige. Vi vil diskutere Ashot, og hvordan kan vi bruge Ashot i Selenium (installation og konfiguration af ashot ()), lære at tage skærmbilleder i Selenium (for hele websiden, for et enkelt element på siden og for et aktuelt åbent vindue, også sammenligning 2 billeder) og se derefter på et par eksempler, hvor skærmbilleder ofte fanges.
Hvad du lærer:
Forståelse af Selen Screenshots
Ovenstående billede er et eksempel på et skærmbillede, der er taget, mens du udfører kode fra Gmail-webstedet. Billedet hjælper med at bekræfte, at brugeren er logget ind på e-mail-kontoen med det korrekte brugernavn og adgangskode.
Således er skærmbilleder meget nyttige til at opfange de handlinger / output, der modtages, efter at en handling er udført, og hjælper derfor med at bekræfte, at en handling udføres uden noget problem.
Selen kan automatisk tage skærmbilleder; Vi skal bare tilføje kode til screenshot i processen med enhver kodeudførelse, hvor skærmbilleder er nødvendige.
Hvor er der brug for selen Screenshots
Følgende ville være mulighederne:
- Når der er problemer med at finde et element på en webside.
- Hvor der er en timeout i at finde webelementer på en side.
- Når der opstår en fejl eller et problem i systemet / applikationen.
- Når der konstateres en påstandssvigt.
Hvad er Ashot
Ashot () er et tredjepartsværktøj, der understøttes af Selenium-webdriveren til at fange skærmbillederne.
Ashot () giver nedenstående operationer til optagelse af skærmbilleder:
- Optagelse af hele siden
- Optagelse af webelementet
- Sammenligning af billeder
Lad os se, hvordan dette fungerer nøjagtigt i det næste afsnit.
Funktioner i Ashot:
- Det er muligt at tage et screenshot af hele siden.
- Det er også muligt at tage et screenshot af et webelement, som understøttes på forskellige platforme som Android Emulator Browser, iOS Simulator Mobile Safari, de forskellige desktop-browsere).
- Giver en fleksibel sammenligning af skærmbilleder.
- Dekorerer skærmbilleder.
Ashot kan tage skærmbilleder i tre trin:
- Optager et skærmbillede af hele siden.
- Find størrelsen og placeringen af elementet.
- Beskærer det originale skærmbillede.
Hvordan kan vi bruge Ashot i selen
Overvej følgende trin til download og konfiguration af Ashot på din maskine:
- Gå til link.
- Find den nyeste version af jar-filen til stede for Ashot.
- Download og gem jar-filen på en bestemt sti på din maskine.
- Nu for at tilføje jar-filen til dit projekt i Eclipse – Gå til dit projekt -> Højreklik -> gå til egenskaber -> vælg Byg sti -> Biblioteker -> tilføj eksterne krukker
- Gennemse stien, hvor den downloadede jar-fil gemmes.
- Vælg jar-filen, klik på Anvend, og luk.
Sådan tager du skærmbilleder i selen
Selen leverer indbygget funktionalitet til at optage skærmbilleder. I henhold til kravet, TakesScreenshot interface bruges til at tage skærmbilleder, mens Selenium-scripts udføres. Således hjælper Selenium Webdriver med at optage skærmbilleder, mens kode udføres.
I nedenstående afsnit vil vi lære om de forskellige screenshot-typer, der er optaget.
Følgende er typerne:
Optagelse af et skærmbillede af:
- Aktuelt åbent vindue
- Hele websiden
- Bare et specifikt webelement
- Sammenligning af skærmbillede med det originale billede
Lad os forstå ovenstående punkter i detaljer.
# 1) Aktuelt åbent vindue
Lad os se på implementeringen af kode til håndtering af skærmbilleder i Selen for det aktuelt åbne vindue:
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.'); } }
Nedenstående billede er output fra ovenstående kodeimplementering. Her er OrangeHRM-webstedet åbent, og skærmbilledet af login-siden er taget.
(billede kilde )
Således kan vi fange skærmbilleder, hvor det nogensinde er nødvendigt, når vi udfører kode. Skærmbilledet, der er taget, gemmes i en fil med .png- eller .jpeg-udvidelse. Vi er nødt til at angive stien, hvor billedfilen skal gemmes.
# 2) Hele websiden
Lad os se på nedenstående implementeringskode for at tage et screenshot af den komplette side ved hjælp af Ashot i Selenium webdriver. Lad os overveje eksemplet på en side (Jmeter-brugerdefinerede variabler) fra - 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!'); } }
Her, den jmeter-brugerdefinerede variabler side af vores hjemmeside: www.softwaretestinghelp.com åbnes, og så har vi taget et screenshot af denne komplette webside (ved hjælp af ashot () i selen) i .png-format og gemt på den ønskede sti. På samme måde kan vi fange et screenshot af hele siden for enhver webside.
Ved implementering af ovenstående kode til optagelse af skærmbilledet for hele siden er den modtagne output således vist i nedenstående billede for et komplet webside-screenshot.
# 3) Et webelement
Lad os se på nedenstående implementeringskode ved brug af Ashot i Selenium webdriver til at tage et screenshot af et specifikt webelement på websiden.
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!'); } }
Således ved implementering af ovenstående kode til optagelse af et skærmbillede af et bestemt element (her fanen Vedligeholdelse), den modtagne output er som vist i nedenstående billede.
Her vælger vi fanen “Vedligeholdelse” som et element, som et screenshot er påkrævet for. Nævn stien, hvor vi vil gemme skærmbilledet. På samme måde kan vi også fange et skærmbillede til ethvert andet element på et sådant websted.
# 4) Sammenligning af skærmbillede med originalt billede
Lad os se på nedenstående implementeringskode ved brug af Ashot i Selenium webdriver til at tage et screenshot af et logo-element på websiden og sammenligne det med det originale logo.
Lad os overveje eksemplet på dette 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 } } }
Således ved implementering af ovenstående kode til sammenligning af skærmbilledet af et logo-element (her naukri.com-logo) er den modtagne output som vist i nedenstående billede.
Her vælger vi logoet på “naukri.com”, fanger skærmbillede, og derefter sammenlignes det med det originale logo. Forskellen mellem billeder findes ved hjælp af indbyggede funktioner. Hvis der ikke findes nogen forskel i de 2 logo-billeder, udskriver programmet output som “ Begge logo-billeder matchede Ellers udskriver “ Logobillederne er forskellige ”.
Eksempler, hvor skærmbilleder ofte fanges
# 1) Bekræftelse af logout
For at logge ind på et websted skal vi indtaste det korrekte brugernavn og adgangskode, hvorefter vi bliver logget ind på hjemmesiden. Derefter udfører brugeren de krævede muligheder, og når det er gjort med arbejdet, bliver brugeren logget ud.
Så hvis vi leverer en kode til skærmbillede efter at vi er logget ud, vil der igen ses en login-side, som ville bekræfte logout-handlingen. Se nedenstående billede for flere detaljer:
bedste enhedstestningsramme til java
# 2) Bekræftelse af en nyoprettet post
Tilføjelse af kode til skærmbillede efter oprettelse af en ny post bekræfter, at den post, der oprettes med succes. Se nedenstående skærmbillede for flere detaljer.
I tilfælde af at posten ikke oprettes, fortsætter koden ikke længere med at tage skærmbillede, og dette vil bekræfte, at posten ikke oprettes med succes.
# 3) Eksempel på manglende / forkert output
Dette eksempel inkluderer oprettelse af en ny post for jobtitel på OrangeHRM-webstedet. Her er feltet Jobtitel markeret med '*', hvilket betyder, at det er et obligatorisk felt. Så posten oprettes ikke, før de krævede felter er udfyldt, og kun vi er i stand til at gemme posten. Se nedenstående skærmbillede for flere detaljer.
Konklusion
Således har vi i denne artikel set, hvor der er behov for Selenium-screenshots, hvordan vi kan håndtere Screenshots i Selen, hvad er Ashot, hvordan det kan downloades, konfigureres og faktisk bruges i Selenium. Vi forstod implementeringen af kode til håndtering af screenshot og så også et par eksempler, hvor skærmbilleder ofte fanges.
=> Læs gennem den komplette selen-guide
Anbefalet læsning
- 30+ bedste selen-tutorials: Lær selen med rigtige eksempler
- Selen Find Element By Text Tutorial med eksempler
- Introduktion til Selen WebDriver - Selen Tutorial # 8
- ChromeDriver Selen Tutorial: Selen Webdriver Tests på Chrome
- Håndtering af iFrames ved hjælp af Selen WebDriver switchTo () -metoden
- Sådan oprettes gradleprojekt med selen
- Sådan håndteres alarmer / pop op i Selen WebDriver - Selen Tutorial # 16
- Sådan håndteres rullebjælken i Selen Webdriver