2016-12-13 2 views
1

Ich habe eine Anforderung, alle Aktionen dieses Winkelmessers zu protokollieren. Etwas nach dem Vorbild vonWinkelmesser: Logging-Aktionen

console.log(action + " was called with arguments " + args.join(", "); 

Mein erster Versuch war, die global verfügbaren browser.driver in einem Proxy-Objekt verwenden Sie dann dieses Proxy-Objekt in meinen Tests wickeln, und die Aktion anmelden, bevor der Anruf an das Ziel vorbei. Dies funktioniert für Methoden wie "get", aber dies scheint Ereignisse wie Click und SendKeys nicht zu erfassen. Ich habe versucht, die global verfügbare Elementfunktion auch in einen Proxy zu packen, aber das hat nicht funktioniert und schien nur zufällig die aufgerufene "all" -Methode auszugeben.

Gibt es eine einfache Möglichkeit, die aufgerufenen Webdriver-Aktionen zu protokollieren?

+0

Wenn der Bericht Ihnen helfen kann, versuchen Sie es mit Extent-Bericht. Ich habe einen schönen Bericht über die Ausdehnung des Winkelmessers gesehen. – Abhinav

+0

Ich bin mir nicht sicher, wie die Verwendung eines Jasmine-Berichts hier helfen würde? Es geht um das Protokollieren von Anrufen auf dem zugrunde liegenden Webdriver – ExoticChimp

Antwort

1

Falls Sie daran interessiert sind, benutzerdefinierte Reporter zu erstellen. Sie können eine Wrapper-Funktion für jedes Ereignis erstellen.

Siehe unten Beispiel für Klick():

module.exports = { 
    Click: function (elem, logName) { 
     elem.click().then(function() { 
      customReporter.addResult('Performed click for ' + logName); 
     }, function (err) { 
      customReporter.addResult('Failed to click on "' + logName + '" due to "' + err.message + '"'); 
      expect(false).toBe(true); 
     }); 
    }, 
}; 

logName - ist ein Name übergeben, die in dem Bericht angezeigt werden können.

Mit diesem Ansatz können Sie alle Ihre Aktionen in einer Datei aufzeichnen.

+0

Ich hoffe, Code-Duplizierung wo möglich zu vermeiden. Da ich diese Methode verwende, muss ich Click, Sendkeys usw. implementieren, um immer wieder die gleiche Logzeile zu haben. – ExoticChimp

+0

Ja, auf diese Weise müssen Sie Wrapper für die meisten Funktionen schreiben. Ich werde sehen, ob ich etwas Kurzes dafür finde, dass es funktioniert. – rk30

+0

Ich versuchte ursprünglich, einen ES6-Proxy zu verwenden und den get-Aufruf zu fangen, aber es funktioniert nur für browser.driver.get(). Es funktioniert nicht, wenn Sie versuchen, einen Aufruf von element() zu umbrechen – ExoticChimp