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 执行 TakesScreenshotWebDriver 不执行。所以也许你可以摆脱演员,它会解决你的问题,虽然你得到那个例外很奇怪。我的猜测是,这可能是因为 Winium 对 RemoteWebDriver 的实现不完整。

但是,如果您尝试在运行时使用 getClass() 检查 class 名称,它会解析为实例的运行时 class,这就是您得到 RemoteWebDriver 的原因...

所以对我来说,这似乎是 Winium 中的一个缺陷