how take screenshot selenium
Denne veiledningen forklarer viktigheten av Selenium Screenshot og hvordan du bruker Ashot til å ta Screenshot i Selenium-applikasjonen med eksempler:
Skjermbilder brukes i utgangspunktet i feilanalyse. De hjelper med å forstå om applikasjonen fungerer i henhold til brukerens krav eller ikke.
For hver testtilfelle kan mottatte utdata være forskjellige, noen ganger mottas riktig utdata, noen ganger får vi en feil, noen ganger mottas feilmelding på grunn av manglende eller utilstrekkelig inndata etc. Skjermbilde hjelper med å spore bevis på handlinger / utdata mottatt.
=> Sjekk ALLE Selen-opplæringsprogrammer her
I denne opplæringen vil vi lære hvor Selenium-skjermbilder er nødvendige. Vi vil diskutere Ashot og hvordan kan vi bruke Ashot i Selenium (installasjon og konfigurasjon av ashot ()), lære å fange skjermbilder i Selenium (for hele websiden, for et enkelt element på siden og for et øyeblikk åpent vindu, også sammenligne 2 bilder) og se på noen eksempler der skjermbilder ofte blir tatt.
Hva du vil lære:
Forstå Selen-skjermbilder
Ovenstående bilde er et eksempel på et skjermbilde som er tatt mens du kjører kode fra Gmail-nettstedet. Bildet hjelper til med å bekrefte at brukeren har logget seg på e-postkontoen med riktig brukernavn og passord.
Dermed er skjermbilder veldig nyttige for å fange handlingene / utdataene som mottas etter at en handling er utført, og hjelper dermed med å bekrefte en handling som utføres uten problemer.
Selen kan automatisk ta skjermbilder; Vi må bare legge til kode for skjermdump i prosessen med hvilken som helst kodeutførelse der skjermbilder er nødvendige.
Hvor er selen skjermbilder nødvendig
Følgende vil være mulighetene:
- Når det er problemer med å finne et element på en webside.
- Hvor det er en tidsavbrudd for å finne webelementer på en side.
- Når det oppstår en feil eller et problem i systemet / applikasjonen.
- Når en påstandssvikt oppstår.
Hva er Ashot
Ashot () er et tredjepartsverktøy som støttes av Selenium-nettdriveren for å fange skjermbildene.
Ashot () gir operasjoner nedenfor for å ta skjermbilder:
- Fange hele siden
- Fange nettelementet
- Sammenligning av bilder
La oss se hvordan akkurat dette fungerer i neste avsnitt.
Funksjoner av Ashot:
- Det er mulig å ta et skjermbilde av hele siden.
- Det er mulig å ta et skjermbilde av et webelement også, som støttes på forskjellige plattformer som Android Emulator Browser, iOS Simulator Mobile Safari, de forskjellige stasjonære nettleserne).
- Gir en fleksibel sammenligning av skjermbilder.
- Dekorer skjermbilder.
Ashot kan ta skjermbilder i tre trinn:
- Tar et skjermbilde av hele siden.
- Finn størrelsen og posisjonen til elementet.
- Beskjærer det originale skjermbildet.
Hvordan kan vi bruke Ashot i selen
Vurder følgende trinn for nedlasting og konfigurering av Ashot på maskinen din:
- Gå til lenke.
- Finn den siste versjonen av jar-filen som er tilstede for Ashot.
- Last ned og lagre jar-filen på en bestemt bane på maskinen din.
- Nå for å legge til jar-filen til prosjektet ditt i Eclipse – Gå til prosjektet ditt -> Høyreklikk -> gå til egenskaper -> velg Bygg bane -> Biblioteker -> legg til eksterne krukker
- Bla gjennom banen der den nedlastede jar-filen er lagret.
- Velg jar-filen, klikk på Apply og lukk.
Hvordan ta skjermbilder i selen
Selenium har innebygd funksjonalitet for å fange skjermbilder. I henhold til kravet, TakesScreenshot grensesnitt brukes til å ta skjermbilder mens du utfører Selenium-skriptene. Dermed hjelper Selenium Webdriver med å fange skjermbilder mens koden utføres.
I delen nedenfor vil vi lære om de forskjellige skjermbildetypene som er tatt.
Følgende er typene:
hvordan man kaller en metode ved hjelp av en rekke objekter i java
Ta et skjermbilde av:
- Gjeldende åpent vindu
- Hele websiden
- Bare et bestemt webelement
- Sammenligning av skjermbilde med originalbildet
La oss forstå de ovennevnte punktene i detalj.
# 1) Nåværende åpent vindu
La oss se på implementeringen av kode for håndtering av skjermbilder i Selen for det åpne vinduet:
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.'); } }
Bildet nedenfor er utdata fra ovennevnte kodeimplementering. Her er OrangeHRM-nettstedet åpent og skjermbildet av påloggingssiden er tatt.
(bilde kilde )
Dermed kan vi ta skjermbilder der det noen gang er nødvendig når vi kjører kode. Skjermbildet som er tatt, lagres i en fil med .png- eller .jpeg-utvidelse. Vi må gi banen der bildefilen må lagres.
# 2) Hele websiden
La oss se på implementeringskoden nedenfor for å ta et skjermbilde av hele siden, ved hjelp av Ashot i Selenium webdriver. For dette la oss se på eksemplet på en side (Jmeter-brukerdefinerte 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-brukerdefinerte variabler side på nettstedet vårt: www.softwaretestinghelp.com åpnes, og så har vi tatt et skjermbilde av denne komplette websiden (ved hjelp av ashot () i selen) i .png-format og lagret på ønsket sti. På samme måte kan vi ta et skjermbilde av hele siden for hvilken som helst webside.
Når du implementerer den ovennevnte koden for å ta skjermbildet av hele siden, blir den mottatte utgangen som vist i bildet nedenfor for et komplett skjermbilde på websiden.
# 3) Et nettelement
La oss se på implementeringskoden nedenfor, med bruk av Ashot i Selenium webdriver for å ta skjermbilde av et bestemt 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!'); } }
Ved implementering av ovennevnte kode for å ta et skjermbilde av et bestemt element (her Vedlikehold-fanen), mottatte utdata er som vist på bildet nedenfor.
Her velger vi fanen “Vedlikehold” som et element som skjermbilde kreves for. Nevn banen der vi vil at skjermbildet skal lagres. På samme måte som vi kan ta et skjermbilde for ethvert annet element også på et slikt nettsted.
# 4) Sammenligning av skjermbilde med originalbilde
La oss se på implementeringskoden nedenfor ved bruk av Ashot i Selenium webdriver for å ta et skjermbilde av et logoelement på websiden og sammenligne det med den opprinnelige logoen.
For dette la oss se på eksemplet på 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 } } }
Ved implementering av ovennevnte kode for sammenligning av skjermbildet til et logo-element (her naukri.com-logo), er den mottatte utgangen som vist i bildet nedenfor.
Her velger vi logoen til “naukri.com”, tar skjermbildet, og deretter blir den sammenlignet med den opprinnelige logoen. Forskjellen mellom bilder er funnet ved hjelp av innebygde funksjoner. Hvis det ikke blir funnet noen forskjell i de to logobildene, skriver programmet ut som “ Begge logobildene stemte overens Ellers skriver ut “ Logobildene er forskjellige ”.
Eksempler der skjermbilder ofte tas
# 1) Bekreftelse på utlogging
For å logge inn på et nettsted, må vi oppgi riktig brukernavn og passord hvoretter vi blir logget inn på nettstedet. Deretter utfører brukeren de nødvendige alternativene, og når du er ferdig med arbeidet, blir brukeren logget ut.
Så hvis vi oppgir en kode for skjermbilde etter at vi er logget ut, vil igjen påloggingssiden bli sett som vil bekrefte utloggingshandlingen. Se bildet nedenfor for mer informasjon:
hvordan spiller du swf-filer
# 2) Bekreftelse av en nylig opprettet plate
Å legge til kode for skjermbilde etter å ha opprettet en ny post, bekrefter at posten ble opprettet. Se skjermbildet nedenfor for mer informasjon.
I tilfelle når posten ikke blir opprettet, fortsetter koden ikke lenger for å ta skjermbilde, og dette vil bekrefte at posten ikke blir opprettet.
# 3) Eksempel på manglende / feil utdata
Dette eksemplet inkluderer å opprette en ny post for jobbtittel på OrangeHRM-nettstedet. Her er feltet Jobbtittel merket ‘*’ som betyr at det er et obligatorisk felt. Så, posten vil ikke bli opprettet før de nødvendige feltene er fylt ut, og bare vi vil være i stand til å lagre posten. Se skjermbildet nedenfor for mer informasjon.
Konklusjon
I denne artikkelen har vi sett hvor Selenium-skjermbilder er nødvendige, hvordan vi kan håndtere Skjermbilder i Selen, hva er Ashot, hvordan det kan lastes ned, konfigureres og faktisk brukes i Selen. Vi forsto implementeringen av kode for håndtering av skjermbilde og så også noen eksempler der skjermbilder ofte blir tatt.
=> Les gjennom hele Selen-guiden
Anbefalt lesing
- 30+ beste selenopplæringsprogrammer: Lær selen med virkelige eksempler
- Selen Find Element By Text Tutorial med eksempler
- Introduksjon til Selen WebDriver - Selenium Tutorial # 8
- ChromeDriver Selenium Tutorial: Selen Webdriver Tests on Chrome
- Håndtering av iFrames ved hjelp av Selenium WebDriver switchTo () -metoden
- Hvordan lage gradeprosjekt med selen
- Hvordan håndtere varsler / popup-vinduer i Selen WebDriver - Selenium-veiledning nr. 16
- Hvordan håndtere rullefelt i Selen Webdriver