2009-08-23 12 views
8

supongamos que un cliente inicia una sesión de selenio en un servidor RC, pero a la mitad de la sesión el cliente "se fue". El navegador permanecerá abierto y, con el tiempo, después de suficientes sesiones de este tipo, habrá suficientes navegadores "huérfanos" para ralentizar la computadora.Cómo cerrar un navegador en un servidor RC de selenio que perdió su cliente

  • ¿Cómo puedo asegurarme de que esos navegadores estén cerrados?
  • ¿Por qué no hay una parte de "mantener vivo" en el protocolo para asegurarse de que el cliente sigue siendo receptivo y si no mata la sesión?
  • +0

    Debe aceptar una respuesta una vez que cree que su pregunta ha sido respondida ... – Santi

    +0

    En la nota similar, ¿podría volver a utilizar las sesiones existentes del navegador? :) – Nayn

    +0

    @Nayn - ¡sí se puede! :) Hay un argumento que puede enviar el selenio RC cuando se inicia: -browserSessionReuse – olamundo

    Respuesta

    14

    Cualquier instancia del navegador tiene un session_id que puede almacenar. Python ejemplo:

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

    Por lo tanto, si almacena estos sessionId en un archivo cuando se inicia el ensayo y posteriormente retirarlo Cuando los análisis de extremos, tendrá un archivo de registro con sesiones de pruebas que no terminan correctamente.

    Ahora, utilizando cron, o cualquier ejecución regular, se puede leer ese archivo, iterar sobre los SessionIDs almacenados en él y abra la siguiente URL (usando un navegador o incluso una biblioteca de http para su lenguaje de programación):

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

    Eso debería hacer el truco.

    Editar: Encontré esta pregunta tan interesante que creó una publicación en mi blog sobre la solución. Si eres un chico serpiente pitón le resultará interesante: http://www.santiycr.com.ar/djangosite/blog/posts/2009/aug/25/close-remaining-browsers-from-selenium-rc

    +0

    Buen ejemplo Santi – AutomatedTester

    +0

    Para los navegadores Firefox, puede encontrar el sessionid revisando el nombre de la carpeta del perfil. En un sistema unixlike, 'ps ax | grep firefox-bin' devolverá algo así como '12345? 1:00/usr/lib/iceweasel/firefox-bin -profile/tmp/customProfileDir '. – Tgr

    2

    Usted también puede simplemente matar el proceso:

    de 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

    esto matará a todos los firefox, no solo al "zombie". entonces, si, por ejemplo, ejecuta dos rc en la misma máquina (no tan improbable), podría terminar destruyendo un ff que fue utilizado por el otro RC. – olamundo

    2
    >>> browser.stop() 
    

    Hace lo mismo que Santi explica arriba.

    Cuestiones relacionadas