Pillanatkép a Selenium Webdriver alkalmazásban
A Selenium Webdriver képernyőképe a hibaelemzéshez használható. A Selenium webdriver automatikusan képes képernyőképeket készíteni a végrehajtás során. De ha a felhasználóknak maguknak kell képernyőképet készíteniük, akkor a TakeScreenshot módszert kell használniuk, amely értesíti a WebDrive-ot a képernyőkép elkészítéséről és a Seleniumban való tárolásáról.
Ebben az oktatóanyagban megtanulod,
- Rögzítse a képernyőképet a Selenium WebDriver használatával
- Mi az Ashot API?
- Hogyan lehet letölteni és konfigurálni az Ashot API-t?
- Rögzítse a teljes oldali képernyőképet az AShot API segítségével
- Képernyőkép készítése az oldal egy adott eleméről
- Kép összehasonlítás az AShot alkalmazással
Rögzítse a képernyőképet a Selenium WebDriver használatával
A képernyőkép készítése a szelénben 3 lépéses folyamat
1. lépés: Konvertálja a webillesztő-objektumot TakeScreenshot-ba
TakesScreenshot scrShot = ((TakesScreenshot) webdriver);
2. lépés: Hívja a getScreenshotAs módszert képfájl létrehozására
File SrcFile = scrShot.getScreenshotAs (OutputType.FILE);
3. lépés: Másolja a fájlt a kívánt helyre
Példa: Ebben a példában a http://demo.guru99.com/V4/ képernyő-rögzítését vesszük és C: /Test.png.webp néven mentjük el.
csomag 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;nyilvános osztály Guru99TakeScreenshot {@Tesztpublic void testGuru99TakeScreenShot () dobja a Kivételt {WebDriver illesztőprogram;System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");illesztőprogram = new FirefoxDriver ();// goto urldriver.get ("http://demo.guru99.com/V4/");// Hívás képernyőkép készítése funkcióthis. takeSnapShot (meghajtó, "c: //test.png.webp");}/ *** Ez a funkció képernyőképet készít* @param webdriver* @param fájlWithPath* @ dob kivétel* /public static void takeSnapShot (WebDriver webdriver, String fileWithPath) dobja a Kivételt {// A webillesztő-objektum konvertálása TakeScreenshot formátumbaTakesScreenshot scrShot = ((TakesScreenshot) webdriver);// Hívja a getScreenshotAs módszert képfájl létrehozásáraFile SrcFile = scrShot.getScreenshotAs (OutputType.FILE);// Képfájl áthelyezése új rendeltetési helyreFile DestFile = új fájl (fileWithPath);// Fájl másolása a rendeltetési helyreFileUtils.copyFile (SrcFile, DestFile);}}
MEGJEGYZÉS: A szelén 3.9.0 vagy újabb verziója nem biztosítja az Apache Commons IO JAR fájlt. Itt egyszerűen letöltheti őket, és felhívhatja őket a projektjébe
Mi az Ashot API?
Az Ashot a Yandex harmadik féltől származó segédprogramja, amelyet a Selenium WebDriver támogat a képernyőképek rögzítéséhez. Készít egy képernyőképet az egyedi WebElementről, valamint egy teljes oldalas képernyőképet egy oldalról, ami jelentősebb, mint a képernyő mérete.
Hogyan lehet letölteni és konfigurálni az Ashot API-t?
Az Ashot API konfigurálásának két módja van
- 1. Maven használata
- 2. Kézzel, bármilyen eszköz használata nélkül
Konfigurálás a Mavenen keresztül:
- Nyissa meg a https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot webhelyet
- Egyelőre kattintson a legújabb verzióra. 1.5.4
- Másolja a Dependency kódot, és adja hozzá a pom.xml fájljához
- Mentsd el a fájlt, és Maven hozzáadja az üveget az elkészítési útvonalhoz
- És most készen állsz !!!
Kézi konfigurálás függőségi eszköz nélkül
- Nyissa meg a https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot webhelyet
- Egyelőre kattintson a legújabb verzióra. 1.5.4
- Kattintson az üvegre, töltse le és mentse el a gépére
- Adja hozzá a jar fájlt a build elérési útvonalához:
- Az Eclipse alkalmazásban kattintson a jobb gombbal a projektre -> menjen a tulajdonságokhoz -> Build Path -> Könyvtárak -> Külső üvegek hozzáadása
- Válassza ki a jar fájlt
- Alkalmazás és bezárás
Rögzítse a teljes oldali képernyőképet az AShot API segítségével
1. lépés: Hozzon létre egy Ashot objektumot, és hívja meg a takeScreenshot () metódust, ha csak a képernyőképet szeretné a képernyőméret oldalához.
Képernyőkép képernyőkép = new Ashot (). TakeScreenshot (driver);
De ha a képernyő méretétől nagyobb képet szeretne kapni, akkor a házirend beállításához hívja meg a shootStrategy () metódust, mielőtt meghívná a takeScreenshot () metódust. Ezután hívjon meg egy metódust takeScreenshot () például a webdriver átadásával,
Pillanatkép képernyőkép = new AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (driver);
Itt az 1000 milliszekundumban görgeti ki az időt, így képernyőkép készítéséhez a program minden 1000 ms-ig görgetni fog.
2. lépés): Most kapja meg a képet a képernyőképről, és írja be a fájlba. Megadhatja a fájltípust jpg.webp, png stb.
ImageIO.write (screenshot.getImage (), "jpg.webp", új File (". \\ screenshot \\ fullimage.jpg.webp");
Teljes oldalas képernyőkép készítése a képernyő méreténél nagyobb oldalról.
Példa: Itt van egy példa a http://demo.guru99.com/test/guru99home/ teljes oldalas képernyőképének rögzítésére és a "screenshot.jpg.webp" fájlba történő mentésre.
Az Ashot API ShootingStrategy osztályának használata miatt teljes képet tudunk készíteni a képernyő méreténél nagyobb oldalról. Itt van a program:
csomag Guru99;import java.io.File;import java.io.IOException;javax.imageio.ImageIO importálása;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) dobja az IOException {System.setProperty ("webdriver.chrome.driver", "c: \\ chromedriver.exe");WebDriver illesztőprogram = new ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maximize ();Pillanatkép = new AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (illesztőprogram);ImageIO.write (screenshot.getImage (), "jpg.webp", új Fájl ("c: \\ ElementScreenshot.jpg.webp");}}
Képernyőkép készítése az oldal egy adott eleméről
Példa: Itt van a példa a Guru 99 embléma elemi képernyőképének rögzítésére a http://demo.guru99.com/test/guru99home/ oldalon, és mentse az "ElementScreenshot.jpg.webp" fájlba. Itt van a kód:
csomag Guru99;import java.io.File;import java.io.IOException;javax.imageio.ImageIO importálása;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) dobja az IOException {System.setProperty ("webdriver.chrome.driver", "c: \\ chromedriver.exe");WebDriver illesztőprogram = new ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maximize ();// Keresse meg az elemet a képernyőkép elkészítéséhezWebElement elem = driver.findElement (By.xpath ("// * [@ id = \" site-name \ "] / a [1] / img"));// A driver pass elem mellett a takeScreenshot () metódusban is.Pillanatkép = new AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (meghajtó, elem);ImageIO.write (screenshot.getImage (), "jpg.webp", új Fájl ("c: \\ ElementScreenshot.jpg.webp");}}
Kép összehasonlítás az AShot alkalmazással
csomag Guru99;importálja a java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;javax.imageio.ImageIO importálása;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;nyilvános osztály TestImageComaprison {public static void main (String [] args) dobja az IOException {System.setProperty ("webdriver.chrome.driver", "C: \\ chromedriver.exe");WebDriver illesztőprogram = new ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");// Keresse meg az elemet, és készítsen képernyőképetWebElement logoElement = driver.findElement (By.xpath ("// * [@ id = \" site-name \ "] / a [1] / img"));Screenshot logoElementScreenshot = new AShot (). TakeScreenshot (illesztőprogram, logoElemnent);// olvassa el a képet az összehasonlításhozBufferedImage expectedImage = ImageIO.read (új fájl ("C: \\ Guru99logo.png.webp"));BufferedImage actualImage = logoElementScreenshot.getImage ();// ImageDiffer objektum létrehozása és a makeDiff () hívási módszerImageDiffer imgDiff = új ImageDiffer ();ImageDiff diff = imgDiff.makeDiff (actualImage, várhatóImage);if (diff.hasDiff () == igaz) {System.out.println ("A képek ugyanazok");} más {System.out.println ("A képek különbözőek");}driver.quit ();}}
Összegzés
- Az Ashot API egy ingyenes szoftver a Yandex-től.
- Ez egy segédprogram a képernyőkép készítéséhez a Seleniumban.
- Ez segít képernyőképet készíteni egy-egy WebElementről különböző platformokon, például asztali böngészőkben, iOS Simulator Mobile Safari, Android Emulator Browser alkalmazásban.
- A képernyőméretnél nagyobb oldalról képernyőképet készíthet.
- Ezt a funkciót a szelén 3. verziójában eltávolítottuk, így az Ashot API jó lehetőség.
- Díszítheti a képernyőképeket.
- Képernyőkép-összehasonlítást nyújt.
Shradhdha Dave közreműködésével vált lehetővé