【问题标题】:How to load local javascript file into DOM using selenium webdriver?如何使用 selenium webdriver 将本地 javascript 文件加载到 DOM 中?
【发布时间】:2015-03-01 08:53:44
【问题描述】:

我有一个 javascript 文件,它可以在脚本标记内编写的 HTML 页面中正常工作,但同时当我尝试读取文件并使用 webdriver 加载时,它显示了一些异常。 下面是我的代码。

    List<String> lines = new ArrayList<String>();
        try {
            lines = Files.readLines(fileEntry, Charset.defaultCharset());
            StringBuilder sb = new StringBuilder();
            for (String line : lines) {
                sb.append(line);
            }
            if (!fileEntry.getName().endsWith(".js")) {
                continue;
            }
            JavascriptExecutor je = (JavascriptExecutor) driver;
            String script =
                "var scriptElt = document.createElement('script');"
                    + "scriptElt.type = 'text/javascript';"
                    + "scriptElt.innerHtml = " + sb.toString() + ";"
                    + "document.body.appendChild(scriptElt);";
            je.executeScript(script);`

【问题讨论】:

  • org.openqa.selenium.WebDriverException:未知错误:Runtime.evaluate 抛出异常:SyntaxError: Unexpected token ";"
  • 你读入的文件里有什么?正如我的 ByteHamster 已经做过的那样,我建议你告诉我们堆栈跟踪。
  • 当我对示例 html 页面使用相同的 js 文件时,工作方式相同
  • 简单的.js文件。我在 HTML 中使用它,例如 。它适用于两种情况。但不是从 WEBDRIVER 加载时
  • 我读取JS文件的方式有问题吗?我假设空格或换行符。

标签: java javascript jquery selenium selenium-webdriver


【解决方案1】:

你错过了引号。此外,如果文件中有引号,则会导致错误。这一行:

+ "scriptElt.innerHtml = " + sb.toString() + ";"

应该是这样的:

+ "scriptElt.innerHtml = '" + sb.toString().replace("'","\\'") + "';"

【讨论】:

  • 我添加了引号,但我的 js 文件有这样的内容:'&lt;iframe frameborder="0" tabindex="-1"。这是两个引号的组合。上述解决方案无效。
  • 我的代码示例还将引号替换为\'。也应该使用您发布的代码。是否有任何新的错误消息?
猜你喜欢
  • 2013-06-27
  • 1970-01-01
  • 1970-01-01
  • 2021-05-15
  • 2023-04-01
  • 2012-06-03
  • 1970-01-01
  • 1970-01-01
  • 2019-04-13
相关资源
最近更新 更多