java python selenium firefox geckodriver

java - Selenium: ¿Cómo detener el proceso de geckodriver que afecta la memoria de la PC, sin llamar a driver.quit()?



python firefox (1)

Según su pregunta, comentar driver.quit() solo Not to close firefox window after each run, because I just want to analyse what I have no será parte de las mejores prácticas.

Para cualquier análisis detallado, podemos crear entradas de registro y tomar instantáneas.

Al automatizar a través de Selenium según las mejores prácticas, debe invocar el método quit() dentro de tearDown() {} . Invocar quit() DELETE es la sesión de navegación actual mediante el envío del comando "quit" con {"flags": ["eForceQuit"]} y finalmente envía la solicitud GET en / apagar EndPoint . Aquí hay un ejemplo a continuación:

1503397488598 webdriver::server DEBUG -> DELETE /session/8e457516-3335-4d3b-9140-53fb52aa8b74 1503397488607 geckodriver::marionette TRACE -> 37:[0,4,"quit",{"flags":["eForceQuit"]}] 1503397488821 webdriver::server DEBUG -> GET /shutdown

Entonces, al invocar el método quit() , la sesión del Web Browser y la instancia de WebDriver se eliminan por completo. Por lo tanto, no tiene que incorporar ningún paso adicional que será una sobrecarga.

Responda a esta pregunta:

Aún así, si desea ejecutar matar las instancias colgantes de WebDriver , por ejemplo, las instancias GeckoDriver.exe , puede usar cualquiera de los siguientes bloques de código para matar cualquiera de las instancias colgantes de WebDriver :

  • Solución Java ( específica de WindowsOS ):

    import java.io.IOException; public class Kill_ChromeDriver_GeckoDriver_IEDriverserver { public static void main(String[] args) throws Exception { Runtime.getRuntime().exec("taskkill /F /IM geckodriver.exe /T"); Runtime.getRuntime().exec("taskkill /F /IM chromedriver.exe /T"); Runtime.getRuntime().exec("taskkill /F /IM IEDriverServer.exe /T"); } }

  • Solución Python ( específica de WindowsOS ):

    import os os.system("taskkill /f /im geckodriver.exe /T") os.system("taskkill /f /im chromedriver.exe /T") os.system("taskkill /f /im IEDriverServer.exe /T")

  • Solución Python ( plataforma cruzada ):

    import os import psutil PROCNAME = "geckodriver" # or chromedriver or IEDriverServer for proc in psutil.process_iter(): # check whether the process name matches if proc.name() == PROCNAME: proc.kill()

Hay una prueba, algo así como:

import //needed imports public class TestClass{ WebDriver driver; @Before public void setUp() { //some code } @Test public void test1() { //some code, including init of driver (geckodriver) } //@After // public void tearDown() { // driver.quit(); //} }

Entonces, inicié geckodriver y ejecuté con éxito mis pruebas, usando instancias de firefox. Pero no quiero cerrar la ventana de Firefox después de cada ejecución, porque solo quiero analizar lo que tengo y arreglar lo que sea necesario, después de la ejecución de prueba (voy a descomentar driver.quit () más adelante). Al mismo tiempo, cada llamada sin cerrar el controlador provoca un impacto excesivo en la RAM de mi PC (y no importa, cerré el navegador manualmente o no, después de la prueba):

Entonces, la pregunta es: ¿hay alguna forma de cerrar el proceso (más precisamente, ¿smth, que cerrará el proceso geckodriver.exe en taskmgr) de "geckodriver", pero NO cerrará el navegador una vez finalizada la prueba? por ejemplo, agregar algún método en la prueba en sí, lo que sea ... Esto no afecta mi trabajo / prueba en sí, solo quiero agregar algo de optimización.