Selenium Webdriver'da ekran görüntüsü
Bir Selenyum Webdriver içinde Screenshot hata analizi için kullanılır. Selenium webdriver, yürütme sırasında otomatik olarak ekran görüntüsü alabilir. Ancak kullanıcıların kendi başlarına bir ekran görüntüsü almaları gerekiyorsa, WebDrive'a ekran görüntüsünü alıp Selenium'da depolamasını bildiren TakeScreenshot yöntemini kullanmaları gerekir.
Bu eğitimde öğreneceksiniz,
- Selenium WebDriver kullanarak ekran görüntüsü yakalayın
- Ashot API nedir?
- Ashot API nasıl indirilir ve yapılandırılır?
- AShot API ile Tam Sayfa Ekran Görüntüsü Yakalayın
- Sayfanın belirli bir öğesinin ekran görüntüsünü almak
- AShot kullanarak Görüntü Karşılaştırma
Selenium WebDriver kullanarak ekran görüntüsü yakalayın
Selenium'da Ekran Görüntüsü Alma 3 Adımlı bir işlemdir
Adım 1) Web sürücüsü nesnesini TakeScreenshot'a dönüştürün
AlırScreenshot scrShot = ((AlırScreenshot) webdriver);
Adım 2) Görüntü dosyası oluşturmak için getScreenshotAs yöntemini çağırın
Dosya SrcFile = scrShot.getScreenshotAs (OutputType.FILE);
Adım 3) Dosyayı İstenilen Konuma kopyalayın
Örnek: Bu örnekte, http://demo.guru99.com/V4/ ekran görüntüsünü alacağız ve C: /Test.png.webp olarak kaydedeceğiz.
paket Guru99TakeScreenshot;java.io.File içe aktarma;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 {@Ölçekpublic void testGuru99TakeScreenShot () Exception {WebDriver sürücüsü;System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");sürücü = yeni FirefoxDriver ();// url'ye gitdriver.get ("http://demo.guru99.com/V4/");// Ekran görüntüsü alma işlevini çağırınthis.takeSnapShot (sürücü, "c: //test.png.webp");}/ *** Bu işlev ekran görüntüsü alacak* @param webdriver* @param fileWithPath* @throws Exception* /public static void takeSnapShot (WebDriver webdriver, String fileWithPath) {// Web sürücüsü nesnesini TakeScreenshot'a dönüştürAlırScreenshot scrShot = ((AlırScreenshot) webdriver);// Görüntü dosyası oluşturmak için getScreenshotAs yöntemini çağırınDosya SrcFile = scrShot.getScreenshotAs (OutputType.FILE);// Görüntü dosyasını yeni hedefe taşıDosya DestFile = yeni Dosya (fileWithPath);// Dosyayı hedefe kopyalaFileUtils.copyFile (SrcFile, DestFile);}}
NOT: Selenium sürüm 3.9.0 ve üzeri, Apache Commons IO JAR sağlamaz. Bunları buradan indirebilir ve projenizde arayabilirsiniz.
Ashot API nedir?
Ashot, Ekran görüntülerini yakalamak için Yandex tarafından Selenium WebDriver tarafından desteklenen üçüncü taraf bir yardımcı programdır. Tek bir WebElement'in ekran görüntüsünün yanı sıra, ekran boyutundan daha önemli olan bir sayfanın tam sayfa ekran görüntüsünü alır.
Ashot API nasıl indirilir ve yapılandırılır?
Ashot API'yi yapılandırmanın iki yöntemi vardır
- 1. Maven'i Kullanmak
- 2. Herhangi bir alet kullanmadan manuel olarak
Maven aracılığıyla yapılandırmak için:
- Https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot adresine gidin.
- Şimdilik en son sürüme tıklayın. 1.5.4
- Bağımlılık kodunu kopyalayın ve pom.xml dosyanıza ekleyin
- Dosyayı kaydedin ve Maven kavanozu derleme yolunuza ekleyecektir.
- Ve şimdi hazırsın !!!
Herhangi bir bağımlılık aracı olmadan manuel olarak yapılandırmak için
- Https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot adresine gidin.
- Şimdilik en son sürüme tıklayın. 1.5.4
- Kavanoza tıklayın, indirin ve makinenize kaydedin
- Jar dosyasını derleme yolunuza ekleyin:
- Eclipse'de, projeye sağ tıklayın -> özelliklere gidin -> Yol Oluştur -> Kitaplıklar -> Harici kavanoz ekle
- Jar dosyasını seçin
- Uygula ve Kapat
AShot API ile Tam Sayfa Ekran Görüntüsü Yakalayın
Adım 1) Bir Ashot nesnesi oluşturun ve sadece ekran boyutu sayfası için ekran görüntüsünü istiyorsanız takeScreenshot () yöntemini çağırın.
Ekran görüntüsü ekran görüntüsü = yeni Ashot (). TakeScreenshot (sürücü);
Ancak sayfanın ekran boyutundan daha büyük bir ekran görüntüsünü istiyorsanız, politikayı ayarlamak için takeScreenshot () yöntemini çağırmadan önce çekimStrategy () yöntemini çağırın. Ardından web sürücüsünü geçiren bir takeScreenshot () yöntemi çağırın, örneğin,
Ekran görüntüsü ekran görüntüsü = yeni AShot (). ÇekimStratejisi (ShootingStrategies.viewportPasting (1000)). TakeScreenshot (sürücü);
Burada 1000 milisaniye cinsinden kaydırılır, bu nedenle ekran görüntüsü almak için program her 1000 milisaniye için kayar.
Adım 2): Şimdi, görüntüyü ekran görüntüsünden alın ve dosyaya yazın. Dosya türünü jpg.webp, png vb. Olarak sağlayabilirsiniz.
ImageIO.write (screenshot.getImage (), "jpg.webp", yeni Dosya (". \\ screenshot \\ fullimage.jpg.webp"));
Ekran boyutundan daha büyük bir sayfanın tam sayfa ekran görüntüsünü almak.
Örnek: Burada, http://demo.guru99.com/test/guru99home/ tam sayfa ekran görüntüsü alma ve "screenshot.jpg.webp" dosyasına kaydetme örneği verilmiştir.
Ashot API'nin ShootingStrategy sınıfının kullanılması nedeniyle, ekran boyutundan daha büyük bir sayfanın tam görüntüsünü yakalayabileceğiz. İşte program:
paket Guru99;java.io.File içe aktarma;java.io.IOException'ı içe aktarın;javax.imageio.ImageIO dosyasını içe aktarın;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 [] değiştirgeler) IOException {atarSystem.setProperty ("webdriver.chrome.driver", "c: \\ chromedriver.exe");WebDriver sürücüsü = yeni ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maximize ();Screenshot = yeni AShot (). ÇekimStratejisi (ShootingStrategies.viewportPasting (1000)) takeScreenshot (sürücü);ImageIO.write (screenshot.getImage (), "jpg.webp", yeni Dosya ("c: \\ ElementScreenshot.jpg.webp"));}}
Sayfanın belirli bir öğesinin ekran görüntüsünü almak
Örnek: Burada, http://demo.guru99.com/test/guru99home/ sayfasında Guru 99 logosunun öğe ekran görüntüsünü yakalama ve "ElementScreenshot.jpg.webp" dosyasına kaydetme örneği. İşte kod:
paket Guru99;java.io.File içe aktarma;java.io.IOException'ı içe aktarın;javax.imageio.ImageIO dosyasını içe aktarın;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 [] değiştirgeler) IOException {atarSystem.setProperty ("webdriver.chrome.driver", "c: \\ chromedriver.exe");WebDriver sürücüsü = yeni ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). maximize ();// Ekran görüntüsü alacak öğeyi bulunWebElement öğesi = sürücü.findElement (By.xpath ("// * [@ id = \" site-adı \ "] / a [1] / img"));// Sürücü geçiş öğesiyle birlikte takeScreenshot () yönteminde de.Screenshot = new AShot (). ÇekimStratejisi (ShootingStrategies.viewportPasting (1000)) takeScreenshot (sürücü, eleman);ImageIO.write (screenshot.getImage (), "jpg.webp", yeni Dosya ("c: \\ ElementScreenshot.jpg.webp"));}}
AShot kullanarak Görüntü Karşılaştırma
paket Guru99;import java.awt.image.BufferedImage;java.io.File içe aktarma;java.io.IOException'ı içe aktarın;javax.imageio.ImageIO dosyasını içe aktarın;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 [] değiştirgeler) IOException {atarSystem.setProperty ("webdriver.chrome.driver", "C: \\ chromedriver.exe");WebDriver sürücüsü = yeni ChromeDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");// Öğeyi bulun ve ekran görüntüsü alınWebElement logoElement = driver.findElement (By.xpath ("// * [@ id = \" site-adı \ "] / a [1] / img"));Ekran görüntüsü logoElementScreenshot = new AShot (). TakeScreenshot (sürücü, logoElemnent);// karşılaştırmak için görseli okuyunBufferedImage beklenenImage = ImageIO.read (yeni Dosya ("C: \\ Guru99logo.png.webp"));BufferedImage actualImage = logoElementScreenshot.getImage ();// ImageDiffer nesnesi oluşturun ve makeDiff () yöntemini çağırınImageDiffer imgDiff = new ImageDiffer ();ImageDiff diff = imgDiff.makeDiff (realImage, beklenenImage);eğer (diff.hasDiff () == true) {System.out.println ("Görüntüler aynıdır");} Başka {System.out.println ("Görüntüler farklıdır");}driver.quit ();}}
Özet
- Ashot API, Yandex'den ücretsiz bir yazılımdır.
- Selenium'da ekran görüntüsü almak için bir yardımcı programdır.
- Masaüstü tarayıcılar, iOS Simulator Mobile Safari, Android Emulator Browser gibi farklı platformlarda tek bir WebElement'in ekran görüntüsünü almanıza yardımcı olur.
- Ekran boyutundan daha büyük bir sayfanın ekran görüntüsünü alabilir.
- Bu özellik selenyum sürüm 3'te kaldırılmıştır, bu nedenle Ashot API iyi bir seçenektir.
- Ekran görüntülerini süsleyebilir.
- Ekran görüntüsü karşılaştırması sağlar.
Shradhdha Dave'in katkılarıyla mümkün oldu