Kaip fotografuoti „Selenium WebDriver“

Turinys:

Anonim

Ekrano kopija „Selenium Webdriver“

Ekrano seleno Webdriver naudojamas klaidų analizė. „Selenium“ žiniatinklio tvarkyklė vykdymo metu gali automatiškai padaryti ekrano kopijas. Bet jei vartotojai turi patys užfiksuoti ekrano kopiją, jie turi naudoti „TakeScreenshot“ metodą, kuris praneša „WebDrive“ padaryti ekrano kopiją ir laikyti ją „Selenium“.

Šioje pamokoje sužinosite,

  • Užfiksuokite ekrano kopiją naudodami „Selenium WebDriver“
  • Kas yra „Ashot“ API?
  • Kaip atsisiųsti ir konfigūruoti „Ashot“ API?
  • Užfiksuokite viso puslapio ekrano kopiją naudodami „AShot“ API
  • Tam tikro puslapio elemento ekrano kopija
  • Vaizdų palyginimas naudojant „AShot“

Užfiksuokite ekrano kopiją naudodami „Selenium WebDriver“

„Selenium“ ekrano kopija yra 3 žingsnių procesas

1 žingsnis. Konvertuokite žiniatinklio tvarkyklės objektą į „TakeScreenshot“

„TakesScreenshot“ scrShot = ((„TakesScreenshot“ žiniatinklio tvarkyklė);

2 žingsnis. Norėdami sukurti vaizdo failą, iškvieskite „getScreenshotAs“

Failas SrcFile = scrShot.getScreenshotAs (OutputType.FILE);

3 žingsnis) Nukopijuokite failą į norimą vietą

Pavyzdys: Šiame pavyzdyje mes užfiksuosime ekrano užrašą iš http://demo.guru99.com/V4/ ir išsaugosime jį kaip C: /Test.png.webp

paketas „Guru99TakeScreenshot“;importuoti java.io.File;importuoti org.apache.commons.io.FileUtils;importuoti org.openqa.selenium.OutputType;importuoti org.openqa.selenium.TakesScreenshot;importuoti org.openqa.selenium.WebDriver;importuoti org.openqa.selenium.firefox.FirefoxDriver;importuoti org.testng.annotations.Test;viešosios klasės „Guru99TakeScreenshot“ {@Testpublic void testGuru99TakeScreenShot () išmeta išimtį {„WebDriver“ tvarkyklė;System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");tvarkyklė = new FirefoxDriver ();// goto urldriver.get („http://demo.guru99.com/V4/“);// Skambučio ekrano kopijos funkcijathis. takeSnapShot (tvarkyklė, "c: //test.png.webp");}/ *** Ši funkcija padarys ekrano kopiją* @param žiniatinklio tvarkyklė* @param fileWithPath* @ throws išimtis* /public static void takeSnapShot („WebDriver“ žiniatinklio tvarkyklė, „String fileWithPath“) išmeta išimtį {// Konvertuoti žiniatinklio tvarkyklės objektą į „TakeScreenshot“„TakesScreenshot“ scrShot = ((„TakesScreenshot“ žiniatinklio tvarkyklė);// Skambinkite „getScreenshotAs“ metodu, kad sukurtumėte vaizdo failąFailas SrcFile = scrShot.getScreenshotAs (OutputType.FILE);// Perkelkite vaizdo failą į naują paskirties vietąFailas DestFile = naujas failas (fileWithPath);// Kopijuoti failą paskirties vietojeFileUtils.copyFile (SrcFile, DestFile);}}

PASTABA: „ Selenium“ 3.9.0 ir naujesnėse versijose nėra „Apache Commons IO JAR“. Galite paprasčiausiai juos atsisiųsti čia ir paskambinti į savo projektą

Kas yra „Ashot“ API?

„Ashot“ yra „Yandex“ trečiosios šalies programa, palaikoma „Selenium WebDriver“, kad būtų galima užfiksuoti ekrano kopijas. Tai daro atskiros „WebElement“ ekrano kopiją, taip pat viso puslapio ekrano kopiją, kuri yra reikšmingesnė už ekrano dydį.

Kaip atsisiųsti ir konfigūruoti „Ashot“ API?

Yra du „Ashot“ API konfigūravimo būdai

  • 1. Naudojant Maveną
  • 2. Rankiniu būdu nenaudojant jokio įrankio

Norėdami sukonfigūruoti per „Maven“:

  • Eikite į https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
  • Kol kas spustelėkite naujausią versiją. Tai 1.5.4
  • Nukopijuokite priklausomybės kodą ir pridėkite prie failo pom.xml

  • Išsaugokite failą ir Mavenas pridės stiklainį prie jūsų sukūrimo kelio
  • Ir dabar jūs esate pasirengęs !!!

Konfigūruoti rankiniu būdu be jokio priklausomybės įrankio

  1. Eikite į https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
  2. Kol kas spustelėkite naujausią versiją. Tai 1.5.4
  3. Spustelėkite stiklainį, atsisiųskite ir išsaugokite jį savo kompiuteryje

  1. Pridėkite „jar“ failą savo kūrimo kelyje:
  2. „Eclipse“ dešiniuoju pelės mygtuku spustelėkite projektą -> eikite į ypatybes -> „Sukurti kelią“ -> Bibliotekos -> Pridėti išorinius indelius
  3. Pasirinkite stiklainio failą
  4. Taikyti ir uždaryti

Užfiksuokite viso puslapio ekrano kopiją naudodami „AShot“ API

1 žingsnis) Sukurkite „Ashot“ objektą ir iškvieskite „takeScreenshot“ () metodą, jei norite tik ekrano dydžio puslapio ekrano kopijos.

Ekrano kopijos ekrano kopija = new Ashot (). TakeScreenshot (tvarkyklė);

Bet jei norite, kad puslapio ekrano kopija būtų didesnė už ekrano dydį, prieš nustatydami politiką, iškvieskite „shootStrategy (“) metodą prieš iškviesdami „takeScreenshot“ () metodą. Tada iškvieskite metodą takeScreenshot (), praleisdami žiniatinklio tvarkyklę, pavyzdžiui,

Ekrano kopijos paveikslėlis = new AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (tvarkyklė);

Čia 1000 yra slinkties laikas milisekundėmis, taigi, norint padaryti ekrano kopiją, programa slinks kiekvieną 1000 ms.

2 žingsnis): Dabar gaukite vaizdą iš ekrano kopijos ir įrašykite jį į failą. Galite nurodyti failo tipą kaip jpg.webp, png ir kt.

