java 有人能解释一下WebDriver如何在Selenium中转换为TakesScreenShot吗

wko9yo5t  于 2023-11-15  发布在  Java
关注(0)|答案(2)|浏览(115)

这是一个 JAVA 概念性问题,与Selenium不相关。
示例代码如下:

// Taking a screenshot in Selenium
WebDriver driver= new ChromeDriver();
File srcFile=((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);

字符串
当我观察时,WebDriverTakesScreenshot 并不共享一个公共的超级接口。在这种情况下,转换如何有效?为什么不使用 ClassCastException

  • 如果能用一个例子来解释这一点,那就太好了。*
xam8gpfp

xam8gpfp1#

让我们把Selenium排除在外,为了简单起见,使用内置类型。您的代码类似于(在类型转换方面):

Comparable<String> text = "hello";
int length = ((CharSequence) text).length();

字符串
这会编译并执行而不会出现异常,因为:

  • "hello"String
  • String同时实现Comparable<String>CharSequence
  • 转换为CharSequencetext的值所引用的对象的 * 执行时 * 类型有关,而与 * 编译时 * 类型text无关

在执行时,text的值引用了一个String对象(“hello”)。当涉及到强制转换时,编译时类型是Comparable<String>的事实是无关紧要的-只要它是 * 可能的 *。(如果你试图用编译时类型转换一个表达式,而这个类型不可能是有效的,例如从String转换到InputStream,那么你会得到一个编译时错误。但是当编译器对强制转换可能成功感到高兴时,当涉及到强制转换的执行时处理时,变量的编译时类型是无关紧要的。

omjgkv6w

omjgkv6w2#

非基元类型转换在以下两种情况下是可能的。
1.两个对象之间应该存在Is A关系
1.两个对象(类或接口)应该有一个公共的子对象
由于webdriver和takescreensht有commom child(Remote webdriver),我们可以在webdriver和takescreenshot之间执行类型转换。

相关问题