Kuidas teha ekraanipilti Selenium Veebidraiver
⚡ Nutikas kokkuvõte
Jäädvusta ekraanipilt Selenium WebDriver selgitab visuaalsete tõendite jäädvustamist silumiseks ja visuaalseks regressiooniks, käsitledes TakesScreenshot'i, täislehe jäädvustamist, elementide jäädvustamist ja AShoti.

Ekraanipilt sisse Selenium
A Ekraanipilt sisse Selenium Veebidraiver kasutatakse vigade analüüsiks. Selenium veebidraiver saab täitmise ajal automaatselt ekraanipilte teha. Kui aga kasutajad peavad ise ekraanipildi jäädvustama, peavad nad kasutama TakeScreenshot meetodit, mis teavitab WebDrive’i, et see teeks ekraanipildi ja salvestaks selle Selenium.
Kuidas teha ekraanipilti Selenium
Siin on samm-sammuline protsess seleeni WebDriveris ekraanipildi jäädvustamiseks
Step 1) Teisendage veebidraiveri objekt rakenduseks TakeScreenshot
TakesScreenshot scrShot =((TakesScreenshot)webdriver);
Step 2) Pildifaili loomiseks helistage meetodile getScreenshotAs
File SrcFile=scrShot.getScreenshotAs(OutputType.FILE);
Step 3) Kopeerige fail soovitud asukohta
Näide: selles näites võtame ekraanipildi https://demo.guru99.com/V4/ & salvestage see kui C:/Test.png
Siin on ekraanipildi kood seleenis:
package Guru99TakeScreenshot; import java.io.File; 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; public class Guru99TakeScreenshot { @Test public void testGuru99TakeScreenShot() throws Exception{ WebDriver driver ; System.setProperty("webdriver.gecko.">driver","C:\\geckodriver.exe"); driver = new FirefoxDriver(); //goto url driver.get("https://demo.guru99.com/V4/"); //Call take screenshot function this.takeSnapShot(driver, "c://test.png") ; } /** * This function will take screenshot * @param webdriver * @param fileWithPath * @throws Exception */ public static void takeSnapShot(WebDriver webdriver,String fileWithPath) throws Exception{ //Convert web driver object to TakeScreenshot TakesScreenshot scrShot =((TakesScreenshot)webdriver); //Call getScreenshotAs method to create image file File SrcFile=scrShot.getScreenshotAs(OutputType.FILE); //Move image file to new destination File DestFile=new File(fileWithPath); //Copy file at destination FileUtils.copyFile(SrcFile, DestFile); } }
MÄRKUS: Selenium versioon 3.9.0 ja uuemad ei paku Apache Commons IO JAR-i. Saate need lihtsalt alla laadida siin ja helistage neile oma projektis
Mis on Ashot API?
Ashot on kolmanda osapoole utiliit Yandex toetab Selenium WebDriver ekraanipiltide jäädvustamiseks. See teeb ekraanipildi nii üksikust WebElementist kui ka lehe täisleheküljelisest ekraanipildist, mis on olulisem kui ekraani suurus.
Kuidas Ashot API-t alla laadida ja konfigureerida?
Ashot API konfigureerimiseks on kaks meetodit
- Maveni kasutamine
- Käsitsi ilma tööriista kasutamata
Maveni kaudu konfigureerimiseks:
- Minna https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
- Klõpsake praegu uusimal versioonil. See on 1.5.4
- Kopeerige sõltuvuskood ja lisage see oma pom.xml-faili
- Salvestage fail ja Maven lisab purgi teie ehitusteele
- Ja nüüd olete valmis!!!
Käsitsi konfigureerimiseks ilma sõltuvustööriistadeta
- Minna https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
- Klõpsake praegu uusimal versioonil. See on 1.5.4
- Klõpsake purgil, laadige see alla ja salvestage see oma masinasse
- Lisage oma ehitusteele jar-fail:
- In Eclipse, paremklõpsake projektil -> minge atribuutide juurde -> Ehitamise tee -> Teegid -> Lisa väliseid purke
- Valige jar-fail
- Rakenda ja sulge
Jäädvustage kogu lehe ekraanipilt AShot API-ga
Step 1) Looge Ashoti objekt ja helistage meetodile takeScreenshot(), kui soovite lihtsalt ekraanisuuruse lehe ekraanipilti.
Screenshot screenshot = new Ashot().takeScreenshot(driver);
Kui aga soovite lehe ekraanipilti ekraani suurusest suuremaks, helistage enne reegli seadistamiseks meetodit takeScreenshot() meetod shootingStrategy(). Seejärel kutsuge näiteks meetodit takeScreenshot(), mis edastab veebidraiveri,
Screenshot screenshot = new AShot().shootingStrategy(ShootingStrategies.viewportPasting(1000)).takeScreenshot(driver);
Siin keritakse aega 1000 millisekundites, nii et ekraanipildi tegemiseks kerib programm iga 1000 msek järel.
Samm 2): Nüüd hankige pilt ekraanipildist ja kirjutage see faili. Saate määrata failitüübi jpg, png jne.
ImageIO.write(screenshot.getImage(), "jpg", new File(".\\screenshot\\fullimage.jpg"));
Täisleheküljelise ekraanipildi tegemine lehelt, mis on ekraani suurusest suurem.
Näide: Siin on näide täisleheküljelise ekraanipildi jäädvustamiseks https://demo.guru99.com/test/guru99home/ ja salvestage faili "screenshot.jpg".
Tänu Ashot API klassi ShootingStrategy kasutamisele saame jäädvustada ekraani suurusest suurema lehe täispildi.
Siin on seleeniprogrammi ekraanipildi kood:
package Guru99; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import org.openqa.selenium.By; import org.openqa.selenium.WebElement; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import ru.yandex.qatools.ashot.AShot; import ru.yandex.qatools.ashot.Screenshot; import ru.yandex.qatools.ashot.shooting.ShootingStrategies; public class TestScreenshotUsingAshot { public static void main(String[] args) throws IOException { System.setProperty("webdriver.chrome.">driver", "c:\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("https://demo.guru99.com/test/guru99home/"); driver.manage().window().maximize(); Screenshot = new AShot().shootingStrategy(ShootingStrategies.viewportPasting(1000)).takeScreenshot(driver); ImageIO.write(screenshot.getImage(), "jpg", new File("c:\\ElementScreenshot.jpg")); } }
Ekraanipildi tegemine lehe konkreetsest elemendist
Näide: Siin on näide elemendi ekraanipildi jäädvustamisest Guru 99 logo peal https://demo.guru99.com/test/guru99home/ lehele ja salvestage faili "ElementScreenshot.jpg".
Siin on ekraanipildi kood seleenis:
package Guru99; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import org.openqa.selenium.By; import org.openqa.selenium.WebElement; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import ru.yandex.qatools.ashot.AShot; import ru.yandex.qatools.ashot.Screenshot; import ru.yandex.qatools.ashot.shooting.ShootingStrategies; public class TestElementScreenshotUsingAshot { public static void main(String[] args) throws IOException { System.setProperty("webdriver.chrome.">driver", "c:\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("https://demo.guru99.com/test/guru99home/"); driver.manage().window().maximize(); // Find the element to take a screenshot WebElement element = driver.findElement(By.xpath ("//*[@id=\"site-name\"]/a[1]/img")); // Along with driver pass element also in takeScreenshot() method. Screenshot = new AShot().shootingStrategy(ShootingStrategies.viewportPasting(1000)).takeScreenshot(driver,element); ImageIO.write(screenshot.getImage(), "jpg", new File("c:\\ElementScreenshot.jpg")); } }
Kujutise võrdlus AShoti abil
package Guru99; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; 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 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 TestImageComaprison { public static void main(String[] args) throws IOException { System.setProperty("webdriver.chrome.">driver", "C:\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("https://demo.guru99.com/test/guru99home/"); // Find the element and take a screenshot WebElement logoElement = driver.findElement(By.xpath("//*[@id=\"site-name\"]/a[1]/img")); Screenshot logoElementScreenshot = new AShot().takeScreenshot(driver, logoElemnent); // read the image to compare BufferedImage expectedImage = ImageIO.read(new File("C:\\Guru99logo.png")); BufferedImage actualImage = logoElementScreenshot.getImage(); // Create ImageDiffer object and call method makeDiff() ImageDiffer imgDiff = new ImageDiffer(); ImageDiff diff = imgDiff.makeDiff(actualImage, expectedImage); if (diff.hasDiff() == true) { System.out.println("Images are same"); } else { System.out.println("Images are different"); } driver.quit(); } }



