为什么我们需要将 Firefox 驱动程序强制转换为 javascript 执行程序?
Why do we need to typecast Firefox driver to javascript executor?
我是 Java 和 Selenium 的初学者,我在工作时遇到了 JavascriptExecutor
。
想知道:虽然 Remote webdriver 和 Firefox driver 实现了 javascript executor,但为什么我不能直接访问方法 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
。
现在您想执行一些 JavaScript 命令。为此,您必须使用 JavascriptExecutor
接口的 executeScript()
方法。
JavascriptExecutor
与 WebDriver
接口无关(例如,这个接口不扩展那个接口),但 FirefoxDriver
恰好实现了两者。
因此,即使您的 driver
变量被视为 WebDriver
(由于其声明),它实际上将 FirefoxDriver
的实例作为值 - 因此它的值 也是一个JavascriptExecutor
(因为FirefoxDriver implements JavascriptExecutor
)。
仍然,你必须找到一种方法 "looking at" 那个 driver
变量就好像它是一个 JavascriptExecutor
,这样你就可以执行这个接口的方法(比如 executeScript()
). 这样做的方法,这个"looking at",正在铸造,就像你做的那样。
如果您将 driver
声明为 FirefixDriver
类型,则无需进行任何转换。自己试试吧。
我是 Java 和 Selenium 的初学者,我在工作时遇到了 JavascriptExecutor
。
想知道:虽然 Remote webdriver 和 Firefox driver 实现了 javascript executor,但为什么我不能直接访问方法 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
。
现在您想执行一些 JavaScript 命令。为此,您必须使用 JavascriptExecutor
接口的 executeScript()
方法。
JavascriptExecutor
与 WebDriver
接口无关(例如,这个接口不扩展那个接口),但 FirefoxDriver
恰好实现了两者。
因此,即使您的 driver
变量被视为 WebDriver
(由于其声明),它实际上将 FirefoxDriver
的实例作为值 - 因此它的值 也是一个JavascriptExecutor
(因为FirefoxDriver implements JavascriptExecutor
)。
仍然,你必须找到一种方法 "looking at" 那个 driver
变量就好像它是一个 JavascriptExecutor
,这样你就可以执行这个接口的方法(比如 executeScript()
). 这样做的方法,这个"looking at",正在铸造,就像你做的那样。
如果您将 driver
声明为 FirefixDriver
类型,则无需进行任何转换。自己试试吧。