【问题标题】:Selenium Java inject new Javascript functionSelenium Java 注入新的 Javascript 函数
【发布时间】:2026-01-26 08:40:01
【问题描述】:

我有一个动态函数,我想在页面加载后添加。我需要这样做,因为函数名取决于我在解析 HTML 后得到的一些变量。现在我已经这样做了:

规范:我正在使用 selenium 3.3.1 和 PhantomJS 1.9.8

((JavascriptExecutor) driver).executeScript(" eval('function getVoteX1() { return 1; }')");
String testScript = (String)((JavascriptExecutor) driver).executeScript(" getVoteX1()");
System.out.println(testScript);

但是当我运行它时,它会抛出错误:

Caused by: org.openqa.selenium.WebDriverException: {"errorMessage":"Can't find variable: getVoteX1","request":{"

注意:最终,getVoteX1 将被其他变量替换,但为简单起见,我先尝试了一个静态名称。

【问题讨论】:

  • 你为什么要executeScript() 两次?在一个步骤中注入和评估。在脚本中执行任意数量的操作。
  • 这只是一个测试。因为我需要先在一些操作之后运行脚本,所以点击这里和那里。但为了简单起见,流程看起来像这样。实际上,我的 Java 代码不会运行 getVoteX1,我只是想确保该函数存在

标签: javascript java selenium


【解决方案1】:

将新函数赋值给window对象,即equivalent to defining a global variable

((JavascriptExecutor) driver).executeScript("window.getVoteX1 = function() { return 1; }");
String testScript = (String)((JavascriptExecutor) driver).executeScript(" getVoteX1()");

【讨论】: