Was ist das Webdriver-Protokoll?
Das WebDriver-Protokoll ist ein W3C-Standard für ein plattform- und sprachneutrales Wire-Protokoll. Mit dem Webdriver-Protokoll wird eine Reihe von Schnittstellen zur Verfügung gestellt, um DOM-Elemente in Webdokumenten zu finden und zu manipulieren (z.B. Navigieren, Klicken), sowie das Verhalten von Webbrowsern remote zu steuern.
Es ist in erster Linie dazu gedacht, den Browser aus Benutzersicht zu automatisieren, d.h. alle Interaktionen, die ein Nutzer unternimmt, sind mit dem User-Agent (Browser) möglich.
Befehle
Das WebDriver-Protokoll ist in Befehle gegliedert. Jede HTTP-Anfrage stellt einen einzelnen Befehl dar und daher erzeugt jeder Befehl eine einzelne HTTP-Antwort.
Als Response auf einen Befehl führt ein Remote End eine Reihe von Aktionen aus, die als Remote-End-Steps bezeichnet werden.
Verarbeitung der Anfragen
Das Remote-End ist ein HTTP-Server, der Anfragen vom Client liest und Antworten schreibt, normalerweise über einen TCP-Socket, aber wie genau diese Verbindung funktioniert und aufgebaut wird, ist nicht Teil der WebDriver-Protokoll-Spezifikation. Wenn eine Verbindung über einen TCP-Socket besteht, muss das Remote-End als erster Schritt solange Bytes über die Verbindung lesen, bis eine komplette HTTP-Anfrage aus diesen Daten erstellt werden kann. Ist das nicht möglich, muss der Server entweder den TCP-Socket schließen, eine Antwort mit dem Statuscode 500 oder allgemein einen Fehlr mit dem zugehörigen Fehlercode senden.
Beispiel einer HTTP-Anfrange
GET /session/1234/url
Die obige Anfrage wird verwendet, um die aktuelle URL zurückzugeben. 1234 stellt die session id dar, die vorher über einen POST-Befehl hinterlegt werden muss. Wenn die Session-ID nicht gefunden werden kann, würde das Remote-End folgende HTTP-Antwort mit dem Code 404 zurückschicken:
{
"value": {
"error": "invalid session id",
"message": "No active session with ID 1234",
"stacktrace": ""
}
}
Vorteile des WebDriver-Protokolls
- OfiziellerW3C Web-Standard und wird unterstützt von vielen modernen Browsern
- Unterstützung für Automatisierung von Mobile- und Desktopanwendungen
- Kann sowohl lokal als auch in der Cloud eingesetzt werden
Nachteile des WebDriver-Protokolls
- Nicht konzipiert für Tracing oder Abfangen von Netzwerk-Events
- Eingeschränkte Automatisierungsmöglichkeiten im Bezug auf CPU oder Netzwerk-Throttling
- Etwas Aufwändigeres Setup im Zusammenhang mit Automatisierungsframeworks z.B. mit selenium-standalone, chromedriver, etc.