Jak pořídit snímek obrazovky v selenu WebDriver

Obsah:

Anonim

Screenshot v Selenium Webdriver

Screenshot selenu Webdriver se používá k analýze chyb. Selénový webový ovladač může během provádění automaticky pořizovat snímky obrazovky. Pokud ale uživatelé potřebují samostatně pořídit snímek obrazovky, musí použít metodu TakeSc Screenshot, která WebDrive upozorní na pořízení snímku obrazovky a jeho uložení do selenu.

V tomto výukovém programu se naučíte,

  • Pořiďte snímek obrazovky pomocí Selenium WebDriver
  • Co je Ashot API?
  • Jak stáhnout a nakonfigurovat Ashot API?
  • Zachyťte snímek celé stránky pomocí rozhraní AShot API
  • Pořízení snímku obrazovky konkrétního prvku stránky
  • Srovnání obrazu pomocí AShot

Pořiďte snímek obrazovky pomocí Selenium WebDriver

Pořízení snímku obrazovky v selenu je 3krokový proces

Krok 1) Převeďte objekt webového ovladače na TakeSc Screenshot

TakesSc Screenshot scrShot = ((TakesSc Screenshot) webdriver);

Krok 2) Zavolejte metodu getSc ScreenshotAs pro vytvoření obrazového souboru

Soubor SrcFile = scrShot.getSc ScreenshotAs (OutputType.FILE);

Krok 3) Zkopírujte soubor do požadovaného umístění

Příklad: V tomto příkladu pořídíme snímek obrazovky http://demo.guru99.com/V4/ a uložíme jej jako C: /Test.png.webp

balíček Guru99TakeSc Screenshot;import java.io.File;import org.apache.commons.io.FileUtils;import org.openqa.selenium.OutputType;import org.openqa.selenium.TakesSc Screenshot;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;veřejná třída Guru99TakeSc Screenshot {@Testpublic void testGuru99TakeScreenShot () vyvolá výjimku {Ovladač WebDriver;System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");driver = new FirefoxDriver ();// přejít na urldriver.get ("http://demo.guru99.com/V4/");// Funkce pořízení snímku obrazovky pro voláníthis.takeSnapShot (ovladač, "c: //test.png.webp");}/ *** Tato funkce pořídí snímek obrazovky* @param webdriver* @param fileWithPath* @hodí výjimku* /public static void takeSnapShot (WebDriver webdriver, String fileWithPath) vyvolá výjimku {// Převést objekt webového ovladače na TakeSc ScreenshotTakesSc Screenshot scrShot = ((TakesSc Screenshot) webdriver);// Voláním metody getSc ScreenshotAs k vytvoření obrazového souboruSoubor SrcFile = scrShot.getSc ScreenshotAs (OutputType.FILE);// Přesuňte obrazový soubor do nového cíleSoubor DestFile = nový soubor (fileWithPath);// Zkopírujte soubor na místo určeníFileUtils.copyFile (SrcFile, DestFile);}}

POZNÁMKA: Selen verze 3.9.0 a vyšší neposkytuje Apache Commons IO JAR. Můžete si je jednoduše stáhnout zde a zavolat jim ve svém projektu

Co je Ashot API?

Ashot je nástroj třetí strany od společnosti Yandex podporovaný programem Selenium WebDriver k pořizování snímků obrazovky. Pořizuje snímek obrazovky jednotlivého WebElementu a také celostránkový snímek stránky, který je významnější než velikost obrazovky.

Jak stáhnout a nakonfigurovat Ashot API?

Ashot API lze konfigurovat dvěma způsoby

  • 1. Používání Maven
  • 2. Ručně bez použití jakéhokoli nástroje

Konfigurace pomocí Maven:

  • Přejít na https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
  • Prozatím klikněte na nejnovější verzi. Je to 1.5.4
  • Zkopírujte kód závislosti a přidejte jej do souboru pom.xml

  • Uložte soubor a Maven přidá nádobu na cestu sestavení
  • A teď jste připraveni !!!

Konfigurovat ručně bez jakéhokoli nástroje pro závislost

  1. Přejít na https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
  2. Prozatím klikněte na nejnovější verzi. Je to 1.5.4
  3. Klikněte na nádobu, stáhněte ji a uložte do svého zařízení

  1. Přidejte soubor jar do cesty sestavení:
  2. V Eclipse klikněte pravým tlačítkem na projekt -> přejděte na vlastnosti -> Vytvořit cestu -> Knihovny -> Přidat externí nádoby
  3. Vyberte soubor jar
  4. Použít a zavřít

Zachyťte snímek celé stránky pomocí rozhraní AShot API

Krok 1) Vytvořte objekt Ashot a zavolejte metodu takeSc Screenshot (), pokud chcete pouze snímek obrazovky pro stránku s velikostí obrazovky.

Screenshot obrazovky = nový Ashot (). TakeSc Screenshot (ovladač);

Pokud však chcete snímek obrazovky stránky větší než velikost obrazovky, zavolejte metodu shootStrategy () před voláním metody takeSc Screenshot () a nastavte zásadu. Pak zavolejte metodu takeSc Screenshot () předávající webdriver, například

Screenshot obrazovky = nový AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeSc Screenshot (ovladač);

Zde je 1000 rolován čas v milisekundách, takže pro pořízení snímku obrazovky bude program rolovat každých 1000 ms.

Krok 2): Nyní získejte obrázek ze snímku obrazovky a zapište jej do souboru. Můžete zadat typ souboru jako jpg.webp, png atd.

