测试运行期间硒铬连接被拒绝

Fab*_*ten 5 selenium selenium-chromedriver

有时,但并非总是如此,在运行端到端测试时,我们会遇到 ConnectRefused 异常。这只发生在 chrome 上,但不会发生在 firefox 上。对于我们来说,这种情况发生在测试期间,即测试正确运行一段时间后。

我们正在使用 docker 镜像selenium/standalone-chrome:3.141.59-vanadium。(由于另一个问题,我们降级了-zinc。)docker 镜像作为 docker-compose 的一部分运行,其中还包含我们的应用程序/数据库。

测试本身是使用 JUnit5 和 Selenium java 在 docker-compose 之外执行的org.seleniumhq.selenium:selenium-java:jar:3.141.59:compile

所有内容都使用 docker 执行器在 GitLab 运行器上运行。这意味着一切都围绕着另一个 docker 层,但这可能不相关。

实际的异常是

org.openqa.selenium.WebDriverException: java.net.ConnectException: Connection refused (Connection refused)
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
System info: host: 'runner-_f3Cf_kC-project-44-concurrent-0', ip: '172.17.0.3', os.name: 'Linux', os.arch: 'amd64', os.version: '4.9.0-8-amd64', java.version: '11.0.5'
Driver info: org.openqa.selenium.remote.RemoteWebDriver
Capabilities {acceptInsecureCerts: false, browserName: chrome, browserVersion: 77.0.3865.75, chrome: {chromedriverVersion: 77.0.3865.40 (f484704e052e0..., userDataDir: /tmp/.com.google.Chrome.5sVOki}, goog:chromeOptions: {debuggerAddress: localhost:37949}, javascriptEnabled: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: LINUX, platformName: LINUX, proxy: Proxy(), setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify, webdriver.remote.sessionid: 4591df261c617729ec95f592ed6...}
Session ID: 4591df261c617729ec95f592ed69756b
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
    at org.openqa.selenium.remote.http.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:187)
    at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:122)
    at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:49)
    at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:158)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552)
    at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:285)
    at org.openqa.selenium.remote.RemoteWebElement.getLocation(RemoteWebElement.java:337)
    [...]
Run Code Online (Sandbox Code Playgroud)

没有进一步的原因,它java.net.ConnectException是根据 RemoteWebDriver 从容器中的 selenium-standalone 进程接收到的响应进行解码的。我认为这意味着 selenium-standalone 无法访问 chrome 或 chrome-driver。

不幸的是,容器日志不包含任何有用的内容,特别是没有 ConnectException。增加日志级别以调试 selenium 和/或 chromedriver 不会产生任何更多信息。

理想情况下,我正在寻找解决此问题的解决方案,但任何为此采取的步骤都会受到赞赏。