Java getScreenshotAs方法在哪里定义?
我正在浏览selenium中的屏幕截图代码。下面是它的代码: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
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
方法。此方法的实现在realdriver
类中,无论是哪个类
为了给您一个非常接近问题代码的示例(我使用此方法接受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
方法。此方法的实现在realdriver
类中,无论是哪个类
为了给您一个非常接近问题代码的示例(我使用此方法接受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
方法。此方法的实现在realdriver
类中,无论是哪个类
为了给您一个非常接近问题代码的示例(我使用此方法接受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