ImageIO.write (screenshot.getImage (), "jpg.webp", nový soubor (". \\ screenshot \\ fullimage.jpg.webp"));

Pořízení celostránkového snímku obrazovky stránky, která je větší než velikost obrazovky.

Příklad: Zde je příklad zachycení celostránkového snímku obrazovky http://demo.guru99.com/test/guru99home/ a uložení do souboru „screenshot.jpg.webp“.

Z důvodu použití třídy ShootingStrategy rozhraní Ashot API budeme moci zachytit celý obrázek stránky větší než velikost obrazovky. Zde je program:

balíček 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.Sc Screenshot;import ru.yandex.qatools.ashot.shooting.ShootingStrategies;veřejná třída TestSc ScreenshotUsingAshot {public static void main (String [] args) vyvolá IOException {System.setProperty ("webdriver.chrome.driver", "c: \\ chromedriver.exe");Ovladač WebDriver = nový ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maximize ();Screenshot = nový AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeSc Screenshot (ovladač);ImageIO.write (screenshot.getImage (), "jpg.webp", nový soubor ("c: \\ ElementSc Screenshot.jpg.webp"));}}

Pořízení snímku obrazovky konkrétního prvku stránky

Příklad: Zde je příklad zachycení screenshotu prvku s logem Guru 99 na stránce http://demo.guru99.com/test/guru99home/ a uložení do souboru „ElementSc Screenshot.jpg.webp“. Zde je kód:

balíček 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.Sc Screenshot;import ru.yandex.qatools.ashot.shooting.ShootingStrategies;veřejná třída TestElementSc ScreenshotUsingAshot {public static void main (String [] args) vyvolá IOException {System.setProperty ("webdriver.chrome.driver", "c: \\ chromedriver.exe");Ovladač WebDriver = nový ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maximize ();// Najděte prvek a pořiďte snímek obrazovkyWebElement element = driver.findElement (By.xpath ("// * [@ id = \" site-name \ "] / a [1] / img"));// Spolu s prvkem pass driver také v metodě takeSc Screenshot ().Screenshot = nový AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeSc Screenshot (ovladač, prvek);ImageIO.write (screenshot.getImage (), "jpg.webp", nový soubor ("c: \\ ElementSc Screenshot.jpg.webp"));}}

Srovnání obrazu pomocí AShot

balíček Guru99;importovat 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.Sc Screenshot;import ru.yandex.qatools.ashot.comparison.ImageDiff;import ru.yandex.qatools.ashot.comparison.ImageDiffer;veřejná třída TestImageComaprison {public static void main (String [] args) vyvolá IOException {System.setProperty ("webdriver.chrome.driver", "C: \\ chromedriver.exe");Ovladač WebDriver = nový ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");// Najděte prvek a pořiďte snímek obrazovkyWebElement logoElement = driver.findElement (By.xpath ("// * [@ id = \" site-name \ "] / a [1] / img"));Screenshot logoElementSc Screenshot = nový AShot (). TakeSc Screenshot (ovladač, logoElemnent);// přečíst obrázek k porovnáníBufferedImage expectImage = ImageIO.read (nový soubor ("C: \\ Guru99logo.png.webp"));BufferedImage actualImage = logoElementSc Screenshot.getImage ();// Vytvoření objektu ImageDiffer a metoda volání makeDiff ()ImageDiffer imgDiff = nový ImageDiffer ();ImageDiff diff = imgDiff.makeDiff (actualImage, expectImage);if (diff.hasDiff () == true) {System.out.println ("Obrázky jsou stejné");} else {System.out.println ("Obrázky se liší");}driver.quit ();}}

souhrn

  • Ashot API je freeware od Yandexu.
  • Jedná se o nástroj pro pořízení snímku obrazovky v selenu.
  • Pomůže vám pořídit snímek obrazovky jednotlivého WebElementu na různých platformách, jako jsou stolní prohlížeče, mobilní simulátor iOS, prohlížeč emulátorů Android.
  • Může trvat snímek obrazovky stránky, která je větší než velikost obrazovky.
  • Tato funkce byla odstraněna v selenu verze 3, takže Ashot API je dobrá volba.
  • Může zdobit snímky obrazovky.
  • Poskytuje srovnání snímků obrazovky.

Umožněno díky příspěvkům Shradhdha Dave