xebia / Xebium

Xebium provides Selenium (webdriver) bindings for FitNesse, with Selenium-IDE support
http://xebia.github.com/Xebium/
Apache License 2.0
76 stars 62 forks source link

__EXCEPTION__:org.openqa.selenium.WebDriverException: Unknown command: setTimeout (WARNING: The server did not provide any stacktrace information) #137

Open sglebs opened 9 years ago

sglebs commented 9 years ago

If you run with safari, you will get this in startBroser:

EXCEPTION:org.openqa.selenium.WebDriverException: Unknown command: setTimeout (WARNING: The server did not provide any stacktrace information) Command duration or timeout: 1 milliseconds Build info: version: '2.43.1', revision: '5163bceef1bc36d43f3dc0b83c88998168a363a0', time: '2014-09-10 09:43:55' System info: host: 'Marcio-Marchinis-MacBook-Pro-Silver.local', ip: '172.23.70.56', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.9.5', java.version: '1.7.0_67' Session ID: null Driver info: org.openqa.selenium.safari.SafariDriver Capabilities [{platform=MAC, cssSelectorsEnabled=true, javascriptEnabled=true, secureSsl=true, browserName=safari, takesScreenshot=true, version=7.0.6}] at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) [rt.jar:1.7.0_67] at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) [rt.jar:1.7.0_67] at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) [rt.jar:1.7.0_67] at java.lang.reflect.Constructor.newInstance(Constructor.java:526) [rt.jar:1.7.0_67] at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:204) [selenium-remote-driver-2.43.1.jar] at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:156) [selenium-remote-driver-2.43.1.jar] at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:599) [selenium-remote-driver-2.43.1.jar] at org.openqa.selenium.remote.RemoteWebDriver$RemoteWebDriverOptions$RemoteTimeouts.pageLoadTimeout(RemoteWebDriver.java:782) [selenium-remote-driver-2.43.1.jar] at com.xebia.incubator.xebium.SeleniumDriverFixture.setTimeoutOnSelenium(SeleniumDriverFixture.java:262) [xebium-0.14-SNAPSHOT-mqm.jar] at com.xebia.incubator.xebium.SeleniumDriverFixture.startDriverOnUrl(SeleniumDriverFixture.java:153) [xebium-0.14-SNAPSHOT-mqm.jar] at com.xebia.incubator.xebium.SeleniumDriverFixture.startBrowserOnUrl(SeleniumDriverFixture.java:167) [xebium-0.14-SNAPSHOT-mqm.jar] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.7.0_67] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [rt.jar:1.7.0_67] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.7.0_67] at java.lang.reflect.Method.invoke(Method.java:606) [rt.jar:1.7.0_67] at fitnesse.slim.fixtureInteraction.DefaultInteraction.methodInvoke(DefaultInteraction.java:16) [fitnesse-standalone.jar] at fitnesse.slim.MethodExecutor.callMethod(MethodExecutor.java:43) [fitnesse-standalone.jar] at fitnesse.slim.MethodExecutor.invokeMethod(MethodExecutor.java:30) [fitnesse-standalone.jar] at fitnesse.slim.MethodExecutor.findAndInvoke(MethodExecutor.java:52) [fitnesse-standalone.jar] at fitnesse.slim.FixtureMethodExecutor.execute(FixtureMethodExecutor.java:20) [fitnesse-standalone.jar] at fitnesse.slim.StatementExecutor.getMethodExecutionResult(StatementExecutor.java:121) [fitnesse-standalone.jar] at fitnesse.slim.StatementExecutor.call(StatementExecutor.java:99) [fitnesse-standalone.jar] at fitnesse.slim.instructions.CallInstruction.executeInternal(CallInstruction.java:35) [fitnesse-standalone.jar] at fitnesse.slim.instructions.Instruction.execute(Instruction.java:30) [fitnesse-standalone.jar] at fitnesse.slim.ListExecutor$Executive.executeStatement(ListExecutor.java:50) [fitnesse-standalone.jar] at fitnesse.slim.ListExecutor$Executive.executeStatements(ListExecutor.java:44) [fitnesse-standalone.jar] at fitnesse.slim.ListExecutor.execute(ListExecutor.java:84) [fitnesse-standalone.jar] at fitnesse.slim.SlimServer.executeInstructions(SlimServer.java:107) [fitnesse-standalone.jar] at fitnesse.slim.SlimServer.processTheInstructions(SlimServer.java:94) [fitnesse-standalone.jar] at fitnesse.slim.SlimServer.processOneSetOfInstructions(SlimServer.java:68) [fitnesse-standalone.jar] at fitnesse.slim.SlimServer.tryProcessInstructions(SlimServer.java:54) [fitnesse-standalone.jar] at fitnesse.slim.SlimServer.serve(SlimServer.java:40) [fitnesse-standalone.jar] at fitnesse.slim.SlimService.handle(SlimService.java:164) [fitnesse-standalone.jar] at fitnesse.slim.SlimService.acceptOne(SlimService.java:172) [fitnesse-standalone.jar] at fitnesse.slim.SlimService.accept(SlimService.java:134) [fitnesse-standalone.jar] at fitnesse.slim.SlimService.startWithFactory(SlimService.java:65) [fitnesse-standalone.jar] at fitnesse.slim.SlimService.main(SlimService.java:51) [fitnesse-standalone.jar]

sglebs commented 9 years ago

I believe the fix should be something like (in SeleniumDriverFixture):

private void setTimeoutOnSelenium() {
    executeCommand("setTimeout", new String[] { "" + this.timeout });
    WebDriver.Timeouts timeouts = getWebDriver().manage().timeouts();
    timeouts.setScriptTimeout(this.timeout, TimeUnit.MILLISECONDS);
    if (!defaultWebDriverSupplier.getBrowser().toLowerCase().equals("safari"))  //mqm fix for #137 - safari does not support this API
        timeouts.pageLoadTimeout(this.timeout, TimeUnit.MILLISECONDS);
}

And add the getBrowser API to DefaultWebDriverSupplier.

I did this in my fork and it worked.

sglebs commented 9 years ago

See: https://code.google.com/p/selenium/issues/detail?id=6015

raboof commented 9 years ago

This arguably seems like an upstream issue: setting the page load timeout is part of the WebDriver.Timeouts Java API, so if it's not supported by Safari IMHO that's where that should be caught.

Can we file an upstream issue and implement a workaround (with reference to that issue) in Xebium until it's resolved upstream?