2015-05-22 27 views
12

Używam SoapUI Pro 5.1.2 na Win7 x32 i próbuję połączyć się z Selenium Webdriver w Groovy TestStep.Selenium UnreachableBrowserException - "Nie można uruchomić nowej sesji" w SoapUI Groovy TestStep

W tym celu dodałem folder selenium-standalone-server.jar v2.45.0 w katalogu $SOAP_HOME$\bin\ext. Kod

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

Kiedy próbuję uruchomić ten krok, SoapUI zwraca komunikat:

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 

Próbowałem uruchomić ten kawałek kodu przez NetBeans IDE, po dodaniu tego samego pakietu selenium-standalone-server.jar do pustego projektu Java. I zakończyło się bez problemów!

Jest to błąd-log 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 

Próbowałem również wykorzystanie FirefoxDriver() zamiast ChromeDriver() i dostał ten sam błąd.

Jestem na skraju rozpaczy, proszę o pomoc!

+0

Wygląda 'chromedriver.exe' zaczyna normally- przynajmniej SoapUI dziennik w terminalu pokazuje komunikat' Uruchamianie ChromeDriver 2.15.322448 (hashcode) na porcie 36240' tuż przed komunikatem o błędzie –

+0

Próbowałem uruchomić 'FirefoxDriver()' bez jakiejkolwiek wstępnej konfiguracji - najprostszy sposób uruchomienia przeglądarki - ale też generuje ten sam błąd –

+0

Mam ten sam błąd, moje rozwiązanie było starszą wersją Chrome – fab

Odpowiedz

0

To już powiedział, co się stało:

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

spróbować zdefiniować ścieżkę za pomocą jednego z kolejnych sposobów:

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

LUB

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

Również nie będę zalecamy przechowywanie chromeedriver.exe w folderze system32, szczególnie jeśli nie masz admi n prawa na stacji roboczej. Użyj SMT jak C: /WebDrivers/hromedriver.exe

+0

To nie jest ścieżka wykonywalna ChromeDriver jest niepoprawna, ponieważ ta funkcja wyrzuca 'IllegalStateException':" Plik wykonywalny sterownika nie istnieje ". Próbowałem zmienić katalog sterownika, umieszczając nową kopię 'chromeedriver.exe' w' C: \ drivers', ale to nie jest pomoc - pojawia się ten sam błąd. –

3

Pobierz najnowszy sterownik (Chrome lub IE) z seleniumhq.org i skorzystać z poniższego kodu

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

Ten pracował dla mnie.

+0

aktualizacja chromedriver pomógł mi. –

12

jakie napotkał ten sam błąd, który powiedział:

org.openqa.selenium.remote.UnreachableBrowserException: Nie można uruchomić nową sesję. Możliwe przyczyny to niepoprawny adres serwera zdalnego lub błąd uruchomienia przeglądarki.

ale chromedriver.exe zaczęło się dobrze. Widzę to w menedżerze zadań.

My środowisko jest następujący,

  • okna 7, ostateczny, 64 bitowego układu
  • selen serwera samodzielny-2.47.1
  • chromedriver 2.19
  • google chrome: 45,0

Po wielu próbach sugerowane w wynikach Google, moja ostateczna rozwiązaniem jest dodanie 127.0.0.1 localhost do C:\Windows\System32\drivers\etc\hosts.

Mam nadzieję, że Ci pomogę!

+1

Może również stanowić problem, jeśli masz fałszywy wpis localhost. W skrócie, wygląda na to, selen tylko lubi 127.0.0.1 localhost jako twój wpis localhost. – PeterS

2

w selen ten komunikat o błędzie:

org.openqa.selenium.remote.UnreachableBrowserException: Nie można rozpocząć nową sesję. Możliwe przyczyny to niepoprawny adres zdalnego serwera lub przeglądarki.

Może mieć wiele przyczyn. Jednak patrząc na stacktrace w tym przypadku wynika z 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) 

Problem polega na tym, że używasz selenu wewnątrz SoapUI. Wygląda na to, że SOAPUI ustawia domyślne proxy na null (ProxySelector.setDefault(null)). Kiedy selen dostaje domyślny serwer proxy i wywołuje metodę, generowany jest kod NullPointerException.

Problem polega na tym, że kod jest wykonywany wewnątrz SOAPUI, więc nie można uzyskać domyślnego serwera proxy, zanim SOAPUI ustawi go na wartość null ... wtedy możliwe obejście znajduje się w testach Groovy. Spróbuj utworzyć ProxySelector ustaw jako domyślny przed WebDriver jest wykonywany:

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

w tym przykładzie przedłużyć ProxySelector klasy abstrakcyjnej w groovy sposób, aby ustawić co najmniej jeden bezpośredni proxy. Jeśli jest to konieczne, można również użyć klasy Proxy, aby skonfigurować bezpośredni serwer proxy i ustawić go na liście, ale z tym kodem próbuję uniknąć NPE z powodu SOAPUI ProxySelector.setDefault(null).