Java Selenium:如何在不调用driver.quit()的情况下停止影响PC内存的geckodriver进程?
有一个测试,类似于:Java Selenium:如何在不调用driver.quit()的情况下停止影响PC内存的geckodriver进程?,java,python,selenium,firefox,geckodriver,Java,Python,Selenium,Firefox,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) }
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();
//}
}
因此,我初始化了geckodriver,并使用firefox实例成功地运行了测试。
但我不想在每次运行之后关闭firefox窗口,因为我只想在测试运行之后分析我拥有的,并修复任何需要的东西(稍后我将取消对driver.quit()的注释)。
同时,每次未关闭驱动程序的呼叫都会对我的电脑上的RAM造成过度影响(这无关紧要-我是否在测试后手动关闭浏览器):
所以,问题是:
是否有任何方法可以关闭“geckodriver”的进程(更准确地说,是do smth,它将关闭taskmgr中的geckodriver.exe进程),但在测试完成后不会关闭浏览器?e、 例如,在测试本身中添加一些方法,不管怎样。。。这不会影响我的工作/测试本身,我只想添加一些优化。根据您的问题注释出
驱动程序。退出()
只是每次运行后不要关闭firefox窗口,因为我只想分析我拥有的不会成为最佳实践的一部分
对于任何详细分析,我们都可以创建日志条目并拍摄快照。
在按照最佳实践通过Selenium自动化时,您应该在拆卸(){}
中调用退出()
方法。调用quit()
删除当前浏览会话,方法是发送带有{flags:[“eForceQuit”]}的“quit”命令,最后在/shutdown
端点上发送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浏览器
会话和WebDriver
实例将被完全杀死。因此,您不必合并任何额外的步骤,这将是一项开销
解决方案
但是,如果要执行kill挂起的WebDriver
实例,例如GeckoDriver.exe
实例,则可以使用以下任一代码块来杀死任何挂起的WebDriver
实例:
- Java解决方案(Windows):
- Python解决方案(Windows):
- Python解决方案(跨平台):
尝试从任务列表中终止进程-。
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");
}
}
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")
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()