Java “无法运行程序”;“开始”:错误=2,试图在MAC中终止Chrome进程时没有这样的文件或目录
我的IDE是eclipse,我正在MAC上使用SeleniumWebDriver。每次执行下面的代码时,我都希望关闭/关闭以前打开的浏览器,然后启动一个新实例并保持其打开状态。因此,一次只能打开浏览器的一个实例。我这样做不是为了测试。我这么做是因为我想自动化一项任务 这是我每次执行代码时都会遇到的错误:Java “无法运行程序”;“开始”:错误=2,试图在MAC中终止Chrome进程时没有这样的文件或目录,java,macos,selenium,unix,selenium-webdriver,Java,Macos,Selenium,Unix,Selenium Webdriver,我的IDE是eclipse,我正在MAC上使用SeleniumWebDriver。每次执行下面的代码时,我都希望关闭/关闭以前打开的浏览器,然后启动一个新实例并保持其打开状态。因此,一次只能打开浏览器的一个实例。我这样做不是为了测试。我这么做是因为我想自动化一项任务 这是我每次执行代码时都会遇到的错误: Cannot run program "START": error=2, No such file or directory 这是我的代码: public class Demo { publ
Cannot run program "START": error=2, No such file or directory
这是我的代码:
public class Demo {
public static void main(String[] args){
System.setProperty("webdriver.chrome.driver", "/Users/Downloads/chromedriver/chromedriver");
WebDriver driver = new ChromeDriver();
driver.get("https://www.google.com/");
try{
Runtime.getRuntime().exec("START taskkill /F /IM chrome.exe");
System.exit(0);
}
catch(IOException io){
System.out.println(io.getMessage());
}
}
}
这在windows上运行良好。如何在MAC/unix/环境中修复此问题,或者应该在代码中进行哪些更改
我被告知此错误与管理员权限有关,因此我应该以管理员身份运行eclipse。所以我这样做了:
sudoopeneclipse.app/
。所以eclipse以管理员的身份打开并执行代码,但我仍然收到相同的错误 根据您的问题,使用以下代码行:
Runtime.getRuntime().exec("taskkill /F /IM chrome.exe");
Runtime.getRuntime().exec("taskkill /F /IM chrome.exe");
终止浏览器客户端进程将违反所有最佳做法
在按照最佳实践通过Selenium自动化时,您应该在拆卸(){}
中调用退出()
方法。根据调用的quit()
删除当前浏览会话,方法是发送带有{flags:[“eForceQuit”]}的“quit”命令,最后在/shutdown端点上发送GET请求
作为GeckoDriver(W3C兼容WebDriver变体)的示例,以下是事件序列:
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实例将被完全杀死。因此,您不必合并任何额外的步骤,这将是一项开销
解决方案
替换代码行:
Runtime.getRuntime().exec("taskkill /F /IM chrome.exe");
Runtime.getRuntime().exec("taskkill /F /IM chrome.exe");
与:
driver.quit();
在这里,您可以找到有关的详细讨论
其他考虑事项
- 确保WebDriver二进制文件对非root用户具有可执行权限。(
chmod 777
)
- 确保指定位置存在WebDriver二进制文件
- 以非root用户身份执行
测试
- 始终在
tearDown(){}
方法中调用driver.quit()
,以优雅地关闭和销毁Web驱动程序和Web客户端实例
为什么用终端终止驱动程序进程?只需在每个步骤之前添加driver.quit()。