WebDriver driver = new FirefoxDriver();
driver.get("http://www.google.com/");
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
// Now you can do whatever you need to do with it, for example copy somewhere
FileUtils.copyFile(scrFile, new File("c:\\tmp\\screenshot.png"));有谁能告诉我
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE) getScreenShotAs是TakesScreenshot接口中的方法......
(TakesScreenshot)driver,指的是什么?你能稍微解释一下吗?
发布于 2014-06-20 00:40:56
WebDriver接口不包含getScreenshotAs()方法,因为all驱动程序可能无法截取屏幕-例如,像HtmlUnitDriver这样根本不呈现页面的内存中驱动程序。
为了使用该方法,驱动程序必须实现TakesScreenshot接口,该接口使其能够...好吧..。截图。
因此,你必须以某种方式告诉程序,你想要截图,并且你绝对确定你可以这样做。这就是(TakesScreenshot)driver部件的用途。在Java语言中,它被称为casting,字面意思是“我知道这个driver实例能够截屏,请将其转换为TakesScreenshot类型。”
如果转换成功,则一切正常,driver对象将在运行时转换为TakesScreenshot的一个实例。但是,如果您的强制转换失败,您将在运行时获得一个ClassCastExcepion。
下面是一些例子:
// We already know this is ok, because FirefoxDriver implements (IS-A) TakesScreenshot.
WebDriver driver = new FirefoxDriver();
TakesScreenshot screenshottingDriver = (TakesScreenshot)driver;
// This will fail at run-time, because HtmlUnitDriver does not implement TakesScreenshot;
WebDriver driver = new HtmlUnitDriver();
TakesScreenshot screenshottingDriver = (TakesScreenshot)driver;
// You can use the `instanceof` operator to check:
if (driver instanceof TakesScreenshot) {
// we can be sure we can take screenshots, the cast will be safe
((TakesScreenshot)driver).getScreenshotAs(...);
}发布于 2014-06-19 23:24:35
正如你可能读到的here,它表明驱动程序可以截图。有必要进行转换,因为WebDriver接口不包含getScreenshotAs方法,尽管它是由实现该接口的大多数类实现的,比如FirefoxDriver。
https://stackoverflow.com/questions/21877839
复制相似问题