ImageIO.write (screenshot.getImage (), "jpg.webp", naujas failas (". \\ screenshot \\ fullimage.jpg.webp");

Daro didesnį nei ekrano dydis viso puslapio ekrano kopiją.

Pavyzdys: Štai pavyzdys, kaip užfiksuoti viso puslapio http://demo.guru99.com/test/guru99home/ ekrano kopiją ir išsaugoti faile „screenshot.jpg.webp“.

Dėl „Ashot“ API „ShootingStrategy“ klasės naudojimo galėsime užfiksuoti visą puslapio, didesnio už ekrano dydį, vaizdą. Čia yra programa:

paketas „Guru99“;importuoti java.io.File;importuoti java.io.IOException;importuoti javax.imageio.ImageIO;importuoti org.openqa.selenium.By;importuoti org.openqa.selenium.WebElement;importuoti org.openqa.selenium.WebDriver;importuoti org.openqa.selenium.chrome.ChromeDriver;importuoti ru.yandex.qatools.ashot.AShot;importuoti ru.yandex.qatools.ashot.Screenshot;importuoti ru.yandex.qatools.ashot.shooting.ShootingStrategies;viešosios klasės „TestScreenshotUsingAshot“ {public static void main (String [] args) meta IOException {System.setProperty ("webdriver.chrome.driver", "c: \\ chromedriver.exe");„WebDriver“ tvarkyklė = nauja „ChromeDriver“ ();driver.get ("http://demo.guru99.com/test/guru99home/");vairuotojas.tvarkyti (). langas (). padidinti ();Screenshot = new AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (tvarkyklė);ImageIO.write (screenshot.getImage (), "jpg.webp", naujas failas ("c: \\ ElementScreenshot.jpg.webp");}}

Tam tikro puslapio elemento ekrano kopija

Pavyzdys: Štai pavyzdys, kaip užfiksuoti „Guru 99“ logotipo ekrano kopiją http://demo.guru99.com/test/guru99home/ puslapyje ir išsaugoti faile „ElementScreenshot.jpg.webp“. Štai kodas:

paketas „Guru99“;importuoti java.io.File;importuoti java.io.IOException;importuoti javax.imageio.ImageIO;importuoti org.openqa.selenium.By;importuoti org.openqa.selenium.WebElement;importuoti org.openqa.selenium.WebDriver;importuoti org.openqa.selenium.chrome.ChromeDriver;importuoti ru.yandex.qatools.ashot.AShot;importuoti ru.yandex.qatools.ashot.Screenshot;importuoti ru.yandex.qatools.ashot.shooting.ShootingStrategies;viešosios klasės „TestElementScreenshotUsingAshot“ {public static void main (String [] args) meta IOException {System.setProperty ("webdriver.chrome.driver", "c: \\ chromedriver.exe");„WebDriver“ tvarkyklė = nauja „ChromeDriver“ ();driver.get ("http://demo.guru99.com/test/guru99home/");vairuotojas.tvarkyti (). langas (). padidinti ();// Raskite elementą, kad padarytumėte ekrano kopiją„WebElement“ elementas = driver.findElement (By.xpath ("// * [@ id = \" site-name \ "] / a [1] / img"));// Kartu su vairuotojo leidimo elementu taip pat „takeScreenshot“ () metodu.Screenshot = new AShot (). ShootingStrategy (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (tvarkyklė, elementas);ImageIO.write (screenshot.getImage (), "jpg.webp", naujas failas ("c: \\ ElementScreenshot.jpg.webp");}}

Vaizdų palyginimas naudojant „AShot“

paketas „Guru99“;importuoti java.awt.image.BufferedImage;importuoti java.io.File;importuoti java.io.IOException;importuoti javax.imageio.ImageIO;importuoti org.openqa.selenium.By;importuoti org.openqa.selenium.WebDriver;importuoti org.openqa.selenium.WebElement;importuoti org.openqa.selenium.chrome.ChromeDriver;importuoti ru.yandex.qatools.ashot.AShot;importuoti ru.yandex.qatools.ashot.Screenshot;importuoti ru.yandex.qatools.ashot.comparison.ImageDiff;importuoti ru.yandex.qatools.ashot.comparison.ImageDiffer;viešoji klasė TestImageComaprison {public static void main (String [] args) meta IOException {System.setProperty ("webdriver.chrome.driver", "C: \\ chromedriver.exe");„WebDriver“ tvarkyklė = nauja „ChromeDriver“ ();driver.get ("http://demo.guru99.com/test/guru99home/");// Raskite elementą ir padarykite ekrano kopiją„WebElement“ logotipas = driver.findElement (By.xpath ("// * [@ id = \" site-name \ "] / a [1] / img"));Screenshot logoElementScreenshot = new AShot (). TakeScreenshot (tvarkyklė, logoElemnent);// perskaitykite vaizdą, kad galėtumėte palygintiBufferedImage expectedImage = ImageIO.read (naujas failas ("C: \\ Guru99logo.png.webp"));BufferedImage actualImage = logoElementScreenshot.getImage ();// Sukurkite „ImageDiffer“ objektą ir iškvietimo metodą makeDiff ()ImageDiffer imgDiff = naujas ImageDiffer ();„ImageDiff diff = imgDiff.makeDiff“ (tikrasis vaizdas, numatomas vaizdas);jei (dif.hasDiff () == tiesa) {System.out.println ("Vaizdai yra vienodi");} Kitas {System.out.println ("Vaizdai skiriasi");}vairuotojas.mesti ();}}

Santrauka

  • „Ashot“ API yra nemokama „Yandex“ programa.
  • Tai yra naudinga norint atlikti ekrano kopiją „Selenium“.
  • Tai padeda jums nufotografuoti atskirą „WebElement“ skirtingose ​​platformose, pvz., Darbalaukio naršyklėse, „iOS Simulator Mobile Safari“, „Android Emulator Browser“.
  • Tai gali padaryti didesnio nei ekrano dydžio puslapio ekrano kopiją.
  • Ši funkcija buvo pašalinta iš seleno 3 versijos, todėl „Ashot“ API yra geras pasirinkimas.
  • Tai gali papuošti ekrano kopijas.
  • Tai pateikia ekrano kopiją.

Tai tapo įmanoma dėl Shradhdha Dave'o indėlio