2017-02-13 44 views
1

我正在尝试使用Winium.Desktop的RemoteWebDriver截图。 由于RemoteWebDriver没有实现TakesScreenshot,我将对象声明为WebDriver。RemoteWebDriver无法转换为org.openqa.selenium.TakesScreenshot(Java)

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

当我打印驱动程序类名称虽然它被声明为WebDriver,但我获得了RemoteWebDriver。

我缺少什么?

+0

什么是'Augmenter'类? “增强”方法有什么作用?我无法在Winium repo中找到它... – Moshisho

+0

它是Selenium Remote软件包的一部分,Winium是Windows驱动程序。请参阅https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/remote/Augmenter.html – Zvi

回答

1

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

但是,如果你试图运行时使用getClass()检查类的名称,它解析为运行时类的实例,这就是为什么你RemoteWebDriver ...

所以对我来说似乎是一个缺陷在Winium中。

+0

有关嗯,它可能是一个错误,你应该在他们的GitHub中打开一个问题。我看到他们确实在Winium.Desktop.Driver中执行了截图。 – Moshisho

+1

解决方案是使用RemoteWebDriver对象中的'getScreenshotAs()'。 该方法没有在Selenium 2.39.0中实现,我不得不升级到2.53.1并获得了屏幕截图功能。 [Selenium Docs](http://www.seleniumhq.org/docs/04_webdriver_advanced.jsp#remotewebdriver)令人困惑,因为它们指示使用'Augmenter()'。 [Winium.Dekstop](https://github.com/2gis/Winium.Desktop/wiki)没有问题。 – Zvi

0

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

我希望这应该适合你。

+0

在Java中没有这样的接口,此接口与c# – Zvi

相关问题