Τρόπος λήψης στιγμιότυπου οθόνης Selenium Πρόγραμμα οδήγησης Web

Στιγμιότυπο οθόνης μέσα Selenium

A Στιγμιότυπο οθόνης μέσα Selenium Πρόγραμμα οδήγησης Web χρησιμοποιείται για ανάλυση σφαλμάτων. Selenium Το webdriver μπορεί να τραβήξει αυτόματα στιγμιότυπα οθόνης κατά την εκτέλεση. Αλλά εάν οι χρήστες πρέπει να τραβήξουν ένα στιγμιότυπο οθόνης μόνοι τους, πρέπει να χρησιμοποιήσουν τη μέθοδο TakeScreenshot που ειδοποιεί το WebDrive να τραβήξει το στιγμιότυπο οθόνης και να το αποθηκεύσει σε Selenium.

Στιγμιότυπο οθόνης In Selenium

Τρόπος λήψης στιγμιότυπου οθόνης Selenium

Ακολουθεί μια διαδικασία βήμα προς βήμα σχετικά με τον τρόπο λήψης στιγμιότυπου οθόνης στο selenium WebDriver

Βήμα 1) Μετατροπή αντικειμένου προγράμματος οδήγησης web σε TakeScreenshot

TakesScreenshot scrShot =((TakesScreenshot)webdriver);

Βήμα 2) Καλέστε τη μέθοδο getScreenshotAs για να δημιουργήσετε αρχείο εικόνας

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

Βήμα 3) Αντιγράψτε το αρχείο στην επιθυμητή τοποθεσία

Παράδειγμα: Σε αυτό το παράδειγμα θα κάνουμε λήψη οθόνης https://demo.guru99.com/V4/ & αποθηκεύστε το ως C:/Test.png

Εδώ είναι ο κώδικας στιγμιότυπου οθόνης σε σελήνιο:

package 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;

public class Guru99TakeScreenshot {

    @Test

    public void testGuru99TakeScreenShot() throws Exception{

		WebDriver driver ;
    	System.setProperty("webdriver.gecko.driver","C:\\geckodriver.exe");
    	driver = new FirefoxDriver();

        //goto url

        driver.get("https://demo.guru99.com/V4/");

        //Call take screenshot function

        this.takeSnapShot(driver, "c://test.png") ;     

    }

    /**

     * This function will take screenshot

     * @param webdriver

     * @param fileWithPath

     * @throws Exception

     */

    public static void takeSnapShot(WebDriver webdriver,String fileWithPath) throws Exception{

        //Convert web driver object to TakeScreenshot

        TakesScreenshot scrShot =((TakesScreenshot)webdriver);

        //Call getScreenshotAs method to create image file

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

            //Move image file to new destination

                File DestFile=new File(fileWithPath);

                //Copy file at destination

                FileUtils.copyFile(SrcFile, DestFile);

    }

}

ΣΗΜΕΊΩΣΗ: Selenium Η έκδοση 3.9.0 και νεότερη δεν παρέχει Apache Commons IO JAR. Μπορείτε απλά να τα κατεβάσετε εδώ και καλέστε τους στο έργο σας

Τι είναι το Ashot API;

Το Ashot είναι ένα βοηθητικό πρόγραμμα τρίτου μέρους από Yandex υποστηριζόμενο από Selenium WebDriver για λήψη των Στιγμιότυπων οθόνης. Λαμβάνει ένα στιγμιότυπο οθόνης ενός μεμονωμένου WebElement καθώς και ένα στιγμιότυπο οθόνης πλήρους σελίδας μιας σελίδας, το οποίο είναι πιο σημαντικό από το μέγεθος οθόνης.

Πώς να κατεβάσετε και να ρυθμίσετε τις παραμέτρους του Ashot API;

Υπάρχουν δύο μέθοδοι για τη διαμόρφωση του Ashot API

  1. Χρησιμοποιώντας το Maven
  2. Χειροκίνητα χωρίς χρήση εργαλείου

