运行我的量角器测试后,我可能会继续运行chromedriver.exe。简单的问题是:我该如何杀死它?这里有几点需要注意:
我不能仅根据进程名称进行杀死,因为其他几个chromedrivers可能正在运行,其他测试可能需要它。
我已经使用“curl http://localhost:4444/selenium-server/driver/?cmd=shutDownSeleniumServer”停止了selenium服务器
我注意到chromedriver正在侦听端口33107(是否有可能以某种方式指定此端口?),但我不知道应该如何调用它来退出。
可能我应该在我的测试中使用driver.quit(),但在某些情况下它可能不会被调用(例如,当构建被取消时)。
如何从命令行中删除正确的chromedriver进程(例如使用curl)?
答案 0 :(得分:0)
正如您在测试中使用driver.quit()
所提到的那样正确的方法。
实际上,准确地说是在你的测试清理方法中,因为你每次都想要一个新的浏览器实例。
现在,一些单元测试框架(例如MSTest
)的问题在于,如果测试初始化方法失败,则不会调用测试清理框架。
作为解决方法,您可以在try-catch
语句中使用catch
调用初始化并调用并执行测试清理。
public void TestInitialize()
{
try
{
//your test initialize statements
}
catch
{
TestCleanup();
//throw exception or log the error message or whatever else you need
}
}
public void TestCleanup()
{
driver.Quit();
}
编辑:
对于取消构建的情况,您可以创建一种方法,在开始新的测试套件之前杀死所有已执行的Chrome浏览器和ChromeDriver实例。
例如。如果您使用的单元测试框架与Class Initialize
或Assembly Initialize
类似,您可以在那里进行。
然而,在另一篇文章中,我发现了这种方法:
PORT_NUMBER=1234
lsof -i tcp:${PORT_NUMBER} | awk 'NR!=1 {print $2}' | xargs kill
命令细分
(lsof -i tcp:${PORT_NUMBER})
- 列出正在侦听该tcp端口的所有进程
(awk 'NR!=1 {print $2}')
- 忽略第一行,打印每行的第二列
(xargs kill)
- 将结果作为参数传递给kill。可能有几个。
在这里,更确切地说:How to find processes based on port and kill them all?