2017-02-21 5 views
1

Ich versuche, eine Instanz von BrowserStackLocal aus Java 7 mit Selenium auszuführen. Ich verwende Windows 10.BrowserStackLocal: Ausführen von BrowserStackLocal-Binärcode aus Quellcode

Ich bin mir bewusst, dass, wenn Sie BrowserStackLocal in Java verwenden, müssen Sie die folgende Codezeile in der cmd.exe laufen und haben es öffnen:

BrowserStackLocal.exe --key <pass_key> 

Aber statt Wenn ich es extern ausführe, möchte ich die Befehlszeile aus dem Code öffnen können.

Ich führe auch den BrowserStack-Code auf unterschiedlichen Maschinen, so dass ich den obigen Befehl relativ aufrufen kann (und keinen absoluten Pfad verwenden).

So bin ich diesen Code ausgeführt wird ((browserStackLocalPath) ist der Name des BrowserStackLocal ausführbaren Objekts und (keys) ist die Pass-Taste):

// Initializing desired capabilities. 
DesiredCapabilities caps = new DesiredCapabilities(); 
caps.setCapability("browserstack.local", "true"); 
caps.setCapability("browser", "Chrome"); 
caps.setCapability("browser_version", "50.0"); 
caps.setCapability("os", "Windows"); 
caps.setCapability("os_version", "7"); 

// Initializing command line parameters... 
CommandLine cmdLine = new CommandLine("cmd.exe"); 
cmdLine.addArgument(browserStackLocalPath); 
cmdLine.addArgument("--key"); 
cmdLine.addArgument(key); 

DefaultExecutor executor = new DefaultExecutor(); 
exitValue = executor.execute(cmdLine); 

RemoteWebDriver webDriver = new RemoteWebDriver(new 
    URL(browserStackURL), caps); 

... und dies hat lediglich in einem WebDriverException resultiert :

org.openqa.selenium.WebDriverException: [browserstack.local] is set to true but local testing through BrowserStack is not connected. (WARNING: The server did not provide any stacktrace information) 
Command duration or timeout: 870 milliseconds 
Build info: version: 'unknown', revision: 'unknown', time: 'unknown' 
System info: host: 'rchen-PC', ip: '192.168.11.105', os.name: 'Windows 8.1', os.arch: 'amd64', os.version: '6.3', java.version: '1.7.0_80' 
Driver info: org.openqa.selenium.remote.RemoteWebDriver 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526) 
    at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:206) 
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:158) 
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:678) 
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:249) 
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:131) 
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:158) 

Irgendwelche Ideen auf, was möglicherweise fehlt?

Antwort

1

Der Fehler zeigt an, dass der Test initiiert wurde, bevor die Verbindung zum lokalen Test hergestellt werden konnte. Es dauert ein paar Sekunden (5-10), um die Verbindung erfolgreich herzustellen. Ich schlage vor, Sie fügen einen Schlaf von 10 Sekunden (Thread.sleep (10000);) nach dem Ausführen des Befehls Ausführen.

Alternativ können Sie die Java-Bindings für BrowserStackLocal hier ausprobieren - https://github.com/browserstack/browserstack-local-java. Dies hilft, das Programm "Local Testing" programmatisch zu verwalten.