Ich verwende SoapUI Pro 5.1.2 unter Win7 x32 und versuche in Groovy TestStep eine Verbindung zum Selenium Webdriver herzustellen.
Zu diesem Zweck habe ich Selenium-standalone-server.jar
v2.45.0 im Ordner $SOAP_HOME$\bin\ext
hinzugefügt.
Mein 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()
Wenn ich versuche, diesen Schritt auszuführen, gibt SoapUI die folgende Meldung zurück:
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
Ich habe versucht, diesen Code über das Netbeans IDE auszuführen, nachdem ich dasselbe Selenium-standalone-server.jar
-Paket zu einem leeren Java-Projekt hinzugefügt habe. Und es ist ohne Probleme abgeschlossen!
Dies ist ein Fehlerprotokoll von 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
Ich habe auch FirefoxDriver()
anstelle von ChromeDriver()
ausprobiert und den gleichen Fehler erhalten.
Ich bin auf den gleichen Fehler gestoßen:
org.openqa.Selenium.remote.UnreachableBrowserException: Eine neue Sitzung konnte nicht gestartet werden. Mögliche Ursachen sind eine ungültige Adresse des Remote-Servers oder ein Fehler beim Start des Browsers.
aber chromedriver.exe
begann gut. Ich kann es im Taskmanager sehen.
Meine Umgebung ist wie folgt:
Nach vielen Versuchen, die in Google-Ergebnissen vorgeschlagen wurden, besteht meine letzte Lösung darin, 127.0.0.1 localhost
zu C:\Windows\System32\drivers\etc\hosts
hinzuzufügen.
Hoffe, dir zu helfen!
Laden Sie den neuesten Treiber (Chrome oder IE) von seleniumhq.org herunter und verwenden Sie den folgenden Code
System.setProperty("webdriver.chrome.driver","<YourPath>chromedriver.exe");
WebDriver driver=new ChromeDriver();
driver.get("http://www.yahoo.com");
Das hat bei mir funktioniert.
In Selenium diese Fehlermeldung:
org.openqa.Selenium.remote.UnreachableBrowserException: Konnte nicht eine neue Sitzung beginnen Mögliche Ursachen sind eine ungültige Adresse der entfernten Server- oder Browser-Startfehler.
Könnte viele Ursachen haben. Bei der Betrachtung des Stacktraces handelt es sich jedoch um eine 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)
Das Problem ist, dass Sie Selenium in SOAPUI verwenden. SOAPUI scheint den Standard-Proxy auf null
(ProxySelector.setDefault(null)
) zu setzen. Wenn also Selenium den Standard-Proxy erhält und eine Methode aufruft, wird eine NullPointerException
ausgelöst.
Das Problem ist, dass Sie Ihren Code in SOAPUI ausführen, sodass Sie den Standardproxy nicht abrufen können, bevor SOAPUI den Wert null festgelegt hat. Eine mögliche Problemumgehung ist in Ihrem großen Testschritt. Versuchen Sie, eine ProxySelector
zu erstellen, bevor Sie WebDriver
ausführen :
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 diesem Beispiel erweitere ich die abstrakte Klasse ProxySelector
auf groovige Weise, um mindestens einen direkten Proxy festzulegen. Wenn nötig, können Sie auch die Klasse Proxy
verwenden, um einen direkten Proxy zu konfigurieren und ihn in der Liste festzulegen. Mit diesem Code versuche ich jedoch, die Variable NPE
aufgrund von SOAPUI ProxySelector.setDefault(null)
zu vermeiden.
Dies könnte ein Kompatibilitätsproblem zwischen der von Ihnen verwendeten Version 'Selenium', 'Chrome-Browser' und 'Chrome-Treiber' sein.
Wenn Sie Selenium 2.53 (wie ich) verwenden, sollte der Chrome-Treiber 2.25 für Sie funktionieren.
Sie können es hier herunterladen - https://chromedriver.storage.googleapis.com/index.html?path=2.25/
Es hat dir schon gesagt, was passiert ist:
//got 'C:**\\**Windows\system32\chromedriver.exe'
Versuchen Sie, den Pfad auf eine der folgenden Arten zu definieren:
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'))
Ich würde auch nicht empfehlen, chromedriver.exe im system32-Ordner zu speichern, insbesondere wenn Sie keine Administratorrechte auf der Arbeitsstation haben. Verwenden Sie smt wie C: /WebDrivers/hromedriver.exe