Cerrar automaticamente los procesos de chrome

Buenas lectores

En ocasiones se nos olvida cerrar el driver de chrome cuando estamos automatizando afectando el rendimimiento de nuestra máquina. Puede ocurrir porque no lo cerramos o inclusive un test terminó mal y la sesión quedo en background.

Actualmente estoy usando SerenityBdd y al ejecutar varios test quedan abiertos varios procesos de chrome en background, esto hace que el equipo se ponga lento y la navegación en el chrome se vuelva super lenta. Inclusive afecta los demás escenarios que siguen en la suite de pruebas. No he revisado si se trata de un error con el mannager driver sin embargo, la solución directa sin buscar demasiado es cerrar la sesión cada vez que termina un escenario.

Para lograr esto, lo agregamos a los pasos con la anotación After de cucumber (en caso que esten trabajandolo, sino, Junit): 


@After

    public void cleanSessions() {

    CloseSessions.closeChrome();

    }


Y creamos nuestro método que se va a ejecutar por cada paso terminado:


public class CloseSessions {

private CloseSessions() {}

protected static final Logger logger = LoggerFactory.getLogger(CloseSessions.class);

public static void closeChrome() {

String[] windowsCmdArray= {"taskkill", "/F","/IM","chrome.exe"};

String[] linuxCmdArray= {"kill", "-9"};

try {

Runtime rt = Runtime.getRuntime();

  if (System.getProperty("os.name").toLowerCase().indexOf("windows") > -1) 

  rt.exec(windowsCmdArray);

   else

     rt.exec(linuxCmdArray);}catch(Exception ex) {

    logger.info("Not found chrome.exe process: {}",ex.getMessage());

     }

}


}

Ya con esto no se van a quedar esas sesiones de chrome abiertas colocando lento el equipo y el internet.

Cabe anotar que esto también cerrará sesiones de usuario, entonces cuando se ejecute que sea de forma controlada.

Adicionalmente, esto es una solución "salvaje", una verdadera solución es revisar que está pasando con la nueva versión de serenitybdd/selenium/escenarios para conocer el porqué se están quedando procesos abiertos. 


Fuentes:
https://stackoverflow.com/questions/6356340/killing-a-process-using-java

https://stackoverflow.com/questions/43445545/selenium-initiated-chromedriver-keeps-running-in-background

Comentarios

Entradas populares de este blog

Tiempo de espera "muerto" explicito en Playwright

Subir mi proyecto local a Azure repos

SerenityBDD - Almacenar valores en memoria (pasar información entre steps)