2009-08-23 3 views
8

Angenommen, ein Client startet eine Selen-Sitzung auf einem RC-Server, aber in der Mitte der Sitzung "ging der Client". Der Browser bleibt geöffnet, und nach so vielen abgelegten Sitzungen wird es genug "verwaiste" Browser geben, um den Computer zu verlangsamen.So schließen Sie einen Browser auf einem Selen RC-Server, der seinen Client verloren hat

  • Wie kann ich sicherstellen, dass diese Browser geschlossen sind?
  • Warum gibt es keinen "keep-alive" -Teil im Protokoll, um sicherzustellen, dass der Client noch reagiert und die Sitzung nicht beendet wird?
  • +0

    Sie müssen eine Antwort akzeptieren, sobald Sie glauben, dass Ihre Frage beantwortet wurde ... – Santi

    +0

    Könnte ich die vorhandenen Browsersitzungen auf ähnliche Weise wiederverwenden? :) – Nayn

    +0

    @Nayn - ja du kannst! :) Es gibt ein Argument, das Sie dem Selenium RC senden können, wenn es startet: -browserSessionReuse – olamundo

    Antwort

    14

    Jede Browser-Instanz verfügt über eine session_id, die Sie speichern können. Python Beispiel:

    >>> import selenium 
    >>> browser = selenium.selenium("localhost",4444, "*firefox", "http://www.santiycr.com.ar") 
    >>> browser.start() 
    >>> browser.sessionId 
    u'b4ad1f1d624e44d9af4200b26d7375cc' 
    

    Also, wenn Sie speichern diese sessionId in einer Datei, wenn der Test beginnt und dann entfernen, wenn die Tests Ende, werden Sie eine Protokolldatei mit Sitzungen für Tests haben, die nicht am Ende richtig.

    Jetzt cron verwenden, oder jede regelmäßige Ausführung, können Sie diese Datei lesen, die sessionIds darin gespeicherten iterieren und öffnen Sie die folgende URL (einen Browser oder sogar eine http-Bibliothek für Ihre Programmiersprache verwenden):

    http://localhost:4444/selenium-server/driver/?sessionId=THE-SESSION-ID&cmd=testComplete

    Das sollte den Trick tun.

    Edit: Ich fand diese Frage so interessant, dass ein Beitrag in meinem Blog über die Lösung erstellt. Wenn Sie ein Python-Typ sind Sie finden es interessant: http://www.santiycr.com.ar/djangosite/blog/posts/2009/aug/25/close-remaining-browsers-from-selenium-rc

    +0

    Gutes Beispiel Santi – AutomatedTester

    +0

    Für Firefox-Browser können Sie die Sitzungs-ID herausfinden, indem Sie den Profil-Ordnernamen überprüfen. Auf einem unixartigen System, ps ax | grep firefox-bin wird etwas wie 12345 zurückgeben? 1:00/usr/lib/iceweasel/firefox-bin -profile/tmp/customProfileDir '. – Tgr

    2

    Sie können auch nur den Prozess töten:

    Fenster:

    taskkill /f /im iexplore.exe
    taskkill /f /im firefox.exe

    * nix:

    for i in `ps -A | grep firefox | awk '{print $1}'`; do kill -9 $i; done 
    
    +0

    das wird alle firefoxes töten, nicht nur die "Zombie". Wenn Sie zum Beispiel zwei RCs auf dem gleichen Rechner laufen lassen (nicht so unwahrscheinlich), könnten Sie am Ende einen FF klopfen, der vom anderen RC verwendet wurde. – olamundo

    2
    >>> browser.stop() 
    

    Hat dasselbe wie Santi oben erklärt.

    Verwandte Themen