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.