Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java getScreenshotAs方法在哪里定义?_Java_Selenium_Selenium Webdriver_Webdriver_Takesscreenshot - Fatal编程技术网

Java getScreenshotAs方法在哪里定义?

Java getScreenshotAs方法在哪里定义?,java,selenium,selenium-webdriver,webdriver,takesscreenshot,Java,Selenium,Selenium Webdriver,Webdriver,Takesscreenshot,我正在浏览selenium中的屏幕截图代码。下面是它的代码: File src = ((TakesScreenshot)driver).getScreenshotAs(OutputType.File); 在上行中,TakesScreenshot是一个接口,getScreenshotAs是一个方法。所以我从中了解到的是,我们正在将驱动程序类型转换为TakesScreenshot接口,这本质上意味着我们的驱动程序从现在起将像TakesScreenshot一样运行,之后将执行getScreensho

我正在浏览selenium中的屏幕截图代码。下面是它的代码:

File src = ((TakesScreenshot)driver).getScreenshotAs(OutputType.File);
在上行中,TakesScreenshot是一个接口,getScreenshotAs是一个方法。所以我从中了解到的是,我们正在将驱动程序类型转换为TakesScreenshot接口,这本质上意味着我们的驱动程序从现在起将像TakesScreenshot一样运行,之后将执行getScreenshotAs方法

我这里的问题是接口只能有抽象方法。所以,getScreenshotAs方法是如何通过TakesScreenshot接口执行的,因为它没有此方法的任何定义。更准确地说,getScreenshotAs方法是在哪里定义的,上面这行代码是如何工作的


添加更多详细信息:

TakesScreenshot-->一个接口

驱动程序-->ChromeDriver类的实例(WebDriver驱动程序=新ChromeDriver())

TakesScreenshot接口中的getScreenshotAs-->方法


上面的代码用于在selenium中拍摄网页的屏幕截图

据我所知,这实际上不是一个特定于硒的问题,而是一个基本的Java问题

您提供的表达的含义:

((TakesScreenshot) driver).getScreenshotAs(OutputType.File)
((TakesScreenshot) driver).getScreenshotAs(OutputType.File)
如下所示:无论
驱动程序
变量的类型是什么,在这一行中,我们确信它实现了
TakesScreenshot
接口,该接口具有
getScreenshotAs
方法。因此,我们将类型强制转换为
TakesScreenshot
,并在
driver
对象上调用
getScreenshotAs
方法。此方法的实现在real
driver
类中,无论是哪个类

为了给您一个非常接近问题代码的示例(我使用此方法接受
Object
,因此我们确实需要将
o
转换到目标界面。不要在实际代码中执行此操作):

其中,
Printable
是带有方法
print
的一些接口:

public interface Printable {
  void print();
}
public interface Printable {
  void print();
}
因此,如果我们有一些可打印的
实现

public class Greeting implements Printable {

  @Override
  public void print() {
    System.out.println("Hello, username");
  }

}
public class Greeting implements Printable {

  @Override
  public void print() {
    System.out.println("Hello, username");
  }

}
我们可以打电话

log(new Greeting())
log(new Greeting())
这会导致“你好,用户名”

编辑:

正如我在JavaDoc到selenium中看到的,
WebDriver
接口没有扩展
TakesScreenshot
接口。因此,如果
driver
变量的类型是
WebDriver
接口,则必须强制转换它
WebDriver driver=new ChromeDriver()
-编译器只有
WebDriver
类型的引用。尽管实际类是
ChromeDriver
编译器并不知道它。因此,在这种情况下,为了调用
getScreenshotAs
方法,您必须将
driver
转换为
TakesScreenshot
(这是安全的,因为
driver
ChromeDriver
的实例,它实现了
WebDriver
TakesScreenshot
接口)。只有在这之后,您才能从
TakesScreenshot
界面调用
getScreenshotAs
方法

WebDriver driver = new ChromeDriver();
// driver.getScreenshotAs(OutputType.File); // compilation error as there is no method getScreenshotAs in WebDriver interface
((TakesScreenshot) driver).getScreenshotAs(OutputType.File); // ok after explicit casting

据我所知,这实际上不是一个特定于硒的问题,而是一个基本的Java问题

您提供的表达的含义:

((TakesScreenshot) driver).getScreenshotAs(OutputType.File)
((TakesScreenshot) driver).getScreenshotAs(OutputType.File)
如下所示:无论
驱动程序
变量的类型是什么,在这一行中,我们确信它实现了
TakesScreenshot
接口,该接口具有
getScreenshotAs
方法。因此,我们将类型强制转换为
TakesScreenshot
,并在
driver
对象上调用
getScreenshotAs
方法。此方法的实现在real
driver
类中,无论是哪个类

为了给您一个非常接近问题代码的示例(我使用此方法接受
Object
,因此我们确实需要将
o
转换到目标界面。不要在实际代码中执行此操作):

其中,
Printable
是带有方法
print
的一些接口:

public interface Printable {
  void print();
}
public interface Printable {
  void print();
}
因此,如果我们有一些可打印的
实现

public class Greeting implements Printable {

  @Override
  public void print() {
    System.out.println("Hello, username");
  }

}
public class Greeting implements Printable {

  @Override
  public void print() {
    System.out.println("Hello, username");
  }

}
我们可以打电话

log(new Greeting())
log(new Greeting())
这会导致“你好,用户名”

编辑:

正如我在JavaDoc到selenium中看到的,
WebDriver
接口没有扩展
TakesScreenshot
接口。因此,如果
driver
变量的类型是
WebDriver
接口,则必须强制转换它
WebDriver driver=new ChromeDriver()
-编译器只有
WebDriver
类型的引用。尽管实际类是
ChromeDriver
编译器并不知道它。因此,在这种情况下,为了调用
getScreenshotAs
方法,您必须将
driver
转换为
TakesScreenshot
(这是安全的,因为
driver
ChromeDriver
的实例,它实现了
WebDriver
TakesScreenshot
接口)。只有在这之后,您才能从
TakesScreenshot
界面调用
getScreenshotAs
方法

WebDriver driver = new ChromeDriver();
// driver.getScreenshotAs(OutputType.File); // compilation error as there is no method getScreenshotAs in WebDriver interface
((TakesScreenshot) driver).getScreenshotAs(OutputType.File); // ok after explicit casting

据我所知,这实际上不是一个特定于硒的问题,而是一个基本的Java问题

您提供的表达的含义:

((TakesScreenshot) driver).getScreenshotAs(OutputType.File)
((TakesScreenshot) driver).getScreenshotAs(OutputType.File)
如下所示:无论
驱动程序
变量的类型是什么,在这一行中,我们确信它实现了
TakesScreenshot
接口,该接口具有
getScreenshotAs
方法。因此,我们将类型强制转换为
TakesScreenshot
,并在
driver
对象上调用
getScreenshotAs
方法。此方法的实现在real
driver
类中,无论是哪个类

为了给您一个非常接近问题代码的示例(我使用此方法接受
Object
,因此我们确实需要将
o
转换到目标界面。不要在实际代码中执行此操作):

其中,
Printable
是带有方法
print
的一些接口:

public interface Printable {
  void print();
}
public interface Printable {
  void print();
}
因此,如果我们有一些可打印的
实现

public class Greeting implements Printable {

  @Override
  public void print() {
    System.out.println("Hello, username");
  }

}
public class Greeting implements Printable {

  @Override
  public void print() {
    System.out.println("Hello, username");
  }

}
我们可以打电话

log(new Greeting())
log(new Greeting())
这会导致“你好,用户名”

编辑:

正如我在JavaDoc到selenium中看到的,
WebDriver
I