Ausgabe
Ich konnte lokal mit DevTools-Features in Selenium 4 arbeiten, aber als ich versuchte, es auf Selenium Grid zu verwenden, funktionierte es nicht.
Um dies zu untersuchen, habe ich mit Docker-Compose ein lokales Grid mit einem Chrome-Knoten installiert und den gleichen Fehler erhalten:
OpenQA.Selenium.WebDriverException : Unexpected error creating WebSocket DevTools session.
----> System.Net.WebSockets.WebSocketException : Unable to connect to the remote server
----> System.Net.Http.HttpRequestException : A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. (172.18.0.3:4444)
----> System.Net.Sockets.SocketException : A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
Wo 172.18.0.3
ist die private IP des Chrome-Node-Containers?
Ich denke, der Hauptgrund ist, dass ich vom Host aus keinen Zugriff auf diese IP habe, und das ist wahrscheinlich eine Sache der Docker-Konfiguration, in der ich kein Experte bin. Aber das war nicht das einzige Problem.
Mit dem Debugger konnte ich verfolgen, dass der Treiber versucht, diese Adresse zu verwenden, da die folgende Funktion vom Treiber nach der Erstellung zurückgegeben wird"se:cdp": "ws://172.18.0.3:4444/session/2c519f679e1060cdc926ca74e63e222f/se/cdp"
: . Ich habe dann diesen Wert (im Debugger, bevor ich versucht habe, die Verbindung zum DevTools-Protokoll herzustellen) so angepasst, dass er localhost
anstelle der privaten IP verwendet wird, und dann habe ich die folgende Fehlermeldung erhalten: IOException: The response ended prematurely.
.
Was muss ich tun, um die DevTools-Features von Selenium über Selenium Grid (und Docker) zu verwenden?
Lösung
Das Hinzufügen einer - SE_NODE_GRID_URL=http://localhost:4444/
Umgebung zum „chrome“-Container in der docker-compose-YAML-Datei löst das Problem.
Wenn Sie von außerhalb des Hosts auf das Grid zugreifen möchten, localhost
schreiben Sie stattdessen die IP oder den Namen der Maschine.
Beantwortet von – Arnon Axelrod
Antwort geprüft von – Gilberto Lyons (FixError Admin)