Näyttökuva Selenium Webdriver -sovelluksessa
Kuvakaappaus seleeniä Webdriver käytetään bug analyysiä. Selenium-verkko-ohjain voi ottaa kuvakaappauksia automaattisesti suorituksen aikana. Mutta jos käyttäjien on kaapattava kuvakaappaus itse, heidän on käytettävä TakeScreenshot-menetelmää, joka ilmoittaa WebDrivelle ottamaan kuvakaappauksen ja tallentamaan sen Seleniumiin.
Tässä opetusohjelmassa opit,
- Sieppaa näyttökuva Selenium WebDriver -sovelluksella
- Mikä on Ashot API?
- Kuinka ladata ja määrittää Ashot-sovellusliittymä?
- Sieppaa koko sivun näyttökuva AShot-sovellusliittymällä
- Kuvakaappauksen ottaminen sivun tietystä osasta
- Kuvien vertailu AShot-sovelluksella
Sieppaa näyttökuva Selenium WebDriver -sovelluksella
Näyttökuvan ottaminen seleenissä on 3-vaiheinen prosessi
Vaihe 1) Muunna web-ohjainobjekti TakeScreenshotiksi
TakesScreenshot scrShot = ((TakesScreenshot) verkko-ohjain);
Vaihe 2) Kutsu getScreenshotAs-menetelmä kuvatiedoston luomiseksi
Tiedosto SrcFile = scrShot.getScreenshotAs (OutputType.FILE);
Vaihe 3) Kopioi tiedosto haluttuun sijaintiin
Esimerkki: Tässä esimerkissä otamme näytön sieppauksen osoitteesta http://demo.guru99.com/V4/ ja tallennamme sen nimellä C: /Test.png.webp
paketti Guru99TakeScreenshot;tuo java.io.File;tuo org.apache.commons.io.FileUtils;tuo org.openqa.selenium.OutputType;tuo org.openqa.selenium.TakesScreenshot;tuo org.openqa.selenium.WebDriver;tuo org.openqa.selenium.firefox.FirefoxDriver;tuo org.testng.annotations.Test;julkisen luokan Guru99TakeScreenshot {@Testatapublic void testGuru99TakeScreenShot () heittää poikkeuksen {WebDriver-ohjain;System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");ohjain = uusi FirefoxDriver ();// goto urldriver.get ("http://demo.guru99.com/V4/");// Soita kuvakaappaus -toimintothis. takeSnapShot (ohjain, "c: //test.png.webp");}/ *** Tämä toiminto ottaa kuvakaappauksen* @param-verkko-ohjain* @param tiedostoWithPath* @throws Poikkeus* /public static void takeSnapShot (WebDriver webdriver, String fileWithPath) heittää poikkeuksen {// Muunna web-ohjainobjekti TakeScreenshotiksiTakesScreenshot scrShot = ((TakesScreenshot) verkko-ohjain);// Kutsu getScreenshotAs-menetelmä kuvatiedoston luomiseksiTiedosto SrcFile = scrShot.getScreenshotAs (OutputType.FILE);// Siirrä kuvatiedosto uuteen kohteeseenFile DestFile = uusi tiedosto (fileWithPath);// Kopioi tiedosto määränpäähänFileUtils.copyFile (SrcFile, DestFile);}}
HUOMAUTUS: Seleeniversio 3.9.0 tai uudempi ei tarjoa Apache Commons IO JAR -ohjelmaa. Voit ladata ne täältä ja kutsua heitä projektissasi
Mikä on Ashot API?
Ashot on Yandexin kolmannen osapuolen apuohjelma, jota Selenium WebDriver tukee näyttökuvien kaappaamiseen. Se ottaa kuvakaappauksen yksittäisestä WebElementista sekä koko sivun kuvakaappauksen sivusta, mikä on merkittävämpi kuin näytön koko.
Kuinka ladata ja määrittää Ashot-sovellusliittymä?
Ashot-sovellusliittymä voidaan määrittää kahdella tavalla
- 1.Mavenin käyttö
- 2. manuaalisesti ilman työkaluja
Määritä Mavenin kautta:
- Siirry osoitteeseen https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
- Napsauta uusinta versiota toistaiseksi. Se on 1.5.4
- Kopioi riippuvuuskoodi ja lisää pom.xml-tiedostoon
- Tallenna tiedosto, ja Maven lisää purkin rakennuspolkuusi
- Ja nyt olet valmis !!!
Määrittää manuaalisesti ilman riippuvuustyökalua
- Siirry osoitteeseen https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
- Napsauta uusinta versiota toistaiseksi. Se on 1.5.4
- Napsauta purkkia, lataa ja tallenna se koneellesi
- Lisää jar-tiedosto rakennepolkuasi:
- Napsauta hiiren kakkospainikkeella projektia Eclipse-sovelluksessa -> siirry ominaisuuksiin -> Koontirata -> Kirjastot -> Lisää ulkoiset purkit
- Valitse purkitiedosto
- Käytä ja sulje
Sieppaa koko sivun näyttökuva AShot-sovellusliittymällä
Vaihe 1) Luo Ashot-objekti ja soita takeScreenshot () -menetelmä, jos haluat vain kuvakaappauksen näyttökokosivulle.
Kuvakaappauksen näyttökuva = uusi Ashot (). TakeScreenshot (ohjain);
Mutta jos haluat kuvakaappauksen sivun suuremmasta kuin ruudun koko, kutsu shootStrategy () -menetelmää ennen kuin otat takeScreenshot () -metodin käytännön määrittämiseksi. Kutsu sitten menetelmä takeScreenshot (), joka kulkee esimerkiksi verkko-ohjaimen kautta,
Näyttökuvan kuvakaappaus = uusi AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (ohjain);
Täällä 1000 vieritetään aikaa millisekunteina, joten kuvakaappauksen ottamiseksi ohjelma vierittää kutakin 1000 ms.
Vaihe 2): Hanki nyt kuva kuvakaappauksesta ja kirjoita se tiedostoon. Voit antaa tiedostotyypin JPG.webp, Png jne.
ImageIO.write (screenshot.getImage (), "jpg.webp", uusi tiedosto (". \\ kuvakaappaus \\ fullimage.jpg.webp");
Koko sivun kuvakaappauksen ottaminen sivusta, joka on suurempi kuin näytön koko.
Esimerkki: Tässä on esimerkki koko sivun kuvakaappauksen tallentamisesta osoitteesta http://demo.guru99.com/test/guru99home/ ja tallennetaan tiedostoon "screenshot.jpg.webp".
Ashot-sovellusliittymän ShootingStrategy-luokan käyttämisen ansiosta pystymme ottamaan kuvan koko sivun suuremmasta kuin näytön koko. Tässä on ohjelma:
paketti Guru99;tuo java.io.File;tuo java.io.IOException;tuo javax.imageio.ImageIO;tuo org.openqa.selenium.By;tuonti org.openqa.selenium.WebElement;tuo org.openqa.selenium.WebDriver;tuo org.openqa.selenium.chrome.ChromeDriver;tuo ru.yandex.qatools.ashot.AShot;tuo ru.yandex.qatools.ashot.Screenshot;Tuo ru.yandex.qatools.ashot.shooting.ShootingStrategies;julkinen luokka TestScreenshotUsingAshot {public static void main (String [] args) heittää IOException {System.setProperty ("webdriver.chrome.driver", "c: \\ chromedriver.exe");WebDriver-ohjain = uusi ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");ohjain.hallinta (). ikkuna (). maksimoi ();Näyttökuva = uusi AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (ohjain);ImageIO.write (screenshot.getImage (), "jpg.webp", uusi tiedosto ("c: \\ ElementScreenshot.jpg.webp");}}
Kuvakaappauksen ottaminen sivun tietystä osasta
Esimerkki: Tässä on esimerkki Guru 99 -logon elementtikuvan kaappaamisesta http://demo.guru99.com/test/guru99home/ -sivulta ja tallentaminen tiedostoon "ElementScreenshot.jpg.webp". Tässä on koodi:
paketti Guru99;tuo java.io.File;tuo java.io.IOException;tuo javax.imageio.ImageIO;tuo org.openqa.selenium.By;tuonti org.openqa.selenium.WebElement;tuo org.openqa.selenium.WebDriver;tuo org.openqa.selenium.chrome.ChromeDriver;tuo ru.yandex.qatools.ashot.AShot;tuo ru.yandex.qatools.ashot.Screenshot;Tuo ru.yandex.qatools.ashot.shooting.ShootingStrategies;public class TestElementScreenshotUsingAshot {public static void main (String [] args) heittää IOException {System.setProperty ("webdriver.chrome.driver", "c: \\ chromedriver.exe");WebDriver-ohjain = uusi ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");ohjain.hallinta (). ikkuna (). maksimoi ();// Etsi elementti kuvakaappauksen ottamiseksiWebElement-elementti = driver.findElement (By.xpath ("// * [@ id = \" site-name \ "] / a [1] / img"));// Kuljettajan pass -elementin ohella myös takeScreenshot () -menetelmä.Näyttökuva = uusi AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (ohjain, elementti);ImageIO.write (screenshot.getImage (), "jpg.webp", uusi tiedosto ("c: \\ ElementScreenshot.jpg.webp");}}
Kuvien vertailu AShot-sovelluksella
paketti Guru99;tuo java.awt.image.BufferedImage;tuo java.io.File;tuo java.io.IOException;tuo javax.imageio.ImageIO;tuo org.openqa.selenium.By;tuo org.openqa.selenium.WebDriver;tuonti org.openqa.selenium.WebElement;tuo org.openqa.selenium.chrome.ChromeDriver;tuo ru.yandex.qatools.ashot.AShot;tuo ru.yandex.qatools.ashot.Screenshot;tuo ru.yandex.qatools.ashot.comparison.ImageDiff;tuo ru.yandex.qatools.ashot.comparison.ImageDiffer;julkinen luokka TestImageComaprison {public static void main (String [] args) heittää IOException {System.setProperty ("webdriver.chrome.driver", "C: \\ chromedriver.exe");WebDriver-ohjain = uusi ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");// Etsi elementti ja ota kuvakaappausWebElement logoElement = driver.findElement (By.xpath ("// * [@ id = \" sivuston nimi \ "] / a [1] / img"));Näyttökuva logoElementScreenshot = uusi AShot (). TakeScreenshot (ohjain, logoElemnent);// lue kuva vertailtavaksiBufferedImage expectedImage = ImageIO.read (uusi tiedosto ("C: \\ Guru99logo.png.webp"));BufferedImage actualImage = logoElementScreenshot.getImage ();// Luo ImageDiffer-objekti ja kutsu tapa makeDiff ()ImageDiffer imgDiff = uusi ImageDiffer ();ImageDiff diff = imgDiff.makeDiff (todellinen kuva, odotettavissa oleva kuva);jos (diff.hasDiff () == true) {System.out.println ("Kuvat ovat samat");} muu {System.out.println ("Kuvat ovat erilaisia");}kuljettaja. lopeta ();}}
Yhteenveto
- Ashot API on Yandexin ilmainen ohjelma.
- Se on apuohjelma kuvakaappauksen ottamiseen Seleniumissa.
- Se auttaa sinua ottamaan kuvakaappauksen yksittäisestä WebElementistä eri alustoilla, kuten työpöydän selaimissa, iOS Simulator Mobile Safarissa, Android Emulator Browserissa.
- Se voi ottaa sivun kuvakaappauksen sivun suuremmasta kuin näytön koko.
- Tämä ominaisuus on poistettu seleeniversiosta 3, joten Ashot API on hyvä vaihtoehto.
- Se voi koristaa kuvakaappauksia.
- Se tarjoaa kuvakaappausten vertailun.
Mahdollistettu Shradhdha Dave -yhdistyksen ansiosta