为什么我们需要将Firefox驱动程序强制转换为javascript执行程序?

时间:2015-09-02 23:04:27

标签: javascript java selenium casting selenium-firefoxdriver

我是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'");
    }
}

1 个答案:

答案 0 :(得分:3)

您的driver变量(实际上是字段)声明为WebDriver类型。

由于FirefoxDriver实施WebDriver,您可以毫无问题地将new FirefoxDriver()分配给driver

现在您要执行一些JavaScript命令。为此,您必须使用executeScript()界面的JavascriptExecutor方法。

JavascriptExecutorWebDriver接口无关(例如,这个接口不会扩展该接口),但FirefoxDriver碰巧实现了这两种接口。

因此,即使您的driver变量被视为WebDriver(由于其声明),它实际上将值FirefoxDriver保存为值 - 因此其值 }也是<{1}}(因为JavascriptExecutor)。

但是,你必须找到一种方式来看待&#34; FirefoxDriver implements JavascriptExecutor变量好像是driver,因此您可以执行此界面的方法(如JavascriptExecutor)。 这样做的方法,这&#34;&#34;,正在投射,就像你一样。

如果您从executeScript()类型声明driver,则不必进行任何演员表。亲自尝试一下。