首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有谁能解释一下Selenium中的截图吗?

有谁能解释一下Selenium中的截图吗?
EN

Stack Overflow用户
提问于 2014-02-19 18:33:19
回答 2查看 16.2K关注 0票数 8
代码语言:javascript
复制
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"));

有谁能告诉我

代码语言:javascript
复制
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE) 

getScreenShotAsTakesScreenshot接口中的方法......

(TakesScreenshot)driver,指的是什么?你能稍微解释一下吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-20 00:40:56

WebDriver接口不包含getScreenshotAs()方法,因为all驱动程序可能无法截取屏幕-例如,像HtmlUnitDriver这样根本不呈现页面的内存中驱动程序。

为了使用该方法,驱动程序必须实现TakesScreenshot接口,该接口使其能够...好吧..。截图。

因此,你必须以某种方式告诉程序,你想要截图,并且你绝对确定你可以这样做。这就是(TakesScreenshot)driver部件的用途。在Java语言中,它被称为casting,字面意思是“我知道这个driver实例能够截屏,请将其转换为TakesScreenshot类型。”

如果转换成功,则一切正常,driver对象将在运行时转换为TakesScreenshot的一个实例。但是,如果您的强制转换失败,您将在运行时获得一个ClassCastExcepion

下面是一些例子:

代码语言:javascript
复制
// 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(...);
}
票数 13
EN

Stack Overflow用户

发布于 2014-06-19 23:24:35

正如你可能读到的here,它表明驱动程序可以截图。有必要进行转换,因为WebDriver接口不包含getScreenshotAs方法,尽管它是由实现该接口的大多数类实现的,比如FirefoxDriver。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21877839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档