2 votes

UnreachableBrowserException : Impossible de démarrer une nouvelle session. Les causes possibles sont une adresse invalide du serveur distant ou un échec du démarrage du navigateur.

Lors de l'exécution dynamique de ma suite sur la grille à l'aide de docker-compose, j'obtiens la trace d'exception suivante :

org.openqa.selenium.remote.UnreachableBrowserException: Could not start a new session. Possible causes are invalid address of the remote server or browser start-up failure.
03:52:47 Build info: version: 'unknown', revision: 'unknown', time: 'unknown'
03:52:47 System info: host: 'ip-10-33-0-63', ip: '10.33.0.63', os.name: 'Linux', os.arch: 'amd64', os.version: '4.4.0-1069-aws', java.version: '1.8.0_151'
03:52:47 Driver info: driver.version: RemoteWebDriver
03:52:47    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:573)
03:52:47    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:213)
03:52:47    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:131)
03:52:47    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:144)
03:52:47    at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
03:52:47    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
03:52:47    at java.lang.reflect.Method.invoke(Method.java:498)
03:52:47    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:131)
03:52:47    at org.testng.internal.MethodInvocationHelper.invokeMethodConsideringTimeout(MethodInvocationHelper.java:61)
03:52:47    at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:511)
03:52:47    at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:241)
03:52:47    at org.testng.internal.Invoker.invokeMethod(Invoker.java:581)
03:52:47    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:792)
03:52:47    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1103)
03:52:47    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:140)
03:52:47    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:122)
03:52:47    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
03:52:47    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
03:52:47    at java.lang.Thread.run(Thread.java:748)
03:52:47 Caused by: java.net.ConnectException: Failed to connect to /10.33.0.220:4444
03:52:47    at okhttp3.internal.connection.RealConnection.connectSocket(RealConnection.java:247)
03:52:47    at okhttp3.internal.connection.RealConnection.connect(RealConnection.java:165)
03:52:47    at okhttp3.internal.connection.StreamAllocation.findConnection(StreamAllocation.java:257)
03:52:47    at okhttp3.internal.connection.StreamAllocation.findHealthyConnection(StreamAllocation.java:135)
03:52:47    at okhttp3.internal.connection.StreamAllocation.newStream(StreamAllocation.java:114)
03:52:47    at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:42)
03:52:47    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
03:52:47    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
03:52:47    at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93)
03:52:47    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
03:52:47    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
03:52:47    at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
03:52:47    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
03:52:47    at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:126)
03:52:47    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
03:52:47    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
03:52:47    at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:200)
03:52:47    at okhttp3.RealCall.execute(RealCall.java:77)
03:52:47    at org.openqa.selenium.remote.internal.OkHttpClient.execute(OkHttpClient.java:103)
03:52:47    at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:105)
03:52:47    at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:74)
03:52:47    at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:136)
03:52:47    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552)
03:52:47 Caused by: java.net.ConnectException: Connection refused (Connection refused)
03:52:47    at java.net.PlainSocketImpl.socketConnect(Native Method)
03:52:47    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
03:52:47    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
03:52:47    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
03:52:47    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
03:52:47    at java.net.Socket.connect(Socket.java:589)
03:52:47    at okhttp3.internal.platform.Platform.connectSocket(Platform.java:129)
03:52:47    at okhttp3.internal.connection.RealConnection.connectSocket(RealConnection.java:245)

Cela se produit pendant l'exécution :

return (new RemoteWebDriver(new URL(url), new FirefoxOptions()));

Cela se produit également pour le chrome. J'ai récemment mis à jour le selenium à la dernière version, c'est-à-dire 3.141.59.

El docker-compose.yml est :

version: "3"
services:
  selenium-hub:
    image: selenium/hub:3.141.59-bismuth
    container_name: selenium-hub
    ports:
      - "4444:4444"
    environment:
      - GRID_BROWSER_TIMEOUT=30

  chrome:
    image: selenium/node-chrome:3.141.59-bismuth
    depends_on:
      - selenium-hub
    environment:
      - HUB_HOST=selenium-hub
      - HUB_PORT=4444

  firefox:
    image: selenium/node-firefox:3.141.59-bismuth
    depends_on:
      - selenium-hub
    environment:
      - HUB_HOST=selenium-hub
      - HUB_PORT=4444
    volumes:
      - "/dev/shm:/dev/shm"

Cela se produit aussi bien dans Jenkins que lorsque je l'exécute dans mon système à partir de cmd. Je ne suis pas sûr que le problème soit lié à Selenium ou aux réseaux. S'il existe d'autres liens vers une solution, veuillez les partager ici. Merci d'avance pour toute aide.

