总结我想找出一种方法,使用 's 将标签添加到 DOM 的头部,或者任何其他方法都可以。<script>SeleniumJavascriptExecutor我尝试了很多方法,也发现了一些类似的主题,但没有一个解决了我的问题,这就是为什么我觉得有必要在这里问它。例如:这个问题中建议的解决方案并没有解决我的问题。有些人说这对他们有用,但不,它不适合我。我一直在尝试执行什么?以下是我要执行的代码的小片段: WebDriver driver = new FirefoxDriver(); JavascriptExecutor jse = (JavascriptExecutor) driver; jse.executeScript("var s = document.createElement('script');"); jse.executeScript("s.type = 'text/javascript';"); jse.executeScript("s.text = 'function foo() {console.log('foo')}';"); jse.executeScript("window.document.head.appendChild(s);");我只是跳过了上面的代码,您可以使用等导航到网页,然后尝试执行脚本。driver.get()另外,将包含我想使用的实际脚本,所以我只是放了一个函数来给出这个想法。s.textfoo()上面的代码会在您运行它时引发此错误:Exception in thread "main" org.openqa.selenium.JavascriptException: ReferenceError: s is not defined到目前为止,我已经尝试了在互联网上找到的所有可能的解决方案,但似乎没有一个有效。
2 回答

达令说
TA贡献1821条经验 获得超6个赞
OP提出了以下解决方案:
jse.executeScript("var s=window.document.createElement('script');" +
"s.type = 'text/javascript';" + "s.text = function foo() {console.log('foo')};" +
"window.document.head.appendChild(s);");

慕森卡
TA贡献1806条经验 获得超8个赞
首先,此行无效。
jse.executeScript("s.text = 'function foo() {console.log('foo')}';");
请注意如何将单引号文本括在单引号中。将一个集合用作“\””
我个人会通过做(编辑使其成为全局函数)来做到这一点:
using OpenQA.Selenium.Support.Extensions; driver.ExecuteJavascript("window.foo = function foo() {console.log('foo')}");
就这么简单。您正在通过执行此操作将 foo 注册为方法。执行此javascript后,您可以手动进入浏览器开发人员工具并调用“foo()”进行检查。此外,您可以通过直接在控制台中注册来检查这一点。只需在浏览器控制台中输入“function foo() {console.log('foo')}”,然后调用“foo()”。
无需将其添加为脚本标记。
编辑#2:我修复了上面的代码建议,以便将方法分配给窗口,从而可以全局访问,并且在javascript执行器运行代码的匿名脚本之外。这不起作用的原始问题已通过此解决,至少在我对它的测试中。
添加回答
举报
0/150
提交
取消