2009-08-23 8 views
8

załóżmy, że klient rozpoczyna sesję selenu na serwerze RC, ale w połowie sesji klient "odszedł". Przeglądarka pozostanie otwarta, a docelowo, po wystarczającej liczbie takich upuszczonych sesji, będzie wystarczająco dużo "osieroconych" przeglądarek, aby spowolnić działanie komputera.Jak zamknąć przeglądarkę na selenowym serwerze RC, który stracił swojego klienta?

  • Jak mogę się upewnić, że te przeglądarki są zamknięte?
  • Dlaczego w protokole nie ma części "keep-alive", aby upewnić się, że klient nadal odpowiada, a jeśli nie zabić sesji?
  • +0

    Musisz zaakceptować odpowiedź, gdy myślisz, że Twoje pytanie zostało odebrane ... – Santi

    +0

    Czy na podobnej zasadzie mogę ponownie wykorzystać istniejące sesje przeglądarki? :) – Nayn

    +0

    @Nayn - tak, możesz! :) Istnieje argument, że możesz wysłać selen RC po uruchomieniu: -browserSessionReuse – olamundo

    Odpowiedz

    14

    Każda instancja przeglądarki ma identyfikator sesji, który można zapisać. Przykładem Python:

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

    Tak więc, jeśli przechowywać te sessionid w pliku podczas uruchamiania testu, a następnie usunąć go, gdy testy końce, będziesz miał plik dziennika z sesji dla testów, które nie kończą się prawidłowo.

    Teraz za pomocą crona, lub dowolny regularny wykonanie, można odczytać ten plik, iteracyjne nad sessionIds przechowywanych w nim i otwórz następujący adres URL (za pomocą przeglądarki lub nawet biblioteki http za język programowania):

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

    To powinno załatwić sprawę.

    Edytuj: To pytanie było tak interesujące, że utworzyłem post w moim blogu na temat rozwiązania. Jeśli jesteś pyton facet znajdziesz to ciekawe: http://www.santiycr.com.ar/djangosite/blog/posts/2009/aug/25/close-remaining-browsers-from-selenium-rc

    +0

    Dobry przykład Santi – AutomatedTester

    +0

    W przeglądarkach Firefox możesz dowiedzieć się sessionid, sprawdzając nazwę folderu profilu. W systemie uniksowym, 'ps ax | grep firefox-bin' zwróci coś takiego jak '12345? 1:00/usr/lib/iceweasel/firefox-bin -profile/tmp/customProfileDir '. – Tgr

    2

    Można też po prostu zabić proces:

    Windows:

    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

    to zabije wszystkie firefoxy, nie tylko te "zombie". więc jeśli na przykład uruchomisz dwa rc na tej samej maszynie (nie jest to mało prawdopodobne), możesz skończyć klupem, którego użył drugi RC. – olamundo

    2
    >>> browser.stop() 
    

    Czy to samo, co Santi, tłumaczy powyżej.

    Powiązane problemy