我使用RemoteWebDriver從我的筆記本電腦(java客戶端)在遠程PC上運行Selenium WebDriver測試。但是RemoteWebDriver並沒有提供截圖API來直接獲取遠程PC的截圖。谷歌搜索了很多,但發現似乎需要使用Json API直接從遠程WebDriver服務器獲取它。任何人都可以給我一些關於如何做到這一點的指導?謝謝。如何從RemoteWebDriver服務器獲取屏幕截圖而不是本地FirefoxDriver?
回答
必須先增加RemoteWebDriver
,然後才能使用屏幕截圖功能。正如你毫無疑問已經發現的那樣,試圖在沒有增加效果的情況下施展例外。
WebDriver driver = new RemoteWebDriver(...);
driver = new Augmenter().augment(driver);
((TakesScreenshot)driver).getScreenshotAs(...);
我覺得這是最好的方法:
public<T> Object getScreenshotAs(OutputType<T> outputType) {
Augmenter augmenter = new Augmenter();
TakesScreenshot ts = (TakesScreenshot) augmenter.augment(driver);
return ts.getScreenshotAs(outputType);
}
的RemoteWebDriver不實現TakesScreenShot這裏描述的施放方法RemoteWebDriver的TakesScreenShot實例將導致ClassCastException。我會看看我是否可以找到解決方案,因爲我有興趣做同樣的事情。
如果這個實例是一個RemoteWebDriver,Augmenter將「增強WebDriver實現的接口」。根據RemoteWebDriver的配置方式以及遠程主機上的Selenium服務器運行方式,可以使用org.openqa.selenium.remote.Augmenter獲取屏幕截圖。
我已經配置了RemoteWebDriver來使用DesiredCapabilities.htmlUnit()功能,這給了一個ClassCastError。如果RemoteWebDriver配置了實現TakesScreenshot接口的驅動程序的功能,則可能不會發生ClassCastException,儘管我尚未對此進行測試。
從TakesScreenshot接口,已知實現驅動程序是:AndroidDriver,AndroidWebDriver,ChromeDriver,EventFiringWebDriver,FirefoxDriver,InternetExplorerDriver,IPhoneDriver,IPhoneSimulatorDriver和SafariDriver
我已經使用服務器上的Firefox驅動程序運行它,它確實有效! – gffny
我能得到這個工作...這裏是什麼你需要做的:
1)在一個實用程序目錄下創建一個新的類文件或地方
package com.util;
import java.net.URL;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriverException;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.DriverCommand;
import org.openqa.selenium.remote.RemoteWebDriver;
public class ScreenShotRemoteWebDriver extends RemoteWebDriver implements TakesScreenshot {
public ScreenShotRemoteWebDriver(URL url, DesiredCapabilities dc) {
super(url, dc);
}
@Override
public <X> X getScreenshotAs(OutputType<X> target) throws WebDriverException {
if ((Boolean) getCapabilities().getCapability(CapabilityType.TAKES_SCREENSHOT)) {
return target.convertFromBase64Png(execute(DriverCommand.SCREENSHOT).getValue().toString());
}
return null;
}
}
2)然後......你在哪裏都開始RemoteWeDriver,這種取代代碼:
driver = new ScreenShotRemoteWebDriver(new URL(-PUT YOUR HUB URL HERE-),cap);
您的屏幕截圖將存儲在本地。
希望這會有所幫助。
哇哇。我要試試這個! –
真棒......讓我知道它是如何爲你工作的! – zerotres
- 1. 如何從videofile獲取屏幕截圖?
- 2. 如何獲取屏幕截圖圖片
- 3. 在Android中從服務中獲取屏幕截圖
- 4. 截取當前顯示屏幕的屏幕截圖,而不是當前活動
- 5. ffmpeg獲取屏幕截圖
- 6. 從browserstack獲取屏幕截圖
- 7. 從LinearLayout獲取屏幕截圖
- 8. 從WPF獲取屏幕截圖
- 9. 如何在Linux PHP服務器上獲取網站的屏幕截圖?
- 10. 如何將屏幕截圖發送到服務器而不存儲在本地計算機上
- 11. 從yandex地圖工具包獲取屏幕截圖
- 12. 如何截取這裏地圖加載的android屏幕截圖?
- 13. 從網絡播放器保存屏幕截圖到服務器
- 14. FirefoxDriver提供不同尺寸的屏幕截圖
- 15. Windows服務無法在Windows 7中獲取屏幕截圖
- 16. C++截取屏幕截圖
- 17. 截取屏幕截圖
- 18. 執行程序從Windows服務捕獲屏幕截圖
- 19. 如何在本地使用FirefoxDriver並在CI上使用RemoteWebDriver
- 20. 從服務器流大量的屏幕截圖
- 21. 從服務中獲取媒體播放器服務屏幕
- 22. 如何在iOS模擬器上獲取完整屏幕截圖
- 23. 如何從FMed中的TMediaPlayerControl獲取屏幕截圖?
- 24. 如何從mapview中獲取屏幕截圖
- 25. 如何從網址獲取網頁的屏幕截圖
- 26. PHP-PhantomJS以不同的服務器渲染屏幕截圖
- 27. 如何使用服務截取我的應用程序的屏幕截圖?
- 28. SpriteKit屏幕截圖的屏幕截圖
- 29. Xcode 6 - iOS模擬器 - 從命令行獲取屏幕截圖
- 30. 僅獲取UICollectionView的屏幕截圖?
請您告訴我們爲什麼截圖功能沒有內置到RemoteWebDriver中?我想知道這個額外的步驟在後臺做了什麼。順便說一句,根據文檔,Augmenter是一個實驗性功能,必須謹慎使用。 – testerjoe2