Για να ρυθμίσετε τις παραμέτρους μέσω του Maven:

  • Πηγαίνετε στο https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
  • Κάντε κλικ στην πιο πρόσφατη έκδοση, προς το παρόν. Είναι 1.5.4
  • Αντιγράψτε τον κωδικό Εξάρτησης και προσθέστε το στο αρχείο pom.xml

Ρύθμιση παραμέτρων μέσω του Maven

  • Αποθηκεύστε το αρχείο και ο Maven θα προσθέσει το βάζο στη διαδρομή κατασκευής σας
  • Και τώρα είσαι έτοιμος!!!

Για να ρυθμίσετε τις παραμέτρους με μη αυτόματο τρόπο χωρίς κανένα εργαλείο εξάρτησης

  1. Πηγαίνετε στο https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot
  2. Κάντε κλικ στην πιο πρόσφατη έκδοση, προς το παρόν. Είναι 1.5.4
  3. Κάντε κλικ στο βάζο, κατεβάστε το και αποθηκεύστε το στο μηχάνημά σας

Μη αυτόματη ρύθμιση παραμέτρων χωρίς εργαλείο εξάρτησης

  1. Προσθέστε το αρχείο jar στη διαδρομή κατασκευής σας:
  2. In Eclipse, κάντε δεξί κλικ στο έργο -> μεταβείτε στις ιδιότητες -> Δημιουργία διαδρομής -> Βιβλιοθήκες -> Προσθήκη εξωτερικών βάζων
  3. Επιλέξτε το αρχείο jar
  4. Εφαρμογή και Κλείσιμο

Λήψη στιγμιότυπου οθόνης πλήρους σελίδας με το ASHot API

Βήμα 1) Δημιουργήστε ένα αντικείμενο Ashot και καλέστε τη μέθοδο takeScreenshot() εάν θέλετε απλώς το στιγμιότυπο οθόνης για τη σελίδα μεγέθους οθόνης.

Screenshot screenshot = new Ashot().takeScreenshot(driver);

Αλλά αν θέλετε ένα στιγμιότυπο οθόνης της σελίδας μεγαλύτερο από το μέγεθος της οθόνης, καλέστε τη μέθοδο shootingStrategy() πριν καλέσετε τη μέθοδο takeScreenshot() για να ρυθμίσετε την πολιτική. Στη συνέχεια, καλέστε μια μέθοδο takeScreenshot() που περνάει το πρόγραμμα οδήγησης web, για παράδειγμα,

Screenshot screenshot = new AShot().shootingStrategy(ShootingStrategies.viewportPasting(1000)).takeScreenshot(driver);

Εδώ ο χρόνος κύλισης 1000 γίνεται σε χιλιοστά του δευτερολέπτου, επομένως για τη λήψη στιγμιότυπου οθόνης, το πρόγραμμα θα κάνει κύλιση για κάθε 1000 msec.

Βήμα 2): Τώρα, λάβετε την εικόνα από το στιγμιότυπο οθόνης και γράψτε την στο αρχείο. Μπορείτε να δώσετε τον τύπο αρχείου ως jpg, png κ.λπ.

ImageIO.write(screenshot.getImage(), "jpg", new File(".\\screenshot\\fullimage.jpg"));

Λήψη στιγμιότυπου οθόνης πλήρους σελίδας μιας σελίδας μεγαλύτερης από το μέγεθος οθόνης.

Παράδειγμα: Ακολουθεί το παράδειγμα λήψης στιγμιότυπου οθόνης πλήρους σελίδας https://demo.guru99.com/test/guru99home/ και αποθηκεύστε στο αρχείο "screenshot.jpg".

Λόγω της χρήσης της κλάσης ShootingStrategy του Ashot API, θα είμαστε σε θέση να τραβήξουμε μια πλήρη εικόνα μιας σελίδας μεγαλύτερης από το μέγεθος της οθόνης.

Εδώ είναι ο κώδικας στιγμιότυπου οθόνης στο πρόγραμμα σελήνιο:

package 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.Screenshot;
import ru.yandex.qatools.ashot.shooting.ShootingStrategies;

