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(); } }



