2009-08-23 10 views
8

supponiamo che un client avvii una sessione di selenio su un server RC, ma a metà sessione il client "è andato via". Il browser rimarrà aperto e alla fine, dopo un numero sufficiente di sessioni di questo tipo, ci saranno abbastanza "orfani" browser per rallentare il computer.Come chiudere un browser su un server RC di selenio che ha perso il client

  • Come posso assicurarmi che quei browser siano chiusi?
  • Perché non c'è una parte "keep-alive" nel protocollo per assicurarsi che il client sia ancora reattivo e se non uccide la sessione?
  • +0

    È necessario accettare una risposta una volta che si è risposto alla domanda ... – Santi

    +0

    Sulla nota simile, è possibile riutilizzare le sessioni del browser esistenti? :) – Nayn

    +0

    @Nayn - sì, puoi! :) C'è un argomento in cui è possibile inviare il selenio RC all'avvio: -browserSessionReuse – olamundo

    risposta

    14

    Ogni istanza del browser ha un session_id che è possibile memorizzare. Esempio Python:

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

    Quindi, se si memorizzano questi sessionId in un file quando il test si avvia e poi rimuoverlo quando i test finisce, avrete un file di log con le sessioni per le prove che non finiscono propriamente.

    Ora utilizzando cron, o qualsiasi regolare esecuzione, si può leggere il file, scorrere i SessionIDs memorizzati in esso e aprire la seguente url (utilizzando un browser o anche una libreria HTTP per il vostro linguaggio di programmazione):

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

    Questo dovrebbe fare il trucco.

    Modifica: ho trovato questa domanda così interessante che ha creato un post nel mio blog sulla soluzione. Se sei un ragazzo pitone lo troverete interessante: http://www.santiycr.com.ar/djangosite/blog/posts/2009/aug/25/close-remaining-browsers-from-selenium-rc

    +0

    Buon esempio Santi – AutomatedTester

    +0

    Per i browser Firefox, è possibile trovare il sessionid controllando il nome della cartella del profilo. Su un sistema unixlike, 'ps ax | grep firefox-bin' restituirà qualcosa come '12345? 1:00/usr/lib/iceweasel/firefox-bin -profile/tmp/customProfileDir '. – Tgr

    2

    È anche possibile uccidere il processo:

    di 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

    questo ucciderà tutti i firefox, non solo quelli "zombie". quindi se, ad esempio, esegui due rc sulla stessa macchina (non così improbabile), potresti finire con un ff che è stato usato dall'altro RC. – olamundo

    2
    >>> browser.stop() 
    

    Fa lo stesso di Santi sopra.

    Problemi correlati