0

Ich bin auf der Suche nach einem Weg, kann ich sicherstellen, dass bestimmte Dinge nach jedem Test auf einem Selenium Grid-Knoten passieren. (Z. B. bestimmte Prozesse auf dem Knoten steuern)Wie man einen Test auf einem Selenium Grid

Was ist der beste Weg, auf Selen Grid zu tun? Vielleicht muss ich das Rad nicht neu erfinden und es gibt eine Möglichkeit, mit Selenium Grid-Infrastruktur festzustellen, wann ein Test programmatisch an einem Knoten abgeschlossen wurde.

+0

Welche Selen-Clients verwenden Sie? Java/Python? – DebanjanB

+0

@DebanjanB Hallo, ich benutze Java. –

Antwort

1

Sie können dies auf zwei Arten

  1. Wenn Sie die Bereinigung wollen, unabhängig davon, was passieren Test endet also können Sie sagen nicht über den Test ist es egal, wollen Sie nur wissen, wann der Benutzer ruft driver.quit() auf, das eine Nachricht zum Beenden der Sitzung an den Hub signalisiert, sodass Sie eine Art Säuberung am Knoten ausführen können.

Um dies zu erreichen, sollten Sie Ihre eigenen Proxy bauen (durch die Erweiterung org.openqa.grid.selenium.proxy.DefaultRemoteProxy) und betten Sie Ihre Logik der Clean-up als Teil afterSession() so dass sie ausgeführt nachdem driver.quit() ausgeführt wird, aber bevor die Sitzung freigegeben wird durch das Gitter. Sie müssen sicherstellen, dass Sie hier keine Ausnahmen auslösen. Sehen Sie sich den Artikel this an, den ich im Raster geschrieben habe, um Ihnen zu zeigen, wie Sie mit benutzerdefinierten Proxys arbeiten können.

(oder)

  1. Wenn Sie die Bereinigung wollen nur in Bezug auf bestimmte spezifische Tests geschehen, dh, sagen wir Ihnen einige besondere Tests wurden möglicherweise ausgeführt wird, für die Sie möchten, dass die Bildschirmaufzeichnung durchgeführt wird, und sie nur für die Tests anhalten möchte, die sie angefordert haben.

Wenn das ist, was Sie wollen, dann

  • Zuerst sollten Sie ein Servlet bauen, die, wenn sie aufgerufen für Sie die Bereinigung tun. Sie injizieren dieses Servlet einfach in den Knoten. Um zu erfahren, wie dies zu tun ist, beziehen Sie sich bitte auf this Artikel von mir.
  • Kurz vor driver.quit() Aufruf sollten Sie folgendes tun:

    1. Erfragen Sie die IP und Port-Adresse des Computers, an dem Ihr Test geleitet wurde. Sie können lernen, wie Sie dies tun, indem Sie auf this Blog-Post von mir, oder nur mit this Bibliothek von mir.

Jetzt, nachdem Sie driver.quit() nennen, löst eine http Operation (GET/POST) an das Servlet, das Sie den Knoten hinzugefügt, durch die Verwendung der IP und Port-Adresse zu machen, die Sie von oben erhalten.

+0

Tolles Zeug! Ich danke dir sehr. Ich denke, dass eine Lösung durch die Nutzung der bestehenden Grid-Infrastruktur, wie sie die offizielle Dokumentation von Selenium bietet, möglich sein könnte, konnte aber keine gute Ressource oder Anleitung finden, die mich durch diese Aufgabe führen würde. –

1

die SessionIds Verwendung,

Python-Code Nach wird Sitzung Infos von einem Gitter

import urllib.request 
import json 

grid_url = "http://127.0.0.1:4444/wd/hub" 

sessions_req = urllib.request.urlopen(grid_url + "/sessions") 
sessions_data = sessions_req.read() 
sessions_encoding = sessions_req.info().get_content_charset('utf-8') 

sessions = json.loads(sessions_data.decode(sessions_encoding)) 

for session in sessions["value"]: 
    print (session["id"]) 
    print (session["capabilities"]["browserName"]) 

ausgegeben werden soll drucken:

26294a77-7ab2-47f1-81fd-e11f593bd960 firefox

29aa25cb-a60a-4454-a35c-315f76ff1251 Chrom

Nach dem Abschluss des Tests können Sie die sessionIds behaupten, den Status Ihrer Tests zu bestimmen. Eine aktive Sitzung muss eine ID haben. Um Einblicke in diesen speziellen Test zu erhalten, injizieren Sie die Session-ID in eine Treiberinstanz und verwenden Sie die Methode getCurrentUrl() oder takeScreenshot().

Wenn Sie sich auf die Verwaltung verwaister Browser konzentrieren, kann Selen Grid Ihnen auf der Konfigurationsebene helfen. Das Selen Grid hat speziell drei Parameter, die für Aufräumarbeiten gedacht sind.

  • browserTimeout in Sekunden: Anzahl der Sekunden ein Browser-Sitzung, während ein WebDriver Befehl hängen gelassen ausgeführt wird, (Beispiel: driver.get (url)). Wenn das Zeitlimit erreicht ist, während ein WebDriver-Befehl noch verarbeitet wird, wird die Sitzung beendet. Der Minimalwert ist 60. Ein unspezifizierter, Null oder negativer Wert bedeutet unbegrenzte Wartezeit. Default: 0

  • cleanUpCycle in Millisekunden: gibt an, wie oft die Nabe Lauf Proxies für timed-out abfragt (d.h. gehangen) Threads. auch Timeout option.Default angeben muss: 5000 (5 Sekunden)

  • Timeout -sessionTimeout in Sekunden: Gibt die Timeout vor der Server automatisch eine Sitzung tötet, die keine Aktivität in den letzten X Sekunden hatten . Der Test-Slot wird dann für einen weiteren Test freigegeben. Dies wird normalerweise verwendet, um auf den Client
    Abstürze zu kümmern. Für Grid-Hub-/Knotenrollen muss auch cleanUpCycle festgelegt werden.
    Default: 1800

eine Kombination aus allen oben genannten drei Parameter verwenden, können Sie können Ihren Knoten automatisch schließen verwaiste Browser Instanzen und Sitzungen konfigurieren.

Verwandte Themen