Selenium:如何在不调用driver.quit()的情况下停止影响PC内存的geckodriver进程?
有一个测试,像:
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(); //} }
所以,我使用firefox实例,使用geckodriver并成功运行我的测试。 但是我希望不要在每次运行后关闭firefox窗口,因为我只想分析我拥有的东西,并在测试运行后修复任何需要的东西(我将在稍后的unComment driver.quit())。 同时,每次调用而不关闭驱动程序都会导致我的PC上的RAM过度影响(并且无关紧要 – 我是否在测试后手动关闭浏览器):
因此,问题是:是否有任何方法可以关闭“geckodriver”的进程(更确切地说 – 执行smth,这将关闭taskmgr中的geckodriver.exe进程),但是在测试完成后不会关闭浏览器? 例如,在测试中添加一些方法,无论如何……这不会影响我的工作/测试本身,我只想添加一些优化。
根据你的问题注释掉driver.quit()
只是Not to close firefox window after each run, because I just want to analyse what I have
不会成为最佳实践的一部分。
对于任何详细分析,我们可以创建日志条目并拍摄快照。
虽然按照最佳实践通过Selenium
自动化,但您应该在tearDown() {}
调用quit()
方法。 调用quit()
通过发送带有{“flags”:[“eForceQuit”]}的 “quit”命令来DELETE
当前浏览会话,最后在/ shutdown EndPoint
上发送GET请求。 以下是一个示例:
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
因此,在调用quit()
方法时, Web Browser
会话和WebDriver
实例将完全被杀死。 因此,您不必包含任何额外的步骤,这将是一个开销。
回答这个问题:
仍然如果你想执行杀死悬空的WebDriver
实例,例如GeckoDriver.exe
实例,你可以使用以下任一代码块来杀死任何悬空的WebDriver
实例:
-
Java解决方案( 特定于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"); } }
-
Python解决方案( 特定于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")
-
Python解决方案( 跨平台 ):
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()
- Selenium许多日志(如何删除)
- Firefox错误:使用Java启动Selenium 3.0.1驱动程序时“您的连接不安全”
- 在Hadoop的mapreduce框架中运行“Selenium Webdriver”,在地图步骤中冻结
- 在selenium中绕过capcha
- 使用Selenium在FireFox中设置首选项时出现mime类型问题
- 使用BrowserMobProxy,Selenium,Firefox,marionette / gecko获取请求和响应
- 45000 ms后无法在端口7055上连接到主机127.0.0.1。 用FF版26.0和selenium独立jar2.39
- 无法阅读VR Path Registry – Selenium Webdriver
- 使用Selenium 3.0启动Firefox 46.0.1时获取IllegalStateException