BUG: Katalon V7 cannot cast SmartWaitWebDriver to RemoteWebDriver

Katalon version 7.0 beta

Failure: Cannot cast object ‘com.kms.katalon.core.webui.driver.SmartWaitWebDriver@7cab1508’ with class ‘com.kms.katalon.core.webui.driver.SmartWaitWebDriver’ to class ‘org.openqa.selenium.remote.RemoteWebDriver’

Scope: Every test case does this.

Log:

1568733925590	mozrunner::runner	INFO	Running command: "C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe" "-marionette" "-foreground" "-no-remote" "-profile" "C:\\Users\\Russ\\AppData\\Local\\Temp\\rust_mozprofile.t7aQ9KQ4qrxG"
1568733927591	addons.webextension.screenshots@mozilla.org	WARN	Loading extension 'screenshots@mozilla.org': Reading manifest: Invalid extension permission: mozillaAddons
1568733927591	addons.webextension.screenshots@mozilla.org	WARN	Loading extension 'screenshots@mozilla.org': Reading manifest: Invalid extension permission: telemetry
1568733927591	addons.webextension.screenshots@mozilla.org	WARN	Loading extension 'screenshots@mozilla.org': Reading manifest: Invalid extension permission: resource://pdf.js/
1568733927591	addons.webextension.screenshots@mozilla.org	WARN	Loading extension 'screenshots@mozilla.org': Reading manifest: Invalid extension permission: about:reader*
JavaScript error: resource://gre/modules/XULStore.jsm, line 66: Error: Can't find profile directory.
1568733932231	Marionette	INFO	Listening on port 53068
1568733932338	Marionette	WARN	TLS certificate errors will be ignored for this session
Sep 17, 2019 10:25:32 AM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: W3C
[Child 18680, Chrome_ChildThread] WARNING: pipe error: 109: file z:/task_1566864336/build/src/ipc/chromium/src/chrome/common/ipc_channel_win.cc, line 341
[Child 18680, Chrome_ChildThread] WARNING: pipe error: 109: file z:/task_1566864336/build/src/ipc/chromium/src/chrome/common/ipc_channel_win.cc, line 341
2019-09-17 10:25:35.636 INFO  com.kms.katalon.core.util.KeywordUtil    -       basePage ERROR_AT_START
Caught: com.kms.katalon.core.exception.StepErrorException: Test Cases/Pages/A1-RunFirst/Test DUMMY : ERROR at or near: 00 - Comment: null. Failure: Cannot cast object 'com.kms.katalon.core.webui.driver.SmartWaitWebDriver@7cab1508' with class 'com.kms.katalon.core.webui.driver.SmartWaitWebDriver' to class 'org.openqa.selenium.remote.RemoteWebDriver'
com.kms.katalon.core.exception.StepErrorException: Test Cases/Pages/A1-RunFirst/Test DUMMY : ERROR at or near: 00 - Comment: null. Failure: Cannot cast object 'com.kms.katalon.core.webui.driver.SmartWaitWebDriver@7cab1508' with class 'com.kms.katalon.core.webui.driver.SmartWaitWebDriver' to class 'org.openqa.selenium.remote.RemoteWebDriver'
	at com.qsi.base.basePage.<init>(basePage.groovy:61)
	at SuiteListener.<init>(SuiteListener.groovy)
	at com.kms.katalon.core.context.internal.TestHooker.invokeContextMethods(TestHooker.java:89)
	at com.kms.katalon.core.context.internal.TestListenerCollector.lambda$3(TestListenerCollector.java:88)
	at com.kms.katalon.core.context.internal.TestListenerCollector.handleListenerEvent(TestListenerCollector.java:85)
	at com.kms.katalon.core.context.internal.ExecutionEventManager.publicEvent(ExecutionEventManager.java:36)
	at com.kms.katalon.core.main.TestCaseExecutor.execute(TestCaseExecutor.java:249)
	at com.kms.katalon.core.main.TestCaseMain.runTestCase(TestCaseMain.java:114)
	at com.kms.katalon.core.main.TestCaseMain.runTestCase(TestCaseMain.java:105)
	at com.kms.katalon.core.main.TestCaseMain$runTestCase$0.call(Unknown Source)
	at TempTestCase1568733913115.run(TempTestCase1568733913115.groovy:23)

1 Like

Hi @Russ_Thomas

An EventFiringWebDriver doesn’t implement RemoteWebDriver interface. You’d probably need to cast into EventFiringWebDriver and then get the wrapped RemoteWebDriver.

May I see what is going on with your code that exhibits this problem ?

I’ll look into this to see if it can be done, but seems tough.

Thanks @ThanhTo.

But I’m not doing this as far as I can tell. I’m just running TCs.

I’ll reregister and see if I can dig in closer to the error.

1 Like

Wow. It is my code…

  static void moveBrowser(int x, int y) {
    WebDriver driver = DriverFactory.getWebDriver()
    Capabilities cap = ((RemoteWebDriver) driver).getCapabilities() // BUG HERE
    String browserName =  cap.getBrowserName()
    // Because IE is poo
    if(browserName != "internet explorer") {
      driver.manage().window().setPosition(new Point(x, y))
    }
  }

What should that say instead?

SOLVED - thanks.

  static void moveBrowser(int x, int y) {
    WebDriver driver = DriverFactory.getWebDriver()
    Capabilities cap = ((SmartWaitWebDriver) driver).getCapabilities()
    String browserName =  cap.getBrowserName()
    // Because IE is poo
    if(browserName != "internet explorer") {
      driver.manage().window().setPosition(new Point(x, y))
    }
  }
1 Like

How about

((RemoteWebDriver) (((EventFiringWebDriver) driver).getWrappedDriver())).getCapabilities()

First cast the driver returned from DriverFactory.getWebDriver() into EventFiringWebDriver. Then retrieve the wrapped WebDriver from getWrappedDriver() and finally cast that into RemoteWebDriver

1 Like

Ah @Russ_Thomas

Please note that RemoteWebDriver has method getSessionId(), so if you need that you would need to cast explicitly to RemoteWebDriver. Otherwise casting into SmartWaitWebDriver would suffice

1 Like

Cool. Thanks @ThanhTo!