【发布时间】:2018-07-06 13:26:52
【问题描述】:
我们一直在尝试并行运行量角器 e2e UI 测试 (maxInstance = 3)。 但是,我们已经开始看到以下错误(它不会立即发生,而是在执行过程中的某个时间点出现)并且很难理解它的来源:
*> [06:01:18] E/BlockingProxy - 从 selenium { stacktrace:
获得状态 13'java.lang.RuntimeException: java.net.BindException: 地址已经 正在使用:连接\r\n\tat org.openqa.selenium.remote.server.WebDriverServlet.lambda$handle$3(WebDriverServlet.java:252)\r\n\tat java.util.concurrent.Executors$RunnableAdapter.call(未知 源)\r\n\tat java.util.concurrent.FutureTask.run(未知 源)\r\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(未知 源)\r\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(未知 来源)\r\n\tat java.lang.Thread.run(未知来源)\r\n原因: java.net.BindException:地址已在使用中:connect\r\n\tat java.net.DualStackPlainSocketImpl.connect0(本机方法)\r\n\tat java.net.DualStackPlainSocketImpl.socketConnect(未知 源)\r\n\tat java.net.AbstractPlainSocketImpl.doConnect(未知 源)\r\n\tat java.net.AbstractPlainSocketImpl.connectToAddress(未知 来源)\r\n\tat java.net.AbstractPlainSocketImpl.connect(未知 来源)\r\n\tat java.net.PlainSocketImpl.connect(未知 来源)\r\n\tat java.net.SocksSocketImpl.connect(未知 源)\r\n\tat java.net.Socket.connect(未知源)\r\n\tat java.net.Socket.connect(未知来源)\r\n\tat sun.net.NetworkClient.doConnect(未知来源)\r\n\tat sun.net.www.http.HttpClient.openServer(未知来源)\r\n\tat sun.net.www.http.HttpClient.openServer(未知来源)\r\n\tat sun.net.www.http.HttpClient.(未知来源)\r\n\tat sun.net.www.http.HttpClient.New(未知来源)\r\n\tat sun.net.www.http.HttpClient.New(未知来源)\r\n\tat sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(未知 源)\r\n\tat sun.net.www.protocol.http.HttpURLConnection.plainConnect0(未知 源)\r\n\tat sun.net.www.protocol.http.HttpURLConnection.plainConnect(未知 源)\r\n\tat sun.net.www.protocol.http.HttpURLConnection.connect(未知 源)\r\n\tat sun.net.www.protocol.http.HttpURLConnection.getOutputStream0(未知 源)\r\n\tat sun.net.www.protocol.http.HttpURLConnection.getOutputStream(未知 源)\r\n\tat org.openqa.selenium.remote.server.Passthrough.handle(Passthrough.java:104)\r\n\tat org.openqa.selenium.remote.server.RemoteSession.execute(RemoteSession.java:127)\r\n\tat org.openqa.selenium.remote.server.WebDriverServlet.lambda$handle$3(WebDriverServlet.java:247)\r\n\t... 还有 5 个\r\n',15:57:32 [exec] [chrome ANY ANY #01-6] stackTrace: 15:57:32 [exec] [chrome ANY ANY #01-6] [ { 文件名: 'WebDriverServlet.java',15:57:32 [exec] [chrome ANY ANY #01-6]
methodName: 'lambda$handle$3', 15:57:32 [exec] [chrome ANY ANY01-6] 类名:'org.openqa.selenium.remote.server.WebDriverServlet',15:57:32
[exec] [chrome ANY ANY #01-6] lineNumber: 252 }, 15:57:32
[exec] [chrome ANY ANY #01-6] { 文件名:null,15:57:32
[exec] [chrome ANY ANY #01-6] methodName: 'call', 15:57:32
[exec] [chrome ANY ANY #01-6] 类名: 'java.util.concurrent.Executors$RunnableAdapter',15:57:32 [执行] [chrome ANY ANY #01-6] 行号:-1 },15:57:32 [执行] [chrome ANY ANY #01-6] { 文件名:null,15:57:32 [exec] [chrome ANY ANY #01-6] methodName: 'run', 15:57:32 [exec] [chrome ANY ANY #01-6] 类名: 'java.util.concurrent.FutureTask',15:57:32 [exec] [chrome ANY ANY #01-6] lineNumber: -1 }, 15:57:32 [exec] [chrome ANY ANY #01-6] { fileName: null, 15:57:32 [exec] [chrome ANY ANY01-6] methodName: 'runWorker', 15:57:32 [exec] [chrome ANY ANY #01-6] className:
'java.util.concurrent.ThreadPoolExecutor',15:57:32 [执行] [chrome ANY ANY #01-6] 行号:-1 },15:57:32 [执行] [chrome ANY ANY #01-6] { 文件名:null,15:57:32 [exec] [chrome ANY ANY #01-6] methodName: 'run', 15:57:32 [exec] [chrome ANY ANY #01-6] 类名: 'java.util.concurrent.ThreadPoolExecutor$Worker',15:57:32 [执行] [chrome ANY ANY #01-6] 行号:-1 },15:57:32 [执行] [chrome ANY ANY #01-6] { 文件名:null,15:57:32 [exec] [chrome ANY ANY #01-6] methodName: 'run', 15:57:32 [exec] [chrome ANY ANY #01-6] 类名:'java.lang.Thread',15:57:32 [exec] [chrome ANY ANY #01-6] 行号:-1 } ],15:57:32
[exec] [chrome ANY ANY #01-6] 消息:'java.net.BindException: 地址已在使用中:connect',15:57:32 [exec] [chrome ANY ANY01-6] 错误:“未知错误”}*
有没有人看到这个错误,可能是什么原因?
干杯, 露西
【问题讨论】:
-
所有实例都使用相同的 chromedriver 端口吗?这可能是问题
-
@CoreyGoldbeeg,不太清楚你的意思。 Selenium 在端口 4444 启动,我想浏览器实例绑定到不同的客户端端口,但我真的不知道如何检查以及是否有量角器的设置。
-
经过一番挖掘,我看到 chrome 实例是在不同的端口上启动的。日志:16:34:05 [exec] 在端口 44350 16:34:05 [exec] 上启动 ChromeDriver 2.38.552522 (437e6fbedfa8762dec75e2c5b3ddb86763dc9dcb) 16:34:05 [exec] 只允许本地连接。 16:34:05 [exec] 在端口 19547 上启动 ChromeDriver 2.38.552522 (437e6fbedfa8762dec75e2c5b3ddb86763dc9dcb) 16:34:05 [exec] 只允许本地连接。 16:34:05 [exec] 在端口 10982 上启动 ChromeDriver 2.38.552522 (437e6fbedfa8762dec75e2c5b3ddb86763dc9dcb)
-
您的客户端代码在端口 4444 上与 selenium 服务器通信......然后 selenium 在端口 9515 上与 Chromedriver 通信。Chromedriver 在运行时阻塞......所以您的测试执行基本上是序列化的。您可以使用 ChromeDriverService 来管理 chromedriver。
-
是的,但这不应该是预期的行为。这是我发现的 - bugs.chromium.org/p/chromedriver/issues/detail?id=2152#c9。如果可以解决这个问题有什么想法,例如可以强制 chromedriver 按顺序处理请求吗?
标签: selenium protractor