【问题标题】:External javascript not loaded in SeleniumSelenium 中未加载外部 javascript
【发布时间】:2018-02-27 13:27:18
【问题描述】:

我正在尝试使用外部 javascript 源将 Javascript 代码注入 Selenium webdriver。所以基本上,我用这个注入 DOM:

public class Testing extends BaseInitialization{

public static void main(String args[]) {
    new Testing();
}

public Testing() {
    driver.get("http://www.google.com/");
    JavascriptExecutor jse = (JavascriptExecutor) driver;
    jse
            .executeScript("var s=window.document.createElement('script');" +
                    " s.type = 'text/javascript'; s.src='elementController.js';" +
                    " window.document.head.appendChild(s);");
    jse.executeScript("test();");
}
}

这是我的 js 文件:

document.ourFunction =  function(){
     alert("Hey");
}

function test() {
     alert(1);
}

这是我项目结构中的一个 sn-p(js 文件与测试类处于同一级别):

但由于某种原因,根本没有加载外部 javascript。注入本身似乎有效,因为当我用直接 javascript 替换源文件名(例如警报)时,它可以工作(浏览器打开,它转到 google 和警报),但是当我尝试从 js 文件中获取 javascript 时,它失败。我做错了什么?

【问题讨论】:

  • 甚至脚本节点插入到 DOM 树中。但浏览器不执行其中的javascript。您可以在 Devtool 的控制台中执行您的 javascript 代码,您会发现该脚本也不起作用。我还没有找到浏览器动态插入的脚本节点不执行的原因。
  • 如果改成 jse.executeScript("ourFunction();"); 会发生什么stackoverflow.com/questions/17385779/…
  • 很遗憾不起作用
  • 请在 jse.executeScript("test();"); 之前添加一些 sleep()

标签: javascript java selenium


【解决方案1】:

您必须将脚本节点插入头节点,这将使浏览器执行脚本节点或src文件中的javascript。这很重要。

以下代码在我的 chrome 上运行时运行良好,会弹出带有测试的警报。

public void aa() throws InterruptedException {

String script = 
        "var head= document.getElementsByTagName('head')[0];" +
        "var script= document.createElement('script');" +
        "script.type= 'text/javascript';" +
        "script.src= 'test.js';" +
        "head.appendChild(script);";

driver.get("file:///C:/workspace/js-projects/tey/reports/cucumber_report.html");
Thread.sleep(3000);

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript(script);

Thread.sleep(3000);
js.executeScript("test()");

Thread.sleep(10000);
}

test.js 的内容

function test() {
    alert('test');
}

【讨论】:

  • 请在调用javascript函数之前添加一些sleep():test
【解决方案2】:

好的。我想更新答案。我不确定,但也许有以下输入的事情是它永远不会找到这个外部位置,因为它试图从谷歌服务器查看这个文件。但是当我使用 Scanner 类制作一个 javascript 字符串并将其直接添加到 s.src 时,它似乎可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多