首页 > 解决方案 > 显示错误 - 未知错误:DevToolsActivePort 文件不存在 - 它是电子应用程序(我使用的是 Windows 操作系统)

问题描述

当我运行我的代码时,它显示以下错误 - 电子应用程序

org.openqa.selenium.WebDriverException: unknown error: DevToolsActivePort file doesn't exist.
Build info: version: '3.6.0', revision: '6fbf3ec767', time: '2017-09-27T15:28:36.4Z'
System info: host: 'DESKTOP-GN8LLQU', ip: '192.168.1.20', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '11.0.2'
Driver info: driver.version: ChromeDriver

我的代码:

ChromeOptions opt = new ChromeOptions();
// path of your Electron Application
opt.setBinary("D:\\FOS\\fiber-optic-system-electron\\release\\angular-electron 0.1.0.exe");
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("chromeOptions", opt);
capabilities.setBrowserName("chrome");
System.setProperty("webdriver.chrome.driver", "E:\\chromedriver_win32 (6)\\chromedriver.exe");
WebDriver driver = new ChromeDriver(capabilities);

标签: seleniumgoogle-chromeelectronselenium-chromedriverjava-11

解决方案


我自己一直遇到错误DevToolsActivePort 文件不存在,在我的情况下,错误是正确的,根本原因是电子应用程序本身。

由于 v2.39 Chrome 的网络驱动程序(chromedriver.exe)默认查找名为DevToolsActivePort的文件,并在找到时读取它以获取当前在 chrome 中运行的 devtools 的端口号(在您的情况下是电子应用程序的 Chrome 实例“角电子0.1.0.exe”正在运行)。

当您在 Selenium 中创建 ChromeDriver 并包含--remote-debugging-port=0参数,或者根本不包含此参数时,chromedriver 将在命令行中发送--remote-debugging-port=0到您的电子应用程序(即角电子0.1.0.exe)。如果您的 Electon 应用程序将此参数传递给在其中运行的 Chrome 应用程序,则会创建DevToolsActivePort文件,chromedriver 可以读取它并获得 devtools 的端口,并且自动化是成功的。但是,如果您的电子应用程序没有将此参数传递给 Chrome,则永远不会创建DevToolsActivePort文件,并且您的 chromedriver 会超时查找它并失败。

您有几个解决方案的选择:

  1. 让电子应用程序的开发人员确保将“--remote-debugging-port”参数传递到 Chrome。
  2. 自动化您自己的解决方案来创建“DevToolsActivePort”文件。

就我而言,我选择了选项 2。这是手动测试此选项的方法。如果您在电子应用程序之前运行SysInternal 的 Tcpview ( https://docs.microsoft.com/en-us/sysinternals/downloads/tcpview ) 之类的应用程序,则 Tcpview 将向您显示电子应用程序正在侦听的端口。这些端口之一将是 Chrome 的 devtools 端口。记下这一点。现在进入 Windows 中的%temp% 文件夹,因为这是包含 chromedriver 正在寻找的 DevToolsActivePort 文件的临时文件夹的默认位置。在此文件夹中查找以scoped_dir为前缀的文件夹. 默认情况下,chromedriver 每次运行时都会创建一个。为保证您访问正确的文件夹,最好在运行之前使用--user-data-dir参数在 chromedriver 中自行设置此目录名称。进入该文件夹并创建一个名为DevToolsActivePort的新文件并在第一行输入端口号,按 Enter(换行符),然后在第二行输入任意数字。保存文件并关闭。如果您在 60 秒内手动完成整个过程,正在运行的 chromedriver 将读取该文件,获取 Chrome 的 devtools 的端口,连接到它并继续。

我开发了一个自动执行上述过程的 AutoIT 脚本,并且我将其包含在我自己的自动化运行中,并且每次都可以正常工作。

希望这可以帮助。


推荐阅读