【问题标题】:Unable to inject javascript using selenium 3 in firefox无法在 Firefox 中使用 selenium 3 注入 javascript
【发布时间】:2017-05-05 15:15:07
【问题描述】:

我正在使用 selenium 注入 java 脚本变量并检索它以进行验证。

下面是我的示例代码,它在 selenium 版本 2.53.1 上运行良好。 当我升级到 selenium 3 并开始为 firefox 使用 gecko 驱动程序时,当我检索值时它会抛出异常。

driver.executeScript("globalVar='Amit';");
Object result = driver.executeScript("return globalVar");
System.out.println(result.toString());

例外:

org.openqa.selenium.JavascriptException: ReferenceError: globalVar is not defined

在 selenium 3 中,同样的代码也适用于 Chrome。

我在这里遗漏了什么吗?或者是否添加了任何功能以允许在 Firefox/Gecko 驱动程序中进行此类操作?

【问题讨论】:

  • 这个错误发生在哪一行代码??
  • 检索值时:Object result = driver.executeScript("return globalVar");
  • driver.executeScript("window.globalVar='Amit';"); Object result = driver.executeScript("return window.globalVar"); System.out.println(result.toString());尝试一次
  • 是的,窗口和文档是替代的,但是这在 firefox 中不起作用的原因是什么,或者 firefox 将注入的变量存储在哪个对象中?
  • 例如,如果我想注入 jquery,那么我不能更改所有变量和函数,这应该可以工作。

标签: selenium firefox selenium-firefoxdriver geckodriver


【解决方案1】:

您在执行的脚本中设置的变量不是全局变量 - 它们“位于”已执行函数的范围内。如果您想拥有一个要跨多个执行脚本访问的全局变量,则必须使用可用的全局对象之一,例如window:

driver.executeScript("window.globalVar = 'Amit';");
Object result = driver.executeScript("return window.globalVar");
System.out.println(result.toString());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-17
    • 2013-06-02
    • 1970-01-01
    相关资源
    最近更新 更多