2017-02-13 47 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

相關問題