Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “无法运行程序”;“开始”:错误=2,试图在MAC中终止Chrome进程时没有这样的文件或目录_Java_Macos_Selenium_Unix_Selenium Webdriver - Fatal编程技术网

Java “无法运行程序”;“开始”:错误=2,试图在MAC中终止Chrome进程时没有这样的文件或目录

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

我的IDE是eclipse,我正在MAC上使用SeleniumWebDriver。每次执行下面的代码时,我都希望关闭/关闭以前打开的浏览器,然后启动一个新实例并保持其打开状态。因此,一次只能打开浏览器的一个实例。我这样做不是为了测试。我这么做是因为我想自动化一项任务

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

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()。