how take screenshot selenium
In diesem Tutorial wird die Bedeutung von Selenium Screenshot und die Verwendung von Ashot zum Aufnehmen von Screenshots in Selenium-Anwendungen anhand von Beispielen erläutert:
Screenshots werden grundsätzlich in der Fehleranalyse verwendet. Sie helfen zu verstehen, ob die Anwendung gemäß den Benutzeranforderungen funktioniert oder nicht.
Für jeden Testfall kann die empfangene Ausgabe unterschiedlich sein, manchmal wird die richtige Ausgabe empfangen, manchmal wird ein Fehler angezeigt, manchmal wird eine Fehlermeldung aufgrund fehlender oder unzureichender Eingabedaten empfangen usw. Der Screenshot hilft bei der Verfolgung der Beweise für Aktionen / Ausgaben empfangen.
=> Überprüfen Sie ALLE Selen-Tutorials hier
In diesem Tutorial erfahren Sie, wo Selenium-Screenshots benötigt werden. Wir werden Ashot diskutieren und wie wir Ashot in Selenium verwenden können (Installation und Konfiguration von ashot ()), lernen, Screenshots in Selenium aufzunehmen (für die gesamte Webseite, für ein einzelnes Element auf der Seite und für ein aktuell geöffnetes Fenster, auch vergleichen 2 Bilder) und schauen Sie sich dann einige Beispiele an, in denen häufig Screenshots aufgenommen werden.
Was du lernen wirst:
Grundlegendes zu Selen-Screenshots
Das obige Bild ist ein Beispiel für einen Screenshot, der beim Ausführen von Code von der Google Mail-Website aufgenommen wurde. Das Bild hilft bei der Bestätigung, dass sich der Benutzer erfolgreich mit dem richtigen Benutzernamen und Passwort beim E-Mail-Konto angemeldet hat.
Screenshots sind daher sehr hilfreich bei der Erfassung der Aktionen / Ausgaben, die nach der Ausführung einer Aktion empfangen werden, und helfen somit bei der Bestätigung, dass eine Aktion ohne Probleme ausgeführt wird.
Selen kann automatisch Screenshots machen. Wir müssen nur Code für Screenshots hinzufügen, wenn Code ausgeführt wird, für den Screenshots benötigt werden.
Wo werden Selen-Screenshots benötigt?
Folgende wären die Möglichkeiten:
- Wenn es Probleme gibt, ein Element auf einer Webseite zu finden.
- Wo es eine Zeitüberschreitung beim Suchen von Webelementen auf einer Seite gibt.
- Wenn ein Fehler oder ein Problem im System / in der Anwendung auftritt.
- Wenn ein Assertionsfehler auftritt.
Was ist Ashot?
Ashot () ist ein Dienstprogramm eines Drittanbieters, das vom Selenium-Webtreiber zum Erfassen der Screenshots unterstützt wird.
Ashot () bietet die folgenden Funktionen zum Erfassen von Screenshots:
- Erfassen der gesamten Seite
- Erfassen des Webelements
- Bilder vergleichen
Lassen Sie uns im nächsten Abschnitt sehen, wie genau dies funktioniert.
Eigenschaften von Ashot:
- Es ist möglich, einen Screenshot der gesamten Seite zu erstellen.
- Es ist auch möglich, einen Screenshot eines Webelements zu erstellen, das auf verschiedenen Plattformen wie dem Android Emulator Browser, iOS Simulator Mobile Safari und den verschiedenen Desktop-Browsern unterstützt wird.
- Bietet einen flexiblen Screenshot-Vergleich.
- Dekoriert Screenshots.
Ashot kann Screenshots in drei Schritten erstellen:
- Nimmt einen Screenshot der gesamten Seite auf.
- Finden Sie die Größe und Position des Elements.
- Beschneidet den Original-Screenshot.
Wie können wir Ashot in Selen verwenden?
Führen Sie die folgenden Schritte aus, um Ashot auf Ihren Computer herunterzuladen und zu konfigurieren:
- Gehe zum Verknüpfung.
- Finden Sie die neueste Version der für Ashot vorhandenen JAR-Datei.
- Laden Sie die JAR-Datei herunter und speichern Sie sie unter einem bestimmten Pfad auf Ihrem Computer.
- Nun zum Hinzufügen der JAR-Datei zu Ihrem Projekt in Eclipse - Gehen Sie zu Ihrem Projekt -> Klicken Sie mit der rechten Maustaste -> Gehen Sie zu Eigenschaften -> Wählen Sie Pfad erstellen -> Bibliotheken -> Fügen Sie externe Jars hinzu
- Durchsuchen Sie den Pfad, in dem die heruntergeladene JAR-Datei gespeichert ist.
- Wählen Sie die JAR-Datei aus, klicken Sie auf Übernehmen und schließen Sie.
So erfassen Sie Screenshots in Selen
Selen bietet integrierte Funktionen zum Aufnehmen von Screenshots. Gemäß der Anforderung, TakesScreenshot Die Schnittstelle wird verwendet, um Screenshots zu machen, während die Selenium-Skripte ausgeführt werden. Somit hilft Selenium Webdriver beim Erfassen von Screenshots, während Code ausgeführt wird.
Im folgenden Abschnitt erfahren Sie mehr über die verschiedenen Screenshot-Typen, die erfasst werden.
Es folgen die Typen:
Aufnahme eines Screenshots von:
- Aktuelles geöffnetes Fenster
- Die gesamte Webseite
- Nur ein bestimmtes Webelement
- Vergleich des Screenshot-Bildes mit dem Originalbild
Lassen Sie uns die obigen Punkte im Detail verstehen.
# 1) Aktuelles offenes Fenster
Schauen wir uns die Implementierung von Code für die Verarbeitung von Screenshots in Selen für das derzeit geöffnete Fenster an:
package SeleniumPrograms; import java.io.File; import java.io.IOException; import java.util.concurrent.TimeUnit; 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; @Test public class Screenshot { public static void main(String() args) throws IOException { // TODO Auto-generated method stub WebDriver drv = new FirefoxDriver(); drv.manage().window().maximize(); //always write wait code after this drv.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);//for page load drv.get('https://opensource-demo.orangehrmlive.com/'); //Testing webpage drv.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); //for Implicit wait //Capturing the screenshot File f = ((TakesScreenshot) drv).getScreenshotAs(OutputType.FILE); FileUtils.copyFile(f, new File('C:/Users/Chait/Desktop/Screenshots/screenshot01.png')); //screenshot copied from buffer is saved at the mentioned path. System.out.println('The Screenshot is captured.'); } }
Das folgende Bild ist die Ausgabe der obigen Code-Implementierung. Hier ist die OrangeHRM-Site geöffnet und der Screenshot der Anmeldeseite wird aufgenommen.
(Bild Quelle ))
So können wir Screenshots aufnehmen, wo immer dies erforderlich ist, während Code ausgeführt wird. Der aufgenommene Screenshot wird in einer Datei mit der Erweiterung .png oder .jpeg gespeichert. Wir müssen den Pfad angeben, in dem die Bilddatei gespeichert werden soll.
# 2) Die gesamte Webseite
Schauen wir uns den folgenden Implementierungscode an, um mithilfe von Ashot in Selenium Webdriver einen Screenshot der gesamten Seite zu erstellen. Betrachten wir dazu das Beispiel einer Seite (Jmeter-benutzerdefinierte Variablen) aus - softwaretestinghelp.com .
package SeleniumPrograms; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.concurrent.TimeUnit; import javax.imageio.ImageIO; import org.apache.commons.io.FileUtils; import org.openqa.selenium.By; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.OutputType; import org.openqa.selenium.TakesScreenshot; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import ru.yandex.qatools.ashot.AShot; import ru.yandex.qatools.ashot.Screenshot; import ru.yandex.qatools.ashot.shooting.ShootingStrategies; public class Screenshot_EntirePage { public static void main(String() args) throws InterruptedException, IOException { WebDriver drv = new FirefoxDriver(); drv.manage().window().maximize(); //always write wait code after this drv.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS); //for page load drv.get('https://www.softwaretestinghelp.com/'); //Testing webpage drv.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); //for Implicit wait WebElement auto = drv.findElement(By.xpath('//ul(@id='mega-menu-primary')/li(6)')); auto.click(); //click Automation tab WebElement jmeter = drv.findElement(By.linkText('JMeter')); //link to JMeter page jmeter.click(); //scroll down to open a link among various links, in the Video Tutorials section of the page JavascriptExecutor js = (JavascriptExecutor) drv; js.executeScript('window.scrollBy(0,1700)'); //scrolling downwards Thread.sleep(1500); WebElement udv = drv.findElement(By.linkText('User-Defined Variables')); udv.click(); //opening User-Defined Variables link Thread.sleep(1500); //Capturing the Screenshot with the help of ashot() Screenshot screenshot=new AShot().takeScreenshot(drv); ImageIO.write(screenshot.getImage(),'PNG',new File('C:\Users\Chait\Desktop\Screenshots\entirepage.png')); //The screenshot to be captured will be in .png image format and would be saved at above mentioned path. System.out.println('Screenshot for full page is captured successfully!'); } }
Hier das jmeter-benutzerdefinierte-Variablen Seite unserer Website: www.softwaretestinghelp.com wird geöffnet und dann haben wir einen Screenshot dieser kompletten Webseite (mit Hilfe von ashot () in Selen) im PNG-Format aufgenommen und unter dem gewünschten Pfad gespeichert. Auf die gleiche Weise können wir einen Screenshot der gesamten Seite für jede Webseite aufnehmen.
Wenn Sie also den obigen Code zum Erfassen des Screenshots der gesamten Seite implementieren, wird die empfangene Ausgabe wie im folgenden Bild gezeigt, um einen vollständigen Screenshot der Webseite zu erhalten.
# 3) Ein Webelement
Schauen wir uns den folgenden Implementierungscode mit der Verwendung von Ashot in Selenium Webdriver an, um einen Screenshot eines bestimmten Webelements auf der Webseite zu erfassen.
package SeleniumPrograms; import java.io.File; import java.io.IOException; import java.util.concurrent.TimeUnit; import javax.imageio.ImageIO; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.annotations.Test; import ru.yandex.qatools.ashot.AShot; import ru.yandex.qatools.ashot.Screenshot; import ru.yandex.qatools.ashot.shooting.ShootingStrategies; @Test public class Screenshot_WebEle_Ashot { public static void main(String() args) throws IOException { // TODO Auto-generated method stub WebDriver drv = new FirefoxDriver(); drv.manage().window().maximize(); //always write wait code after this drv.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS); //for page load drv.get('https://opensource-demo.orangehrmlive.com/'); //Testing webpage drv.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); //for Implicit wait WebElement uname = drv.findElement(By.id('txtUsername')); //Username....ID.... uname.sendKeys('Admin'); WebElement pword = drv.findElement(By.id('txtPassword')); //Password....ID.... pword.sendKeys('admin123'); WebElement login_b = drv.findElement(By.xpath('//input(@id='btnLogin')')); login_b.click(); //Login button....XPATH.... WebElement ele = drv.findElement(By.linkText('Maintenance')); ele.click(); //opening link for element for which we want screenshot // pass driver as well as the element in takeScreenshot() method. Screenshot Screenshot_webele = new AShot().shootingStrategy(ShootingStrategies.viewportPasting(100)).takeScreenshot(drv, ele); // For saving the screenshot in .png/.jpeg format at the desired location ImageIO.write(Screenshot_webele.getImage(),'png',new File('C:\Users\Chait\Desktop\Screenshots\element.jpeg')); System.out.println('Screenshot for specified element captured successfully!'); } }
Wenn Sie also den obigen Code zum Erfassen eines Screenshots eines bestimmten Elements implementieren (hier Registerkarte Wartung), Die empfangene Ausgabe entspricht der Abbildung unten.
Orakel SQL-Fragen Interview Fragen und Antworten für erfahrene
Hier wählen wir die Registerkarte „Wartung“ als Element, für das ein Screenshot erforderlich ist. Erwähnen Sie den Pfad, in dem der Screenshot gespeichert werden soll. Auf die gleiche Weise können wir einen Screenshot für jedes andere Element auch auf einer solchen Website aufnehmen.
# 4) Screenshot mit Originalbild vergleichen
Lassen Sie uns einen Blick auf den folgenden Implementierungscode mit der Verwendung von Ashot in Selenium Webdriver werfen, um einen Screenshot eines Logoelements auf der Webseite zu erfassen und mit dem Originallogo zu vergleichen.
Betrachten wir dazu das Beispiel von naukri.com ::
package SeleniumPrograms; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.concurrent.TimeUnit; 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 org.openqa.selenium.firefox.FirefoxDriver; 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 Screen_Compare { public static void main(String() args) throws IOException { // TODO Auto-generated method stub WebDriver drv = new FirefoxDriver(); drv.manage().window().maximize(); //always write wait code after this drv.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS); //for page load drv.get('https://www.naukri.com/nlogin/login'); //Testing webpage drv.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); //for Implicit wait // Finding the logo element and capturing its screenshot WebElement logo = drv.findElement(By.xpath('//a(@class='nLogo fl')/img')); Screenshot logoSrcshot = new AShot().takeScreenshot(drv, logo); // Reading the image for comparision BufferedImage expectedImage = ImageIO.read(new File('C:\Users\Chait\Desktop\naukri_Logo.png')); BufferedImage actualImage = logoSrcshot.getImage(); ImageDiffer img_differnece = new ImageDiffer(); // Creating ImageDiffer object and calling the method makeDiff() ImageDiff differnece = img_differnece.makeDiff(actualImage, expectedImage); if (differnece.hasDiff() == true) //Checking the difference using in-built functions) { System.out.println('Both logo images matched') //in case when no difference found } else { System.out.println('The logo images are different'); //in case when difference found } } }
Bei der Implementierung des obigen Codes zum Vergleich des Screenshots eines Logoelements (hier naukri.com-Logo) ist die empfangene Ausgabe wie im folgenden Bild gezeigt.
Hier wählen wir das Logo von „naukri.com“, erfassen den Screenshot und vergleichen es mit dem Originallogo. Der Unterschied zwischen Bildern wird mithilfe integrierter Funktionen ermittelt. Wenn in den beiden Logo-Bildern kein Unterschied festgestellt wird, druckt das Programm die Ausgabe als „ Beide Logo-Bilder stimmten überein 'Sonst druckt' Die Logo-Bilder sind unterschiedlich ”.
Beispiele, bei denen Screenshots häufig aufgenommen werden
# 1) Abmeldebestätigung
Um sich auf einer Website anzumelden, müssen wir den richtigen Benutzernamen und das richtige Passwort eingeben. Danach werden wir auf der Website angemeldet. Dann führt der Benutzer die erforderlichen Optionen aus und sobald die Arbeit erledigt ist, wird der Benutzer abgemeldet.
Wenn wir also nach dem Abmelden einen Code für den Screenshot bereitstellen, wird erneut eine Anmeldeseite angezeigt, die die Abmeldeaktion bestätigt. Bitte sehen Sie das folgende Bild für weitere Details:
# 2) Bestätigung eines neu erstellten Datensatzes
Durch Hinzufügen von Code für den Screenshot nach dem Erstellen eines neuen Datensatzes wird bestätigt, dass der Datensatz erfolgreich erstellt wurde. Weitere Details finden Sie im folgenden Screenshot.
Falls der Datensatz nicht erstellt wird, wird der Code nicht weiter zum Erfassen des Screenshots fortgesetzt, und dies würde bestätigen, dass der Datensatz nicht erfolgreich erstellt wird.
# 3) Beispiel für fehlende / falsche Ausgabe
In diesem Beispiel wird ein neuer Datensatz für die Berufsbezeichnung auf der OrangeHRM-Website erstellt. Hier ist das Feld Jobtitel mit '*' gekennzeichnet, was bedeutet, dass es sich um ein Pflichtfeld handelt. Der Datensatz würde also erst erstellt, wenn die erforderlichen Felder ausgefüllt sind, und nur wir könnten den Datensatz speichern. Weitere Details finden Sie im folgenden Screenshot.
Fazit
In diesem Artikel haben wir also gesehen, wo Selenium-Screenshots benötigt werden, wie wir mit Screenshots in Selenium umgehen können, was Ashot ist, wie es heruntergeladen, konfiguriert und tatsächlich in Selenium verwendet werden kann. Wir haben die Implementierung von Code für den Umgang mit Screenshots verstanden und auch einige Beispiele gesehen, in denen häufig Screenshots aufgenommen werden.
=> Lesen Sie den vollständigen Selen-Leitfaden durch
Literatur-Empfehlungen
- 30+ beste Selen-Tutorials: Lernen Sie Selen anhand realer Beispiele
- Selenium Find Element By Text Tutorial mit Beispielen
- Einführung in Selenium WebDriver - Selenium Tutorial # 8
- ChromeDriver Selenium Tutorial: Selenium Webdriver-Tests auf Chrome
- Umgang mit iFrames mit der Selenium WebDriver-Methode switchTo ()
- So erstellen Sie ein Gradle-Projekt mit Selen
- Umgang mit Warnungen / Popups in Selenium WebDriver - Selenium Tutorial # 16
- Umgang mit der Bildlaufleiste in Selenium Webdriver