RemoteWebDriver 无法转换为 org.openqa.selenium.TakesScreenshot (Java)
RemoteWebDriver cannot be cast to org.openqa.selenium.TakesScreenshot (Java)
我正在尝试使用 Winium.Desktop 的 RemoteWebDriver 截取屏幕截图。
由于 RemoteWebDriver 没有实现 TakesScreenshot,我将对象声明为 WebDriver。
WebDriver driver = new RemoteWebDriver(new URL(remoteUrl), desiredCapabilities);
WebDriver augmentedDriver = new Augmenter().augment(driver);
File screenshot = ((TakesScreenshot) augmentedDriver).getScreenshotAs(OutputType.FILE);
当我尝试将其转换为时,我得到:
java.lang.ClassCastException: org.openqa.selenium.remote.RemoteWebDriver 无法转换为 org.openqa.selenium.TakesScreenshot
当我打印驱动程序 class 名称时,我得到了 RemoteWebDriver,尽管它被声明为 WebDriver。
我错过了什么?
RemoteWebDriver class 未实现 TakesScreenshot class。它实现了 ITakesScreenshot 接口和其他接口,这个接口有 GetScreenshot 方法。因此,将类型转换更改为 ITakeScreenshot.
我希望这对你有用。
RemoteWebDriver
执行 TakesScreenshot
,WebDriver
不执行。所以也许你可以摆脱演员,它会解决你的问题,虽然你得到那个例外很奇怪。我的猜测是,这可能是因为 Winium 对 RemoteWebDriver 的实现不完整。
但是,如果您尝试在运行时使用 getClass()
检查 class 名称,它会解析为实例的运行时 class,这就是您得到 RemoteWebDriver
的原因...
所以对我来说,这似乎是 Winium 中的一个缺陷。
我正在尝试使用 Winium.Desktop 的 RemoteWebDriver 截取屏幕截图。 由于 RemoteWebDriver 没有实现 TakesScreenshot,我将对象声明为 WebDriver。
WebDriver driver = new RemoteWebDriver(new URL(remoteUrl), desiredCapabilities);
WebDriver augmentedDriver = new Augmenter().augment(driver);
File screenshot = ((TakesScreenshot) augmentedDriver).getScreenshotAs(OutputType.FILE);
当我尝试将其转换为时,我得到: java.lang.ClassCastException: org.openqa.selenium.remote.RemoteWebDriver 无法转换为 org.openqa.selenium.TakesScreenshot
当我打印驱动程序 class 名称时,我得到了 RemoteWebDriver,尽管它被声明为 WebDriver。
我错过了什么?
RemoteWebDriver class 未实现 TakesScreenshot class。它实现了 ITakesScreenshot 接口和其他接口,这个接口有 GetScreenshot 方法。因此,将类型转换更改为 ITakeScreenshot.
我希望这对你有用。
RemoteWebDriver
执行 TakesScreenshot
,WebDriver
不执行。所以也许你可以摆脱演员,它会解决你的问题,虽然你得到那个例外很奇怪。我的猜测是,这可能是因为 Winium 对 RemoteWebDriver 的实现不完整。
但是,如果您尝试在运行时使用 getClass()
检查 class 名称,它会解析为实例的运行时 class,这就是您得到 RemoteWebDriver
的原因...
所以对我来说,这似乎是 Winium 中的一个缺陷。