【问题标题】:How to call the user-extensions.js in Selenium WebDriver如何在 Selenium WebDriver 中调用 user-extensions.js
【发布时间】:2012-01-09 16:34:05
【问题描述】:

我需要使用 user-extensions.js 中定义的函数。我们正在从 RC 迁移到 webdriver。我开始知道,有 JavascriptExecutor 将替换 runScript 和 getEval。但是我将如何指定 user-extensions.js 文件。 和java -jar selenium-server-standalone.jar -userExtensions user-extensions.js一样吗?

【问题讨论】:

  • 我点击答案旁边的向上箭头?

标签: java selenium user-extensions.js


【解决方案1】:

终于,经过 2 年零 2 个月,我找到了在 webdriver 中使用用户扩展文件的解决方案,现在我们正在迁移到 webdriver。

 loadjsFile(driver);

函数如下:

public static void loadjsFile(WebDriver driver){
String scriptSrc = "http://localhost:8080/test/user-extensions.js";
String injectScript = "var script = document.createElement(\"script\");";
injectScript += "script.src = \""+scriptSrc+"\";";
injectScript += "script.setAttribute(\"type\",\"text/javascript\");";
injectScript += "document.body.appendChild(script);";
((JavascriptExecutor) driver).executeScript(injectScript);
}

【讨论】:

  • 我可以使用这个功能在 Chrome 上禁用 JavaScript 吗?有人喜欢这样loadjsFile.doDisableJavascript(driver);
【解决方案2】:

他们现在有一个名为 IJavaScriptExecutor 的接口,可用于替换用户扩展。

这是 C#/NUnit 版本。

IJavaScriptExecutor js = driver as IJavaScriptExecutor;
long tableRowCount = (long)js.ExecuteScript("return $('#tableid tr').length);

这里是 Java/JUnit 版本:

JavascriptExecutor js = (JavascriptExecutor) driver;
Object o = js.executeScript("return '123'");

【讨论】:

  • 感谢您的回复。但是,在我的应用程序中,加载了 100 个函数的 js 文件。我应该通过JSExecutor编写每个函数吗?我应该怎么做才能重用这些函数?
  • 您是否在这些函数中执行其他命令(即:doStore)?如果是这样,那就行不通了。您现在需要使用此 ExecuteScript 方法将每个命令隔离到面向对象代码中的给定行(除非我在网上找到一些文档证明我不正确)。我自己到处都看过。另一种方法是编写一个包含所有函数的类,并为传递给 ExecuteScript 的脚本获取常量(或静态方法,如果你的 do* 函数/命令有参数)。
【解决方案3】:

没有办法像 Selenium RC 那样通过您的测试运行注入 javascript,这里有一个关于一些可能的迁移提示的线程:http://groups.google.com/group/selenium-developers/browse_thread/thread/15cb4b774b734cc7/c7baf10db0bc2bc0

【讨论】:

    猜你喜欢
    • 2011-03-18
    • 1970-01-01
    • 1970-01-01
    • 2015-10-23
    • 2012-06-30
    • 2011-10-11
    • 2013-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多