Java 中的偶尔 EACCES 错误 运行 selenium 测试

Occassional EACCES error running selenium tests in ava

在 Windows 10 1809 上抛出以下错误。我正在使用 chrome 进行测试。

错误信息 1

频率:大约每 50 个驱动程序实例化一次。

  [...]project\node_modules\selenium-webdriver\net\portprober.js:159

  Rejected promise returned by test. Reason:

  Error {
    address: '0.0.0.0',
    code: 'EACCES',
    errno: 'EACCES',
    port: 49945,
    syscall: 'listen',
    message: 'listen EACCES 0.0.0.0:49945',
  }

  Promise (node_modules/selenium-webdriver/net/portprober.js:159:12)
  isFree (node_modules/selenium-webdriver/net/portprober.js:150:10)
  Object.findFreePort (node_modules/selenium-webdriver/net/portprober.js:176:15)

端口号各不相同:49945、56348...

错误信息 2

频率:大约每第 100 到第 200 个驱动程序实例化一次。

  [...]project\node_modules\selenium-webdriver\http\index.js:244

  Rejected promise returned by test. Reason:

  Error {
    message: 'EADDRINUSE connect EADDRINUSE 127.0.0.1:51078',
  }

如何消除这些偶发错误?

错误信息1的解决方法

似乎是 issue in selenium webdriver

错误信息2的解决方法

使用以下 powershell 脚本调整 TCP 堆栈设置并重新启动系统。

Get-Item 'HKLM:\System\CurrentControlSet\Services\Tcpip\Parameters' | New-ItemProperty -Name MaxUserPort -Value 65534 -Force | Out-Null
Get-Item 'HKLM:\System\CurrentControlSet\Services\Tcpip\Parameters' | New-ItemProperty -Name TcpTimedWaitDelay -Value 30 -Force | Out-Null
Get-Item 'HKLM:\System\CurrentControlSet\Services\Tcpip\Parameters' | New-ItemProperty -Name TcpNumConnections -Value 16777214 -Force | Out-Null
Get-Item 'HKLM:\System\CurrentControlSet\Services\Tcpip\Parameters' | New-ItemProperty -Name TcpMaxDataRetransmissions -Value 5 -Force | Out-Null

Source for the TCP stack settings