首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将对象转换到接口并访问在其他地方实现的接口方法。

将对象转换到接口并访问在其他地方实现的接口方法。
EN

Stack Overflow用户
提问于 2018-09-21 13:10:08
回答 2查看 2.7K关注 0票数 0

我们使用下面的代码在selenium中拍摄截图。

代码语言:javascript
复制
WebDriver driver = new FirefoxDriver();
File src = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(src, new File("D:\\TestNGScreenshots\\screenshot.png"));

以下是我的理解:

  • TakesScreenshot是一个接口,它提供了一个方法getScreenshotAs()来获取屏幕截图。
  • 但是WebDriver并没有扩展这个接口。
  • FirexfoxDriver类也没有实现这个接口
  • getScreenshotAs()方法是在实现TakesScreenshot的单独类TakesScreenshot中实现的。

在这里,我们将驱动程序对象转换为另一个接口TakesScreenshot,并使用它的方法getScreenshotAs(),它是在一个完全不同的类中实现的。

因此,如果我们想要使用在某些类中实现的接口方法,我们可以通过将对象(从实现类创建到另一个接口)转换为该接口来使用它们吗?

另外,如果我们创建这样的驱动程序

代码语言:javascript
复制
FirefoxDriver driver = new FirefoxDriver()

我们不能把接口传给这里的司机。我们必须像使用TakesScreenshot ts = drvier一样使用它,然后我们可以使用getScreenshotAs()方法。这里也不确定到底发生了什么?

有人能解释一下吗?

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2018-09-21 13:23:36

在您的示例中,您将从WebDriver接口转换为TakesScreenshot接口。您总是可以从一个接口转换到另一个接口,因为Java编译器无法判断由一个接口定义的引用是否包含实现其他接口的对象。此检查被推迟到运行时,如果它失败,您将在运行时获得ClassCastException

FirefoxDriver可能不直接实现TakesScreenshot,但它扩展了RemoteWebDriver。正因为如此,FirefoxDriver是-A TakesScreenshot (按类javadocs )。您可以写以下内容:

代码语言:javascript
复制
FirefoxDriver driver = new FirefoxDriver();
File src = driver.getScreenshotAs(OutputType.FILE);
票数 1
EN

Stack Overflow用户

发布于 2018-09-21 14:35:46

TakesScreenshot

TakesScreenshot是一个公共接口,它提供了一个方法getScreenshotAs()来捕获屏幕快照并将其存储在指定的位置,并实现了以下类:

  • FirefoxDriver
  • ChromeDriver
  • InternetExplorerDriver
  • EdgeDriver
  • OperaDriver
  • SafariDriver
  • EventFiringWebDriver
  • RemoteWebDriver
  • RemoteWebElement

这意味着,可以捕获屏幕快照并存储它的驱动程序通过将驱动程序实例转换为TakesScreenshot类型实例来实现。

例如:

代码语言:javascript
复制
public static void takeScreenShot() throws IOException{
    String path = "./ScreenShots/";
    File scrFile = ((TakesScreenshot)drive).getScreenshotAs(OutputType.FILE);
    FileUtils.copyFile(scrFile, new File(path + "Subbu" + ".jpg"));
    System.out.println("Screenshot Taken");
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52444524

复制
相关文章

相似问题

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