为什么我们需要将 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() 方法。

JavascriptExecutorWebDriver 接口无关(例如,这个接口不扩展那个接口),但 FirefoxDriver 恰好实现了两者。

因此,即使您的 driver 变量被视为 WebDriver(由于其声明),它实际上将 FirefoxDriver 的实例作为值 - 因此它的值 也是一个JavascriptExecutor(因为FirefoxDriver implements JavascriptExecutor)。

仍然,你必须找到一种方法 "looking at" 那个 driver 变量就好像它是一个 JavascriptExecutor,这样你就可以执行这个接口的方法(比如 executeScript()). 这样做的方法,这个"looking at",正在铸造,就像你做的那样。

如果您将 driver 声明为 FirefixDriver 类型,则无需进行任何转换。自己试试吧。