我正在尝试使用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
当我打印驱动程序类名时,我得到了RemoteWebDriver,尽管它被声明为WebDriver。
我错过了什么?
答案 0 :(得分:1)
RemoteWebDriver
确实实施了TakesScreenshot
,WebDriver
没有。所以也许你可以摆脱演员,它会解决你的问题,虽然你得到那个例外是非常奇怪的。我的猜测可能是因为Winium的RemoteWebDriver实现并不完整。
但是,如果您在运行时尝试使用getClass()
检查类名,它会解析为实例的运行时类,这就是您获得RemoteWebDriver
...
所以对我来说,它似乎是Winium中的缺陷。
答案 1 :(得分:0)
RemoteWebDriver类没有实现TakesScreenshot类。它实现 ITakesScreenshot 接口以及其他接口,此接口具有GetScreenshot方法。因此,将类型转换更改为 ITakeScreenshot 。
我希望这适合你。