【问题标题】:RemoteWebDriver cannot be cast to org.openqa.selenium.TakesScreenshot (Java)RemoteWebDriver 不能转换为 org.openqa.selenium.TakesScreenshot (Java)
【发布时间】:2019-07-02 18:40:38
【问题描述】:

我正在尝试使用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。

我错过了什么?

【问题讨论】:

标签: java selenium remotewebdriver


【解决方案1】:

RemoteWebDriver 确实实现了 TakesScreenshotWebDriver 没有。所以也许你可以摆脱演员阵容,它会解决你的问题,尽管你得到那个例外很奇怪。我的猜测是,这可能是因为 Winium 的 RemoteWebDriver 实现不完整。

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

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

【讨论】:

  • 嗯,这可能是一个错误,你应该在他们的 GitHub 中打开一个问题。我看到他们确实在 Winium.Desktop.Driver 中实现了截屏的命令执行。
  • 解决方案是使用来自RemoteWebDriver 对象的getScreenshotAs()。该方法未在 Selenium 2.39.0 中实现,我必须升级到 2.53.1 并获得屏幕截图功能。 Selenium Docs 令人困惑,因为他们指示使用 Augmenter()Winium.Dekstop没有问题。
【解决方案2】:

RemoteWebDriver 类没有实现 TakesScreenshot 类。它实现了 ITakesScreenshot 接口以及其他接口,并且该接口具有 GetScreenshot 方法。所以将类型转换更改为 ITakeScreenshot

我希望这对你有用。

【讨论】:

  • Java中没有这个接口,这个接口和c#有关
猜你喜欢
  • 2013-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-27
  • 2021-02-27
相关资源
最近更新 更多