public class TestScreenshotUsingAshot {

public static void main(String[] args) throws IOException {
	
System.setProperty("webdriver.chrome.driver", "c:\\chromedriver.exe");
WebDriver driver  = new ChromeDriver();	

driver.get("https://demo.guru99.com/test/guru99home/");
driver.manage().window().maximize();
		
Screenshot = new AShot().shootingStrategy(ShootingStrategies.viewportPasting(1000)).takeScreenshot(driver);

ImageIO.write(screenshot.getImage(), "jpg", new File("c:\\ElementScreenshot.jpg"));
	
	}

}

Λήψη στιγμιότυπου οθόνης ενός συγκεκριμένου στοιχείου της σελίδας

Παράδειγμα: Ακολουθεί το παράδειγμα λήψης στιγμιότυπου οθόνης στοιχείου του λογότυπου Guru 99 https://demo.guru99.com/test/guru99home/ σελίδα και αποθηκεύστε στο αρχείο "ElementScreenshot.jpg".

Εδώ είναι ο κώδικας στιγμιότυπου οθόνης σε σελήνιο:

package 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.Screenshot;
import ru.yandex.qatools.ashot.shooting.ShootingStrategies;
public class TestElementScreenshotUsingAshot {
public static void main(String[] args) throws IOException {
	
System.setProperty("webdriver.chrome.driver", "c:\\chromedriver.exe");
WebDriver driver  = new ChromeDriver();	

driver.get("https://demo.guru99.com/test/guru99home/");
driver.manage().window().maximize();
		
// Find the element to take a screenshot

WebElement element = driver.findElement(By.xpath ("//*[@id=\"site-name\"]/a[1]/img"));

// Along with driver pass element also in takeScreenshot() method.

Screenshot = new AShot().shootingStrategy(ShootingStrategies.viewportPasting(1000)).takeScreenshot(driver,element);

ImageIO.write(screenshot.getImage(), "jpg", new File("c:\\ElementScreenshot.jpg"));
	}
}

Σύγκριση εικόνων με χρήση του ASHot

package Guru99;

import 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.Screenshot;
import ru.yandex.qatools.ashot.comparison.ImageDiff;
import ru.yandex.qatools.ashot.comparison.ImageDiffer;

public class TestImageComaprison {

    public static void main(String[] args) throws IOException {

        System.setProperty("webdriver.chrome.driver", "C:\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.get("https://demo.guru99.com/test/guru99home/");

        // Find the element and take a screenshot

        WebElement logoElement = driver.findElement(By.xpath("//*[@id=\"site-name\"]/a[1]/img"));
        Screenshot logoElementScreenshot = new AShot().takeScreenshot(driver, logoElemnent);

        // read the image to compare

        BufferedImage expectedImage = ImageIO.read(new File("C:\\Guru99logo.png"));

        BufferedImage actualImage = logoElementScreenshot.getImage();

        // Create ImageDiffer object and call method makeDiff()

        ImageDiffer imgDiff = new ImageDiffer();
        ImageDiff diff = imgDiff.makeDiff(actualImage, expectedImage);

        if (diff.hasDiff() == true) {
            System.out.println("Images are same");

        } else {
            System.out.println("Images are different");
        }
        driver.quit();
    }
}

Σύνοψη

  • Το Ashot API είναι ένα δωρεάν λογισμικό από Yandex.
  • Είναι ένα βοηθητικό πρόγραμμα για τη λήψη στιγμιότυπου οθόνης Selenium.
  • Σας βοηθά να τραβήξετε ένα στιγμιότυπο οθόνης ενός μεμονωμένου WebElement σε διαφορετικές πλατφόρμες όπως προγράμματα περιήγησης για υπολογιστές, iOS Simulator Mobile Safari, Android Πρόγραμμα περιήγησης εξομοιωτή.
  • Μπορεί να τραβήξει ένα στιγμιότυπο οθόνης σελίδας μεγαλύτερης από το μέγεθος οθόνης.
  • Αυτή η δυνατότητα έχει αφαιρεθεί στην έκδοση σεληνίου 3, επομένως το Ashot API είναι μια καλή επιλογή.
  • Μπορεί να διακοσμήσει τα στιγμιότυπα οθόνης.
  • Παρέχει σύγκριση στιγμιότυπου οθόνης.