[英]Why do we need to typecast Firefox driver to javascript executor?
我是Java和Selenium的初学者,我在工作时遇到了JavascriptExecutor
。
想知道:虽然远程webdriver和Firefox驱动程序实现了javascript执行程序,但为什么我不能直接访问executeScript()
方法,为什么要进行类型转换才能获得访问权限?
这是javascript执行程序的程序:
public class entertextwithoutsendkeys
{
WebDriver driver;
public entertextwithoutsendkeys()
{
driver = new FirefoxDriver();
}
@Test
public void entertextpgm()
{
driver.get("https://www.gmail.com/");
JavascriptExecutor executor = (JavascriptExecutor) driver;
executor.executeScript("document.getElementById('Email').value='sh'");
}
}
您的driver
变量(实际上是字段)声明为WebDriver
类型。
由于FirefoxDriver
实现了WebDriver
,您可以new FirefoxDriver()
为driver
分配new FirefoxDriver()
。
现在您要执行一些JavaScript命令。 为此,您必须使用JavascriptExecutor
接口的executeScript()
方法。
JavascriptExecutor
与WebDriver
接口无关(例如,这个不扩展那个接口),但FirefoxDriver
碰巧实现了这两者。
因此,即使您的driver
变量被视为WebDriver
(由于其声明),它实际上将值保存为FirefoxDriver
的实例 - 因此它的值也是 JavascriptExecutor
(因为FirefoxDriver implements JavascriptExecutor
)。
但是,您必须找到一种“查看”该driver
变量的方法,就像它是一个JavascriptExecutor
,因此您可以执行此接口的方法(如executeScript()
)。 要做到这一点的方式 ,这种“看”, 是铸造 ,就像你一样。
如果您声明类型为FirefixDriver
driver
,则不必进行任何FirefixDriver
。 亲自尝试一下。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.