我正在使用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的inspect元素检查DOM时,可以看到它正确地加载了脚本节点,所以我很困惑。
我还尝试了此解决方案,该解决方案显然是针对其他版本的Selenium(而非Webdriver)制作的,因此至少没有用:在selenium中加载包含有用测试功能的外部js文件
据此:http : //docs.seleniumhq.org/docs/appendix_migrating_from_rc_to_webdriver.jsp
您可能正在使用browserbot来获取测试的当前窗口或文档的句柄。幸运的是,WebDriver总是在当前窗口的上下文中评估JS,因此您可以直接使用“窗口”或“文档”。 或者,您可能正在使用browserbot查找元素。在WebDriver中,这样做的习惯是首先找到该元素,然后将其作为参数传递给Javascript。从而:
您可能正在使用browserbot来获取测试的当前窗口或文档的句柄。幸运的是,WebDriver总是在当前窗口的上下文中评估JS,因此您可以直接使用“窗口”或“文档”。
或者,您可能正在使用browserbot查找元素。在WebDriver中,这样做的习惯是首先找到该元素,然后将其作为参数传递给Javascript。从而:
那么以下在webdriver中工作吗?
WebDriver driver = new FirefoxDriver(); ((JavascriptExecutor) driver) .executeScript("var s=window.document.createElement('script');\ s.src='somescript.js';\ window.document.head.appendChild(s);");