selenium - 显示错误-未知错误: DevToolsActivePort file doesn't exist - it's electron application (I am using windows OS))

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

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

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

最佳答案

我一直遇到错误 DevToolsActivePort文件,但我自己不存在,在我的情况下,该错误是正确的,根本原因是 Electron 应用程序本身。
由于Chrome的v2.39网络驱动程序(chromedriver.exe)默认情况下会查找名为的文件DevToolsActivePort ,并在找到文件后读取该文件,以获取当前在chrome中运行的devtools的端口号(在您的情况下,Chrome实例 Electron 应用程序“angular-electron 0.1.0.exe”正在运行)。
当您在Selenium中创建ChromeDriver并在其中包含 --remote-debugging-port = 0 参数时,或者根本不包含此参数时,chromedriver将在其中发送 --remote-debugging-port = 0 Electron 应用程序的命令行(即,角 Electron 0.1.0.exe)。如果您的 Electron 应用程序将此参数传递给运行在其中的Chrome应用程序,则将创建 DevToolsActivePort 文件,chromedriver可以读取该文件并获取devtools的端口,并且自动化成功。但是,如果您的 Electron 应用程序未将此参数传递给Chrome,则永远不会创建 DevToolsActivePort 文件,并且您的chromedriver超时寻找它并失败。
您有几种解决方案的选择:

  • 让 Electron 应用程序的开发人员确保将“--remote-debugging-port”参数传递给Chrome。
  • 自动创建自己的解决方案,以创建“DevToolsActivePort”文件。

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

    关于selenium - 显示错误-未知错误: DevToolsActivePort file doesn't exist - it's electron application (I am using windows OS)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58500512/

    相关文章:

    javascript - 如何使用 Protractor 定位器定位子元素?

    javascript - 使用 Chrome 扩展更改 navigator.userAgent

    google-chrome - 我们可以为 webrtc 视频设置的最低分辨率是多少?

    modal-dialog - 如何创建模态窗口并从渲染过程加载 HTML?

    node.js - Electron:获取上传文件的完整路径

    python-3.x - 具有代理设置的 Selenium 抛出 UnexpectedAlertPresentException

    python - Selenium:Python 无法从 elif 中找到元素

    java - Maven cargo 和 Selenium

    html - 如何更改 Google Chrome 中 <option> 元素的背景颜色?

    node.js - Windows Action Center中未触发notifier.on click事件