有一个测试,像这样:
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()的注释)。同时,每次不关闭驱动程序的调用都会导致对我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
按照最佳做法进行自动化操作时,你应该在中调用quit()
方法tearDown() {}
。通过发送带有{“ flags”:[“ eForceQuit”]}的“ quit”命令来调用当前浏览会话,最后在/ shutdown上发送GET请求。下面是一个示例:quit()
DELETE
EndPoint
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解决方案(Windows):
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解决方案(Windows):
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()