MISE À JOUR EDIT :

Démarrage :

1) Construire le projet (en utilisant maven-assembly-plugin) en mvn clean install -DskipTests=true

2) Démarrez la grille : sudo docker-compose up -d --scale chrome=5 --scale firefox=3

3) Exécuter l'exécutable jar.

4) Supprimer la grille : sudo docker-compose down

Mise à jour :

Ajout de la configuration du concentrateur :

Config for the hub :
browserTimeout : 30
debug : false
jettyMaxThreads : -1
host : 192.168.80.2
port : 4444
role : hub
timeout : 1800
cleanUpCycle : 5000
capabilityMatcher : org.openqa.grid.internal.utils.DefaultCapabilityMatcher
newSessionWaitTimeout : -1
throwOnCapabilityNotPresent : true
registry : org.openqa.grid.internal.DefaultGridRegistry

The final configuration comes from:
the default :
browserTimeout : 0
debug : false
host : 0.0.0.0
port : 4444
role : hub
timeout : 1800
cleanUpCycle : 5000
capabilityMatcher : org.openqa.grid.internal.utils.DefaultCapabilityMatcher
newSessionWaitTimeout : -1
throwOnCapabilityNotPresent : true
registry : org.openqa.grid.internal.DefaultGridRegistry
updated with command line options:
-role hub -hubConfig /opt/selenium/config.json
and configuration loaded from /opt/selenium/config.json:
{
"host": "0.0.0.0",
"port": 4444,
"role": "hub",
"maxSession": 5,
"newSessionWaitTimeout": -1,
"capabilityMatcher": "org.openqa.grid.internal.utils.DefaultCapabilityMatcher",
"throwOnCapabilityNotPresent": true,
"jettyMaxThreads": -1,
"cleanUpCycle": 5000,
"browserTimeout": 30,
"timeout": 1800,
"debug": false
}

Ajout de la configuration du nœud :

browserTimeout: 30
debug: false
jettyMaxThreads: -1
host: 192.168.80.6
port: 5555
role: node
timeout: 1800
cleanUpCycle: 5000
maxSession: 1
capabilities: Capabilities {applicationName: , browserName: chrome, maxInstances: 1, platform: LINUX, platformName: LINUX, seleniumProtocol: WebDriver, server:CONFIG_UUID: d949d886-61f4-4a3a-93f9-c2a..., version: 70.0.3538.110}
downPollingLimit: 2
hub: http://selenium-hub:4444/grid/register
id: http://192.168.80.6:5555
nodePolling: 5000
nodeStatusCheckTimeout: 5000
proxy: org.openqa.grid.selenium.proxy.DefaultRemoteProxy
register: true
registerCycle: 5000
remoteHost: http://192.168.80.6:5555
unregisterIfStillDownAfter: 60000

1voto

New contributor Points 31198

Ce message d'erreur...

org.openqa.selenium.remote.UnreachableBrowserException: Could not start a new session. Possible causes are invalid address of the remote server or browser start-up failure.
03:52:47 Build info: version: 'unknown', revision: 'unknown', time: 'unknown'
03:52:47 System info: host: 'ip-10-33-0-63', ip: '10.33.0.63', os.name: 'Linux', os.arch: 'amd64', os.version: '4.4.0-1069-aws', java.version: '1.8.0_151'
03:52:47 Driver info: driver.version: RemoteWebDriver

...implique que le WebDriver n'a pas pu initier/éclater une nouvelle RemoteWebDriver session.

Je ne vois pas de problèmes importants dans votre configuration ou dans la ligne de code. Cependant, votre principal problème semble être le incompatibilité entre la version des binaires que vous utilisez comme suit :

  • Su Version du JDK es 1.8.0_151 ce qui est assez ancien.

Solution

  • Mise à niveau JDK aux niveaux récents JDK 8u191 .
  • Prenez un Redémarrage du système .
  • Exécutez votre Test .

0voto

J'ai résolu le même problème en suivant le dernier commentaire de cet article. Le conteneur Docker ne peut pas atteindre le port 4444 de localhost. Mais pourquoi ?

Dans votre fichier docker-compose.yaml, sous services, où se trouve votre hub, quel est le nom du hub. Utilisez ce nom pour formuler l'url de remotewebdriver.

Je viens de remplacer 'localhost:4444/wd/hub' par 'seleniumhub:4444/wd/hub'.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X