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
risposta
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
Buon esempio Santi – AutomatedTester
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
È 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
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
>>> browser.stop()
Fa lo stesso di Santi sopra.
È necessario accettare una risposta una volta che si è risposto alla domanda ... – Santi
Sulla nota simile, è possibile riutilizzare le sessioni del browser esistenti? :) – Nayn
@Nayn - sì, puoi! :) C'è un argomento in cui è possibile inviare il selenio RC all'avvio: -browserSessionReuse – olamundo