web-dev-qa-db-fra.com

Selenium UnreachableBrowserException - "Impossible de démarrer une nouvelle session" dans SoapUI Groovy TestStep

J'utilise SoapUI Pro 5.1.2 sur Win7 x32 et essaie de me connecter à Selenium Webdriver dans Groovy TestStep.

À cette fin, j'ai ajouté Selenium-standalone-server.jar v2.45.0 dans le dossier $SOAP_HOME$\bin\ext.

Mon code Groovy TestStep:

import org.openqa.Selenium.WebDriver
import org.openqa.Selenium.chrome.ChromeDriver

System.setProperty('webdriver.chrome.driver', 'C:\\\\Windows\\system32\\chromedriver.exe')
log.info(System.getProperty('webdriver.chrome.driver')) //got 'C:\\Windows\system32\chromedriver.exe'

WebDriver driver = new ChromeDriver() // this line causes error

driver.get('http://google.com')
driver.quit()

Lorsque j'essaie d'exécuter cette étape, SoapUI renvoie le message suivant:

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. 
Build info: 
    version: '2.45.0', 
    revision: '5017cb8', 
    time: '2015-02-26 23:59:50' 
System info: 
    Host: 'SmithPC', 
    ip: '10.0.2.15', 
    os.name: 'Windows 7', 
    os.Arch: 'x86', 
    os.version: '6.1', 
    Java.version: '1.8.0_45' 
Driver info: 
    driver.version: ChromeDriver 
error at line: 7

J'ai essayé d'exécuter ce morceau de code via Netbeans IDE, après avoir ajouté le même package Selenium-standalone-server.jar pour vider le projet Java. Et c'est terminé sans problèmes!

C'est le journal des erreurs de soapUI:

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.
Build info: version: '2.45.0', revision: '5017cb8', time: '2015-02-26 23:59:50'
System info: Host: 'SmithPC', ip: '10.0.2.15', os.name: 'Windows 7', os.Arch: 'x86', os.version: '6.1', Java.version: '1.8.0_45'
Driver info: driver.version: ChromeDriver
    at org.openqa.Selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.Java:593)
    at org.openqa.Selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.Java:240)
    at org.openqa.Selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.Java:126)
    at org.openqa.Selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.Java:139)
    at org.openqa.Selenium.chrome.ChromeDriver.<init>(ChromeDriver.Java:171)
    at org.openqa.Selenium.chrome.ChromeDriver.<init>(ChromeDriver.Java:160)
    at org.openqa.Selenium.chrome.ChromeDriver.<init>(ChromeDriver.Java:117)
    at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at Sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.Java:62)
    at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.Java:45)
    at Java.lang.reflect.Constructor.newInstance(Constructor.Java:422)
    at org.codehaus.groovy.reflection.CachedConstructor.invoke(CachedConstructor.Java:77)
    at org.codehaus.groovy.runtime.callsite.ConstructorSite$ConstructorSiteNoUnwrapNoCoerce.callConstructor(ConstructorSite.Java:102)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallConstructor(CallSiteArray.Java:57)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.Java:182)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.Java:186)
    at Script3.run(Script3.groovy:7)
    at com.eviware.soapui.support.scripting.groovy.SoapUIGroovyScriptEngine.run(SoapUIGroovyScriptEngine.Java:92)
    at com.eviware.soapui.support.scripting.groovy.SoapUIProGroovyScriptEngineFactory$SoapUIProGroovyScriptEngine.run(SourceFile:79)
    at com.eviware.soapui.impl.wsdl.teststeps.WsdlGroovyScriptTestStep.run(WsdlGroovyScriptTestStep.Java:138)
    at com.eviware.soapui.impl.wsdl.panels.teststeps.GroovyScriptStepDesktopPanel$RunAction$1.run(GroovyScriptStepDesktopPanel.Java:250)
    at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1142)
    at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:617)
    at Java.lang.Thread.run(Thread.Java:745)
Caused by: Java.lang.NullPointerException
    at org.Apache.http.impl.conn.SystemDefaultRoutePlanner.determineProxy(SystemDefaultRoutePlanner.Java:79)
    at org.Apache.http.impl.conn.DefaultRoutePlanner.determineRoute(DefaultRoutePlanner.Java:77)
    at org.Apache.http.impl.client.InternalHttpClient.determineRoute(InternalHttpClient.Java:124)
    at org.Apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.Java:183)
    at org.Apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.Java:71)
    at org.Apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.Java:55)
    at org.openqa.Selenium.remote.internal.ApacheHttpClient.fallBackExecute(ApacheHttpClient.Java:126)
    at org.openqa.Selenium.remote.internal.ApacheHttpClient.execute(ApacheHttpClient.Java:72)
    at org.openqa.Selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.Java:133)
    at org.openqa.Selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.Java:66)
    at org.openqa.Selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.Java:572)
    ... 23 more

J'ai aussi essayé d'utiliser FirefoxDriver() au lieu de ChromeDriver() et j'ai eu la même erreur.

12
Maxim Romanyuk

J'ai rencontré la même erreur, qui disait:

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

mais chromedriver.exe a bien commencé. Je peux le voir dans le gestionnaire de tâches.

Mon environnement est comme suit, 

  • windows 7, ultime, système 64 bits
  • Selenium-server-standalone-2.47.1
  • chromedriver 2.19
  • google chrome: 45.0

Après de nombreux essais suggérés dans les résultats de Google, ma solution finale consiste à ajouter 127.0.0.1 localhost à C:\Windows\System32\drivers\etc\hosts.

J'espère vous aider!

12
xjfengck

Téléchargez le dernier pilote (chrome ou IE) de seleniumhq.org et utilisez le code ci-dessous.

    System.setProperty("webdriver.chrome.driver","<YourPath>chromedriver.exe");
    WebDriver driver=new ChromeDriver();
    driver.get("http://www.yahoo.com");

Cela a fonctionné pour moi.

5
Yash Jagdale

En Selenium ce message d'erreur:

org.openqa.Selenium.remote.UnreachableBrowserException: Impossible démarrer une nouvelle session. Les causes possibles sont l'adresse invalide de la télécommande échec de démarrage du serveur ou du navigateur.

Pourrait avoir beaucoup de causes. Cependant, regarder la pile dans ce cas est dû à un NullPointerException:

Caused by: Java.lang.NullPointerException
    at org.Apache.http.impl.conn.SystemDefaultRoutePlanner.determineProxy(SystemDefaultRoutePlanner.Java:79)
    at org.Apache.http.impl.conn.DefaultRoutePlanner.determineRoute(DefaultRoutePlanner.Java:77)
    at org.Apache.http.impl.client.InternalHttpClient.determineRoute(InternalHttpClient.Java:124)

Le problème est que vous utilisez Selenium dans SOAPUI. SOAPUI semble définir le proxy par défaut sur null (ProxySelector.setDefault(null)). Ainsi, lorsque Selenium obtient le proxy par défaut et invoque une méthode dessus, un NullPointerException est levé.

Le problème est que vous exécutez votre code dans SOAPUI afin que vous ne puissiez pas obtenir le proxy par défaut avant que SOAPUI ne le définisse à null ... alors une solution de contournement est dans votre test Groovy. Essayez de créer un ProxySelector et le définissez comme valeur par défaut avant que WebDriver soit exécuté :

import org.openqa.Selenium.WebDriver
import org.openqa.Selenium.chrome.ChromeDriver
import Java.net.Proxy
import Java.net.ProxySelector

def selectDirectProxy(URI uri) {
  final List<Proxy> proxy = new ArrayList<Proxy>()
  proxy.add(Proxy.NO_PROXY)
  return proxy
}

// create a ProxySelector
ProxySelector proxySelector = [ select : { uri->selectDirectProxy(uri) } ] as ProxySelector
// set as default to avoid null pointer
ProxySelector.setDefault(proxySelector);

// now it's safe to invoke WebDriver...
System.setProperty('webdriver.chrome.driver', 'C:\\\\Windows\\system32\\chromedriver.exe')
log.info(System.getProperty('webdriver.chrome.driver')) //got 'C:\\Windows\system32\chromedriver.exe'

WebDriver driver = new ChromeDriver()

Dans cet exemple, j'étend la classe abstraite ProxySelector de manière groovy, pour définir au moins un proxy direct. Si nécessaire, il est également possible d'utiliser la classe Proxy pour configurer un proxy direct et le définir dans la liste, mais avec ce code, j'essaie d'éviter le NPE en raison de SOAPUI ProxySelector.setDefault(null).

2
albciff

Cela pourrait être un problème de compatibilité entre les versions "Selenium", "version de navigateur chrome" et "pilote chromé" que vous utilisez. 

Si vous utilisez Selenium 2.53 (comme moi), alors l’utilisation du pilote chromé 2.25 devrait fonctionner pour vous.

Vous pouvez le télécharger ici - https://chromedriver.storage.googleapis.com/index.html?path=2.25/

0
Santosh Pillai

Il vous a déjà dit ce qui s'est passé:

//got 'C:**\\**Windows\system32\chromedriver.exe'

Essayez de définir le chemin en utilisant l’une des méthodes suivantes:

System.setProperty('webdriver.chrome.driver','C:\\Windows\\system32\\chromedriver.exe')
log.info(System.getProperty('webdriver.chrome.driver'))

OR

System.setProperty('webdriver.chrome.driver','C:/Windows/system32/chromedriver.exe')
log.info(System.getProperty('webdriver.chrome.driver'))

En outre, je ne vous recommanderais pas de stocker chromedriver.exe dans le dossier system32, en particulier si vous ne disposez pas des droits d'administrateur sur le poste de travail. Utilisez smt comme C: /WebDrivers/hromedriver.exe

0
Ivan Litskevich