任何人都可以解释Selenium中的截图吗?
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
,它指的是什么? 你能解释一下吗?
WebDriver
接口不包含getScreenshotAs()
方法,因为可能让webdriver无法截取屏幕截图 – 例如内存驱动程序根本不呈现页面,例如HtmlUnitDriver
。
为了获得该方法,驱动程序必须实现TakesScreenshot
接口,这使得它能够……好…截取屏幕截图。
因此,您必须以某种方式告诉程序您想截取屏幕截图,并且您绝对相信您可以这样做。 这就是(TakesScreenshot)driver
部分的用途。 在Java中,它被称为强制转换 ,它实际上转换为“我知道这个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(...); }
正如您在此处所述,它表明驱动程序可以截取屏幕截图。 有必要进行转换,因为WebDriver接口不包含getScreenshotAs方法,尽管它是由大多数实现该接口的类实现的,如FirefoxDriver 。