我正在使用Selenium WebDriver尝试将外部JavaScript文件插入DOM中,而不是在executeScript中键入整个脚本。
看起来它正确地将
我正在使用Selenium WebDriver尝试将外部JavaScript文件插入DOM中,而不是在executeScript中键入整个脚本。
看起来它正确地将
WebDriver driver = new FirefoxDriver();
((JavascriptExecutor) driver)
.executeScript("var s=window.document.createElement('script');\
s.src='somescript.js';\
window.document.head.appendChild(s);");
将我们的JS文件注入到DOM中
从本地服务器向浏览器应用程序注入我们的JS文件,以便我们可以使用文档对象访问我们的函数。
injectingToDOM.js
var getHeadTag = document.getElementsByTagName('head')[0];
var newScriptTag = document.createElement('script');
newScriptTag.type='text/javascript';
newScriptTag.src='http://localhost:8088/WebApplication/OurOwnJavaScriptFile.js';
// adding <script> to <head>
getHeadTag.appendChild(newScriptTag);
OurSeleniumCode.java
String baseURL = "http://-----/";
driver = new FirefoxDriver();
driver.navigate().to(baseURL);
JavascriptExecutor jse = (JavascriptExecutor) driver;
Scanner sc = new Scanner(new FileInputStream(new File("injectingToDOM.js")));
String inject = "";
while (sc.hasNext()) {
String[] s = sc.next().split("\r\n");
for (int i = 0; i < s.length; i++) {
inject += s[i];
inject += " ";
}
}
jse.executeScript(inject);
jse.executeScript("return ourFunction");
OurOwnJavaScriptFile.js
document.ourFunction = function(){ .....}
注意:如果您将JS文件作为字符串传递给executeScript(),则不要在JavaScript代码中使用任何注释,例如injectingToDOM.js删除所有注释数据。
/js/somescript.js
或者在你本地电脑上file://home/me/js/somescript.js
。 - HMR