繁体   English   中英

无法运行程序“ START”:错误= 2,尝试在MAC中终止Chrome进程时没有此类文件或目录

[英]Cannot run program “START”: error=2, No such file or directory while trying to kill Chrome process in MAC

我的IDE是eclipse,我在MAC上使用了Selenium Webdriver 每当我在下面执行我的代码时,我想杀死/关闭以前打开的浏览器,然后启动一个新实例并保持打开状态。 因此,一次只能打开一个浏览器实例。 我这样做不是出于测试目的。 我这样做是因为我想自动化一个任务。

这是我每次执行代码时都会遇到的错误:

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。 所以我做到了: sudo open Eclipse.app/ 因此,eclipse以管理员身份打开并执行了代码,但我仍然遇到相同的错误。

根据您的问题,使用以下代码行:

Runtime.getRuntime().exec("taskkill /F /IM chrome.exe");

杀死Browser Client进程将违反所有最佳实践

根据最佳实践通过Selenium自动化时,应在tearDown() {}调用quit()方法。 根据WebDriver W3C Editor's Draft调用quit()通过发送带有{“ flags”:[“ eForceQuit”]}}的 “ quit”命令来DELETE当前浏览会话,最后在/ shutdown EndPoint上发送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 Client会话和WebDriver实例被完全杀死。 因此,您不必合并任何其他步骤,而这将是额外的开销。

替换代码行:

Runtime.getRuntime().exec("taskkill /F /IM chrome.exe");

与:

driver.quit();

在这里,您可以找到有关Selenium : How to stop geckodriver process impacting PC memory, without calling driver.quit()?的详细讨论Selenium : How to stop geckodriver process impacting PC memory, without calling driver.quit()?

其他注意事项

  • 确保WebDriver Binary具有非root用户的可执行权限。 chmod 777
  • 确保WebDriver Binary位于指定位置。
  • 以非root用户身份执行Test
  • 始终在tearDown(){}方法内调用driver.quit() ,以优雅地关闭和破坏WebDriverWeb Client实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM