Selenium UnreachableBrowserException - “Could not start a new session” in SoapUI Groovy TestStep

谁说胖子不能爱 提交于 2019-12-17 19:14:59

问题


I use SoapUI Pro 5.1.2 on Win7 x32, and try to connect to Selenium Webdriver in Groovy TestStep.

For this purpose I added selenium-standalone-server.jar v2.45.0 in $SOAP_HOME$\bin\ext folder.

My Groovy TestStep code:

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()

When I try to run this step, SoapUI returns message:

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

I tried to run this piece of code through the Netbeans IDE, after adding the same selenium-standalone-server.jar package to empty java project. And it has completed without problems!

This is error-log of 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

I also tried use FirefoxDriver() instead of ChromeDriver(), and got the same error.


回答1:


I have encountered the same error, which said:

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.

but chromedriver.exe started fine. I can see it in task manager.

My environment is as following,

  • windows 7, ultimate, 64 bit system
  • selenium-server-standalone-2.47.1
  • chromedriver 2.19
  • google chrome: 45.0

After many tries suggested in google results, my final solution is to add 127.0.0.1 localhost to C:\Windows\System32\drivers\etc\hosts.

Hope to help you!




回答2:


Download latest driver(chrome or IE) from seleniumhq.org, and use below code

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

This worked for me.




回答3:


In selenium this error message:

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.

Could have a lot of causes. However looking at the stacktrace in this case is due to a 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)

The problem is that you're using selenium inside SOAPUI. SOAPUI seems to set the default proxy to null (ProxySelector.setDefault(null)). So when selenium gets the default proxy an invoke a method on it, a NullPointerException is thrown.

The problem is that you executes your code inside SOAPUI so you can not get the default proxy before SOAPUI set it to null... then a possible workaround is in your Groovy testStep try to create a ProxySelector an set it as default before WebDriver is executed:

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()

In this example I extend the ProxySelector abstract class in a groovy way, to set at least one direct proxy. If its necessary it's also possible to use the Proxy class to configure a no direct proxy and set it in the list, but with this code I'm trying to avoid the NPE due to SOAPUI ProxySelector.setDefault(null).




回答4:


It already told you what happened:

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

Try to define path using one of the next ways:

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'))

Also, I would not recommend you to store chromedriver.exe in system32 folder, especially if you don't have admin rights on the workstation. Use smt like C:/WebDrivers/hromedriver.exe




回答5:


This could be a compatibility issue between the 'selenium', 'chrome browser version' and 'chrome driver' version that you are using.

It you are using Selenium 2.53 (like me), then using chrome driver 2.25 should work for you.

You can download it from here - https://chromedriver.storage.googleapis.com/index.html?path=2.25/




回答6:


I encountered the same issue and upgrading to the latest chrome driver fixed my issue.

You can download the latest chrome driver from following URL.

http://chromedriver.storage.googleapis.com/index.html

It is best to use always the latest version. After downloading, set the path of chrome driver in System.setProperty("webdriver.chrome.driver","{Your path Chrome Driver}");

    System.out.println("Creating Chrome Driver");
 // Set Chrome Driver
    System.setProperty("webdriver.chrome.driver", "D:\\chromedriver.exe");

    WebDriver driver = new ChromeDriver();
    driver.get("{Your URL}");


来源:https://stackoverflow.com/questions/30397043/selenium-unreachablebrowserexception-could-not-start-a-new-session-in-soapui

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!