BrowserStackLocal:从源代码运行BrowserStackLocal二进制文件

时间:2017-02-21 22:20:55

标签: java selenium cmd windows-10 browserstack

我正在尝试使用Selenium从Java 7运行BrowserStackLocal的实例。我使用的是Windows 10。

我知道如果你在Java中使用BrowserStackLocal,你需要在cmd.exe中运行以下代码行并打开它:

BrowserStackLocal.exe --key <pass_key>

但我不想在外部执行它,而是希望能够从代码中打开命令行。

我也在不同的机器上运行BrowserStack代码,所以我希望能够相对调用上面的命令(而不是使用绝对路径)。

所以我正在运行此代码((browserStackLocalPath)是BrowserStackLocal可执行对象的名称,(key)是密钥):

// 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);

...这只会导致WebDriverException:

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)

关于可能遗漏的任何想法?

1 个答案:

答案 0 :(得分:0)

该错误表示在建立本地测试连接之前已启动测试。成功建立连接需要几秒钟(5-10)。我建议你在运行执行命令后添加10秒的睡眠(Thread.sleep(10000);)。

或者,您可以尝试使用BrowserStackLocal的Java绑定 - https://github.com/browserstack/browserstack-local-java。这有助于以编程方式管理Local Testing二进制文件。