显示错误-未知错误:DevToolsActivePort文件不存在-它是电子应用程序(我正在使用Windows OS)

时间:2019-10-22 08:54:34

标签: selenium google-chrome electron selenium-chromedriver java-11

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

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);

2 个答案:

答案 0 :(得分:2)

我本人一直遇到错误 DevToolsActivePort文件,对于我来说,该错误是正确的,根本原因是电子应用本身。

从v2.39开始,Chrome的网络驱动程序(chromedriver.exe)默认情况下会查找名为 DevToolsActivePort 的文件,并在找到文件后读取该文件,以获取当前在chrome中运行的devtools的端口号(以及在您的情况下,Chrome实例正在运行电子应用“ angular-electron 0.1.0.exe”。

当您在Selenium中创建ChromeDriver并包含-remote-debugging-port = 0 参数时,或者根本不包含此参数时,chromedriver将发送-在命令行中将remote-debugging-port = 0 转到电子应用程序(即,角度电子0.1.0.exe)。如果您的电子应用程序将此参数传递给运行在其中的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时,它们都会创建一个。为了确保您访问正确的文件夹,最好在运行之前先在chromedriver中使用-user-data-dir 参数自行设置此目录名称。进入该文件夹并创建一个名为 DevToolsActivePort 的新文件,并在第一行中输入端口号,然后按Enter(换行),然后在第二行中输入任意数字。保存文件并关闭。如果您在60秒内手动完成了整个过程,正在运行的chromedriver将读取该文件,获取Chrome的devtools的端口,连接到该文件并继续。

我已经开发了一个AutoIT脚本,该脚本可以自动完成上述过程,并且每次都将其包含在自己的自动化运行中。

希望这会有所帮助。

答案 1 :(得分:0)

此错误消息...

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

...表示 ChromeDriver 无法启动/产生新的 WebBrowser ,即 Chrome浏览器会话。

您的主要问题是所使用的二进制版本之间的不兼容性

  • 可能您正在使用最新的 chromedriver = 77.0
  • 可能您正在使用_chrome = 77.0 _
  • 您的 Selenium Client 版本是 2017-09-27T15:28:36.4Z 3.6.0 ,几乎是 2 岁。
  • 您的 JDK版本 11.0.2

因此 Selenium Client v3.6.0 ChromeDriver v77.0 Chrome浏览器v77.0 <之间显然存在不匹配/ p>


解决方案

确保:

  • 已升级到当前级别Version 3.141.59
  • ChromeDriver 已更新为当前的ChromeDriver v77.0级别。
  • Chrome 已更新为当前的 Chrome版本77.0 级别。 (根据ChromeDriver v77.0 release notes
  • 通过您的 IDE
  • 清理您的项目工作区重建您的项目,并且仅具有必需的依赖项。
  • 如果您的基本 Web客户端版本太旧,则将其卸载并安装最新版本的 Web客户端 GA。
  • 进行系统重启
  • 非root用户用户的身份执行@Test
  • 始终在driver.quit()方法内调用tearDown(){},以优雅地关闭和销毁 WebDriver Web Client 实例。
  

注意:根据Unable to import org.openqa.selenium.WebDriver using Selenium and Java 11,最好降级为 Java 8


Outro