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?
Odpowiedz
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
Dobry przykład Santi – AutomatedTester
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
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
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
>>> browser.stop()
Czy to samo, co Santi, tłumaczy powyżej.
Musisz zaakceptować odpowiedź, gdy myślisz, że Twoje pytanie zostało odebrane ... – Santi
Czy na podobnej zasadzie mogę ponownie wykorzystać istniejące sesje przeglądarki? :) – Nayn
@Nayn - tak, możesz! :) Istnieje argument, że możesz wysłać selen RC po uruchomieniu: -browserSessionReuse – olamundo