gpt4 book ai didi

javascript - Selenium 中未加载外部 javascript

转载 作者:行者123 更新时间:2023-12-02 12:14:29 26 4
gpt4 key购买 nike

我正在尝试使用外部 javascript 源将 Javascript 代码注入(inject)到 Selenium webdriver 中。所以基本上,我用这个注入(inject) 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);
}

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

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

最佳答案

您必须将脚本节点插入头节点,这将使浏览器执行脚本节点或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 - Selenium 中未加载外部 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46288947/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com