【问题标题】:Why do we need to typecast Firefox driver to javascript executor?为什么我们需要将 Firefox 驱动程序类型转换为 javascript 执行程序?
【发布时间】:2015-11-28 15:14:29
【问题描述】:

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

【问题讨论】:

  • 嗨,欢迎来到 SO!当您发布代码块时,最好的格式化方法是在每行的开头放置 4 个空格。它使每个人都更容易阅读,从而更有可能获得帮助。
  • 点击下面的链接,它有一个漂亮的解释:- stackoverflow.com/questions/21877839/…

标签: javascript java selenium casting selenium-firefoxdriver


【解决方案1】:

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

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

现在你想执行一些 JavaScript 命令。为此,您必须使用JavascriptExecutor 接口的executeScript() 方法。

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

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

不过,您必须找到一种“查看”driver 变量的方法,就像它是 JavascriptExecutor 一样,这样您才能执行此接口的方法(例如 executeScript())。 这样做的方法,这种“看着”,正在施放,就像你所做的那样。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-24
    • 2020-10-30
    • 1970-01-01
    • 1970-01-01
    • 2012-10-31
    • 1970-01-01
    • 2012-09-23
    • 1970-01-01
    相关资源
    最近更新 更多