debugging selenium scripts with logs selenium tutorial 26
Jetzt nähern wir uns dem Ende unseres umfassendsten Kostenlose Tutorials für Selenium Testing Tool . Die Tutorials, die wir jetzt veröffentlichen, sind Teil des Selenium-Fortbildungstrainings.
Im vorherigen Tutorial haben wir uns weiterhin auf das Thema konzentriert Continuous Integration Tool namens Hudson . Es ist ein kostenloses Tool und bietet viel mehr Funktionen, um das Testprojekt zu erstellen, die Testklassen remote auszuführen und eine Benachrichtigungs-E-Mail an die Stakeholder zu senden, in der sie über den Anwendungsstatus in Bezug auf bestandene und fehlgeschlagene Testfälle informiert werden.
Im aktuellen Tutorial würden wir uns einigen fortgeschrittenen Konzepten zuwenden, die direkt oder indirekt helfen würden Optimierung des Automatisierungs-Frameworks und bringt den Benutzern mehr Sichtbarkeit.
c ++ sleep_for
Daher würden wir im aktuellen Tutorial das diskutieren Protokollierungsfunktion, ihre potenziellen Debugging-Funktionen und vieles mehr.
Manchmal wird die Protokollierung als Overhead für den vorhandenen Mechanismus zur Skripterstellung angesehen, aber Experten halten sie aufgrund der folgenden Vorteile für eine der besten Methoden, wenn sie im richtigen Verhältnis verwendet wird:
Vorteile der Anmeldung in Selenium-Skripten:
- Gewährleistet ein umfassendes Verständnis der Ausführung von Testsuiten
- Protokollnachrichten können zur Überprüfung nach der Ausführung in externen Dateien gespeichert werden
- Protokolle sind ein außergewöhnlicher Assistent beim Debuggen von Problemen und Fehlern bei der Programmausführung
- Protokolle können auch von den Stakeholdern überprüft werden, um den Zustand der Anwendung festzustellen
Was du lernen wirst:
Log4j - Eine Java-basierte Protokollierungs-API
Lassen Sie uns zu den technischen Details der Protokollierung übergehen und den Ursprung der API erörtern, die wir im gesamten Programm verwenden würden log4j Tutorial Protokolle erstellen. Log4j ist das Ergebnis gemeinsamer Bemühungen der Mitarbeiter von Secure Electronic Marketplace for Europe, ein Dienstprogramm zu entwickeln, mit dem wir Protokolle erstellen können. Daher wurde log4j im Jahr 1996 ins Rampenlicht gerückt. Log4j ist ein Open-Source-Tool und unter der IBM Public License lizenziert.
Die Implementierung von log4j besteht aus drei Hauptkomponenten. Diese Komponenten repräsentieren die Details zur Protokollebene, Formate der Protokollnachricht, in der sie gerendert werden sollen, und ihre Speichermechanismen.
Bestandteile von Log4j
- Logger
- Appenders
- Layouts
# 1) Logger
Die folgenden Schritte müssen ausgeführt werden, um Protokollierer im Projekt zu implementieren.
Schritt 1 : Erstellen einer Instanz der Logger-Klasse
Schritt 2 : Definieren der Protokollebene
Logger-Klasse - Es ist ein Java-basiertes Dienstprogramm, bei dem alle generischen Methoden bereits implementiert sind, sodass wir log4j verwenden können.
Protokollebenen - Protokollstufen werden im Volksmund als Druckmethoden bezeichnet. Diese werden zum Drucken der Protokollnachrichten verwendet. Es gibt hauptsächlich fünf Arten von Protokollebenen.
- Error()
- warnen()
- die Info()
- debuggen()
- Log()
Um Protokolle erstellen zu können, müssen wir lediglich eine der Druckmethoden über die Logger-Instanz aufrufen. Wir werden uns während der Implementierungsphase eingehender damit befassen.
# 2) Appender
Nachdem wir nun wissen, wie diese Protokolle erstellt werden, sollten wir uns als Nächstes überlegen, wo ich die Protokolle anzeigen kann. Die Antwort auf diese Frage liegt in der Definition von „Appendern“.
Anhänge werden konsistent verwendet, um die Datenquelle / das Medium anzugeben, auf dem die Protokolle erstellt werden sollen. Der Umfang der Datenquellen erstreckt sich über verschiedene externe Medien wie Konsole, GUI, Textdateien usw.
# 3) Layouts
Manchmal möchte der Benutzer, dass bestimmte Informationen jeder Protokollanweisung vorangestellt oder angehängt werden. Zum Beispiel möchte ich einen Zeitstempel zusammen mit meiner Protokollanweisung drucken. Somit können solche Anforderungen durch 'Layouts' erfüllt werden.
Layouts sind ein Dienstprogramm, mit dem der Benutzer das gewünschte Format auswählen kann, in dem die Protokolle gerendert werden sollen. Appender und Layout sind eng miteinander verbunden. Daher müssen wir jedem der Appender ein bestimmtes Layout zuordnen.
Beachten Sie, dass der Benutzer mehrere Appender definiert, wobei jede Karte ein eigenes Layout aufweist.
Nachdem wir uns mit den Grundlagen von log4j und seinen Komponenten vertraut gemacht haben, werden wir uns auf das Implementierungsphänomen konzentrieren.
Lassen Sie uns Schritt für Schritt den gesamten Implementierungsprozess verstehen.
Installation / Einrichtung
Für die Installation und Einrichtung würden wir das Projekt „Learning_Selenium“ in Betracht ziehen, das wir bereits in den früheren Sitzungen dieser Serie erstellt haben.
Schritt 1 : Der erste und wichtigste Schritt ist das Herunterladen der neuesten JAR für die log4j-API. Das Glas ist leicht auf der offiziellen Vertriebswebsite zu finden - “ http://logging.apache.org/log4j/1.2/download.html ”.
Schritt 2 : Der nächste Schritt besteht darin, den Erstellungspfad zu konfigurieren und log4j.jar als externe Bibliothek bereitzustellen.
Implementierung
Die Protokollierung mit log4j kann auf zwei Arten implementiert und konfiguriert werden:
- Programmatisch per Skript
- Manuell über Konfigurationsdateien
Sowohl die oben genannten Konfigurationsmethoden haben sowohl Vorteile als auch Nachteile. In diesem Lernprogramm sollten Sie log4j aufgrund seiner Einfachheit und Einfachheit manuell über Konfigurationsdateien konfigurieren. Die Konfigurationsdatei ist eine weitere XML-Datei zum Konfigurieren von Artefakten im Zusammenhang mit log4j.
Erstellung der Datei log4j.xml
Schritt 1 . Erstellen Sie eine log4j.xml-Datei. Kopieren Sie den folgenden Code und fügen Sie ihn in die Konfigurationsdatei ein.
Exemplarische Vorgehensweise für die Konfigurationsdatei
consoleAppender
Der Konsolen-Appender wird verwendet, um die Protokollanweisungen auf der Konsole zu drucken.
Datei-Appender
Der Datei-Appender wird verwendet, um die Protokollanweisungen in einer externen Datei zu drucken. Der Benutzer kann einen Ein- und Ausschaltwert für das angehängte Tag festlegen, der das System anweist, Anweisungen an das zuvor erstellte anzuhängen und zu protokollieren oder die zuvor erstellten Protokolle zu überschreiben und die neuen Protokolle insgesamt zu generieren.
'append' value= 'false' />
Der Wert des Dateiparameters wird auf einen bestimmten Speicherort festgelegt, um das System zu benachrichtigen, die erwartete Protokolldatei an diesem Speicherort zu erstellen. Wir geben auch den Namen der Protokolldatei im Parameter value an.
Layout
Wie in den ersten Abschnitten dieses Lernprogramms erläutert, werden die Layouts verwendet, um den Rendering-Mechanismus für Protokollanweisungen anzugeben. Log4j bietet verschiedene Layoutmuster. Der Benutzer kann das gewünschte Muster im Wert des ConversionPattern-Parameters angeben.
Die Ausgabe des obigen Layouts sollte ungefähr so aussehen:
01-07-2014 12:56:32 INFO (GmailLogin): Beispielprotokollnachricht
In der obigen Ausgabe:
- Erstes Feld - Ausführungsdatum
- Zweites Feld - Genaue Zeit in hh: mm: ss, zu der der Testschritt ausgeführt wurde
- Drittes Feld - Eine der Protokollebenen
- Viertes Feld - Name der Testklasse
- Das fünfte Feld - Protokollnachricht
Schritt 2 . Sobald wir mit der Erstellung der Datei log4j.XML fertig sind, besteht der nächste Schritt darin, die Datei log4j.XML in den Stammordner / das Basisverzeichnis des Projekts zu legen.
Implementierung auf Programmebene
Schritt 3 : Der nächste Schritt besteht darin, einen der Konfiguratoren zum Konfigurieren und Analysieren der Datei log4j.xml zu verwenden.
Syntax:
wie man eine gefälschte E-Mail-Adresse macht
package com.logExample; import org.apache.log4j.xml.DOMConfigurator; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.RunWith; import org.junit.runner.notification.Failure; import org.junit.runners.Suite; @RunWith(Suite.class) @Suite.SuiteClasses({ Demo.class }) public class TestSuite { /** * Setup method to set system property for log file name */ @BeforeClass public static void Setup() { // loading log4j.xml file DOMConfigurator.configure('log4j.xml'); } /** * @param args */ public static void main(String() args) { Result result = JUnitCore.runClasses(TestSuite.class); for (Failure failure : result.getFailures()) { System.out.println('
TEST NAME: ' + failure.getTestHeader()); System.out.println('
ERROR: ' + failure.getMessage() + '
'); System.out.println(failure.getTrace()); System.exit(1); } } }
Hinweis : Protokolle können auch auf Klassenebene anstelle von Testsuite implementiert werden. Sie müssen lediglich die erforderlichen Änderungen in der Testklasse und nicht in der Testsuite vornehmen.
Schritt 4 : Der nächste Schritt besteht darin, eine Testklasse 'GmailLogin.java' unter dem Projekt zu erstellen. Implementieren Sie die Google Mail-Anmeldefunktion innerhalb der Klasse.
Schritt 5 : Der nächste Schritt besteht darin, die Logger-Klasse zu importieren, um die Log-Anweisungen implementieren zu können.
Syntax:
import org.apache.log4j.Logger;
Schritt 6 : Der nächste Schritt im Prozess besteht darin, das Objekt der Logger-Klasse zu instanziieren.
Syntax:
// Objektinitialisierung für Protokoll
statisch Protokolle Log Logger.getLogger (Demo. Klasse .getName ());
Schritt 7 : Die oben erstellte Protokollvariable vom Typ Logger wird für die gesamte Testklasse verwendet, um die Protokollanweisungen zu generieren. Beziehen Sie sich auf den folgenden Code.
Syntax:
@Test public void testGmailLogin() throws Exception{ // enter a valid email address driver.findElement(By.id('Email')).sendKeys('TestSelenium1607@gmail.com'); log.info('Entered a valid Email Address.'); // enter a invalid password driver.findElement(By.id('Passwd')).sendKeys('InvalidPassword'); log.info('Entered a invalid Password.'); // click on sign in button driver.findElement(By.id('signIn')).click(); log.info('Clicked on the Sign In Button.'); try{ //Verify the home page assertTrue('Verification Failed: User successfully landed on the Home Page.', driver.getTitle().equals('Gmail')); log.info('Verified that the user landed on the Home Page.'); } catch (Exception e) { log.error('Unsuccessfull Login.'); } }
Ergebnis in der Protokolldatei
01-07-2014 12:56:11 INFO (GmailLogin): Die Datei wurde auf das System hochgeladen: FileExample.txt
01-07-2014 12:56:11 INFO (GmailLogin): Übermitteln der Änderungen
01-07-2014 12:56:15 FEHLER (GmailLogin): Anmeldung fehlgeschlagen.
UPDATE am März 2020
Protokolle
Ein Protokoll ist eine Nachricht, die wir für jede von uns durchgeführte Transaktion aufzeichnen oder generieren. Wir können die Protokolle analysieren, um zu überprüfen, was richtig oder falsch gelaufen ist. Angenommen, wenn ein System abrupt geschlossen wird, können wir durch Analysieren der Protokolle die Grundursache des Fehlers ermitteln.
Somit werden in jedem Entwicklungszyklus Protokolle erstellt. Auf die gleiche Weise können wir auch Protokolle in unserem Selenium-Code zum Testen vor und nach jeder Testbedingung oder Testanweisung generieren, um zu überprüfen, ob alle wie erwartet funktionieren.
log4j Framework
Um diese Protokolldateien in Selenium-Code zu generieren, verwenden wir das von Apache bereitgestellte log4j-Framework. Mit diesem Framework können wir unsere benutzerdefinierten Protokolle erstellen.
Klicken Hier um log4j jar aus dem Maven-Repository herunterzuladen.
Wir können Protokolle auf zwei Arten erstellen:
- Verwenden der Datei log4j.properties
- Verwenden der Datei log4j.xml
Diese Dateien enthalten die Konfiguration darüber, welche Art von Protokollen Sie generieren möchten. Sie können jeden von ihnen verwenden. Wenn Sie beide verwenden möchten, hat log4j.xml eine höhere Priorität. Die bevorzugte Methode zum Generieren von Protokollen ist die Verwendung der Eigenschaftendatei. Daher werden wir hier mehr über das Generieren nur über die Eigenschaftendatei erfahren.
Implementierung von log4j
Laden Sie die log4j-JAR-Datei vom obigen Pfad herunter und fügen Sie sie Ihrem Projekterstellungspfad hinzu. Erstellen Sie die Datei log4j.properties und fügen Sie die Eigenschaftendatei parallel zu Ihrem Quellordner hinzu, wenn Sie eine eigenständige Java-Anwendung verwenden.
Die Datei Log4j.properties ist eine Konfigurationsdatei, in der Werte im Schlüssel-Wert-Paar gespeichert werden.
Es enthält 3 Hauptkomponenten:
- Logger: Erfasst Protokollierungsinformationen.
- Appenders : Veröffentlichen Sie Protokollinformationen an einem anderen bevorzugten Ziel wie Konsolen, Dateien, Sockets, NT-Ereignisprotokollen usw.
- Layouts : Formatieren Sie Protokollinformationen in verschiedenen Stilen wie HTML, XML-Layout usw.
Syntax der Datei log4j.properties
# 1) Definieren Sie den Root-Logger mit der Protokollierungsstufe INFO und Appender X (Appender können beliebige Konsolen, Dateien, Sockets, NT-Ereignisprotokolle sein).
log4j.rootLogger = INFO, X
#zwei) Stellen Sie den Appender mit dem Namen X als File Appender ein.
log4j.appender.X = org.apache.log4j.FileAppender
#3) Definieren Sie das Layout für den X-Appender.
log4j.appender.X.layout = org.apache.log4j.PatternLayout log4j.appender.X.layout.conversionPattern = %m%n
log4j.properties Beispiel
Erstellen Sie eine log4j.properties-Datei unter Bezugnahme auf die obige Syntax:
# Initialisiere den Root Logger mit Level INFO und drucke ihn mit stdout und fout in der Konsole.
log4j.rootLogger=INFO,stdout,fout
# Fügen Sie dem Logger-Standard einen ConsoleAppender hinzu, um in die Konsole zu schreiben.
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
# Verwenden Sie ein einfaches Nachrichtenformat-Layoutmuster, das als% m% n definiert ist und Protokollnachrichten in einer neuen Zeile druckt.
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%m%n
# Fügen Sie dem Logger einen FileAppender hinzu.
log4j.appender.fout=org.apache.log4j.FileAppender
# Die Appender-DATEI ist als org.apache.log4j.FileAppender definiert. Es schreibt in eine Datei mit dem Namen SoftwareTestingHelp.
log4j.appender.fout.File=SoftwareTestingHelp.log
# Verwenden Sie ein detaillierteres Nachrichtenmuster.
log4j.appender.fout.layout=org.apache.log4j.PatternLayout log4j.appender.fout.layout.ConversionPattern=%p %d{ISO8601} %r %c (%t) %m%n
Unterschiedliche Protokollierungsstufen
- DEBUGGEN
- DIE INFO
- WARNEN
- ERROR
- TÖDLICH
Jedes Level hat seine eigene Priorität. Angenommen, wenn wir die Stufe 'DEBUG' verwenden, werden alle Meldungen der Stufe wie INFO >> WARN >> ERROR >> FATAL protokolliert.
Angenommen, wenn wir die Stufe 'ERROR' verwenden, wird DEBUG >> INFO >> WARN ignoriert und nur ERROR >> FATAL protokolliert.
In all diesen Ebenen müssen wir in unserer Eigenschaftendatei definieren. Die Protokolle werden abhängig von unserer Konfiguration generiert.
Implementieren der Protokolle für dasselbe oben genannte Beispiel:
Schritt 1: Erstellen Sie ein Objekt für die Logger-Klasse.
final static Logger logger = Logger.getLogger(Frame.class);
Die obige Methode hilft beim Abrufen des Logger-Objekts. Diese Methode verwendet entweder die Klasse oder den Namen der Klasse als Argument. Mit diesem Logger-Objekt können Sie benutzerdefinierte Protokolle erstellen.
In diesem Beispiel haben wir auf das Apache log4j-Framework verwiesen. Wenn Sie das TestNG-Framework verwenden, müssen Sie die TestNG-Protokollklasse verwenden.
Hier haben wir versucht, das Protokoll zu generieren, ohne die Eigenschaftendatei zu implementieren.
Was ist der beste Spyware-Entferner?
Weder in der Konsole noch in einer erstellten Protokolldatei werden Protokolle generiert. In der Konsole wird ein Fehler empfangen, da die Protokolldatei nicht ordnungsgemäß implementiert ist. Um es zu implementieren, müssen wir die PropertyConfigurator-Klasse verwenden. Befolgen Sie Schritt 2.
Schritt 2: Initialisieren Sie die Property Configurator-Datei und übergeben Sie das Argument als Namen der log4j-Eigenschaftendatei.
PropertyConfigurator.configure ('log4j.properties');
Vollständiger Code für die Generierung von Protokolldateien:
package com.wordpress.pages; import java.util.List; import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; import org.junit.Assert; import org.junit.Test; import org.openqa.selenium.Alert; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; public class Frame { static WebDriver driver; final static Logger logger = Logger.getLogger(Frame.class); @Test public void Test(){ PropertyConfigurator.configure('log4j.properties.txt'); System.setProperty('webdriver.chrome.driver', 'D:\New folder\exe\chromedriver.exe'); logger.debug('Debug this path for chrome path issue'); driver = new ChromeDriver(); logger.info('Chrome driver is up and running'); driver.get('http://www.dwuser.com/education/content/the-magical-iframe-tag-an-introduction/'); logger.warn('Url is not loaded properly'); //identifying the frame using locator or say using webelement driver.switchTo().frame(driver.findElement(By.xpath('//div(@id='eduFooterWrap')//iframe(1)'))); logger.error('Frame is not available'); driver.findElement(By.xpath('//input(@name='name')')).sendKeys('SoftwareTestingHelp.com'); logger.fatal('Message not entered'); } }
Eigenschaftendatei:
Fazit
Im aktuellen Tutorial haben wir uns auf die technische Implikation bei der Implementierung der Protokollierung in einem Framework. Wir haben das Dienstprogramm log4j genutzt, um die Protokollierung zu implementieren. Wir haben die grundlegenden Komponenten, die log4j ausmachen, aus Sicht der Benutzerfreundlichkeit erörtert. Mit den Anhängen und Layouts kann der Benutzer das gewünschte Protokollierungsformat / -muster und die Datenquelle / den Speicherort auswählen.
In diesem Tutorial untersuchen wir, warum Protokolle in unserem Test- und abgedeckten log4j-Framework verwendet werden, und implementieren das log4j-Framework in Selenium zum Generieren von Protokollen.
Nächstes Tutorial Nr. 27 : Im kommenden Tutorial werden wir einige fortgeschrittenere Themen im Zusammenhang mit diskutieren Effizientes Scripting und zur Fehlerbehebung bei Szenarien Hier muss der Benutzer Maus- und Tastaturereignisse verarbeiten. Darüber hinaus würden wir auch diskutieren, wie mehr als ein Webelement in einer Liste gespeichert werden kann.
Literatur-Empfehlungen
- Ausführliche Eclipse-Tutorials für Anfänger
- Einführung in Selenium WebDriver - Selenium Tutorial # 8
- Effizientes Selenium-Scripting und Fehlerbehebungsszenarien - Selenium-Lernprogramm Nr. 27
- Cucumber Selenium Tutorial: Integration von Cucumber Java Selenium WebDriver
- 30+ beste Selen-Tutorials: Lernen Sie Selen anhand realer Beispiele
- So suchen Sie Elemente in Chrome- und IE-Browsern zum Erstellen von Selenium-Skripten - Selenium-Lernprogramm Nr. 7
- Implementierung unseres ersten WebDriver-Skripts - Selenium WebDriver Tutorial # 10
- WebDriver Gesamte Einrichtung und Installation mit Eclipse - Selenium Tutorial # 9