You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium JS调用elementIsEnabled方法报错问题咨询

报错原因

两个报错均为Selenium WebDriver JavaScript版本API使用不规范导致,具体对应原因如下:

  • 第一个报错TypeError: Cannot read property 'elementIsEnabled' of undefined:until是selenium-webdriver独立导出的等待条件工具模块,并不挂载在driver实例对象上,代码中写driver.until时取到的值为undefined,后续调用elementIsEnabled方法自然会抛出类型错误。
  • 第二个报错ReferenceError: until is not defined:调整代码时直接使用了until变量,但顶部依赖导入语句中,仅从selenium-webdriver解构导入了Builder和By两个成员,没有导入until,当前代码作用域内不存在该变量,因此触发引用错误。

额外注意:即便正确导入until,直接把By定位器对象传给until.elementIsEnabled()也会运行异常,该方法要求传入的参数是已定位到的WebElement实例,而非定位选择器。

修复步骤
  1. 修正顶部依赖导入语句,补充导入until模块:
const { expect } = require("chai"); 
// 补充解构导入until成员
const {Builder, By, until} = require("selenium-webdriver");
  1. 修正等待逻辑,先定位目标输入框元素再传入等待方法,移除错误的driver.前缀调用,同时补充浏览器退出逻辑避免资源泄漏,完整修复后代码如下:
describe("Dynamic controls",function(){
  it("Remove/add checkbox",async function(){
    const driver = new Builder().forBrowser("firefox").build();
    try {
      await driver.get("https://the-internet.herokuapp.com/dynamic_controls");
      await driver.findElement(By.css("#input-example>button")).click();
      // 先定位目标输入框元素
      const targetInput = driver.findElement(By.css('#input-example > input[type=text]'));
      // 等待输入框变为可用状态
      await driver.wait(until.elementIsEnabled(targetInput), 30000);        
      await driver.findElement(By.css("#checkbox-example>button")).click();
    } finally {
      // 用例执行完成后关闭浏览器实例
      await driver.quit();
    }
  });
});

内容的提问来源于stack exchange,提问作者Dmitry Maslo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 03:24:18