我正在使用 Selenium WebDriver 尝试将外部 javascript 文件插入到 DOM 中,而不是将整个内容输入到 executeScript 中。
看起来它正确地将节点放入 DOM 中,但它只是忽略源,即所述源 js 文件上的函数没有运行。
这是我的代码:
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
public class Example {
public static void main(String[] args) {
WebDriver driver = new FirefoxDriver();
driver.get("http://google.com");
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("document.getElementsByTagName('head')[0].innerHTML += '<script src=\"<PATH_TO_FILE>\" type=\"text/javascript\"></script>';");
}
}
我链接到的 javascript 文件的代码是
alert("hi Nate");
我已经将 js 文件放在我的本地主机上,我使用 file:/// 调用它,并在外部服务器上尝试了它。没有骰子。
此外,在 Java 部分,我尝试使用该技巧附加 'scr'+'ipt',但仍然无效。当我使用 Firefox 的检查元素检查 DOM 时,我可以看到它正确加载了脚本节点,所以我很困惑。
我也尝试过这个解决方案,它显然是为另一个版本的 Selenium(不是 webdriver)制作的,因此至少没有工作:加载一个包含 selenium 中有用测试功能的外部 js 文件
根据这个:http : //docs.seleniumhq.org/docs/appendix_migrating_from_rc_to_webdriver.jsp
那么下面的工作在 webdriver 中吗?
WebDriver driver = new FirefoxDriver(); ((JavascriptExecutor) driver) .executeScript("var s=window.document.createElement('script');\ s.src='somescript.js';\ window.document.head.appendChild(s);");