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

如何在JavaScript中连续调用异步函数?WebDriver测试链式调用报错求助

解决TypeError: inputUsername(...).inputPassword is not a function报错

这个报错的核心原因是你的页面对象中inputUsername方法没有返回当前实例,导致无法进行链式调用。要实现inputUsername().inputPassword()这种连续调用的写法,每个方法必须返回this(当前LoginPage实例)。

具体修复步骤:

  • 检查你的LoginPage类实现,确保每个输入/操作方法都返回this:
class LoginPage {
  // 示例WebDriver操作,根据你的实际元素定位修改
  inputUsername(username) {
    driver.findElement(By.id('username')).sendKeys(username);
    // 关键:返回当前实例,支持链式调用
    return this;
  }

  inputPassword(password) {
    driver.findElement(By.id('password')).sendKeys(password);
    return this;
  }

  clickLogin() {
    driver.findElement(By.css('[type="submit"]')).click();
    return this;
  }
}
  • 如果你的WebDriver操作是异步的(大部分WebDriver方法返回Promise),需要改用async/await,同时保持返回实例:
class LoginPage {
  async inputUsername(username) {
    await driver.findElement(By.id('username')).sendKeys(username);
    return this;
  }

  async inputPassword(password) {
    await driver.findElement(By.id('password')).sendKeys(password);
    return this;
  }

  async clickLogin() {
    await driver.findElement(By.css('[type="submit"]')).click();
    return this;
  }
}
  • 测试脚本中调用时,异步写法要加上await:
// 实例化页面对象
const loginPageInstance = new LoginPage();

// 正确的链式调用
await loginPageInstance
  .inputUsername('test-user')
  .inputPassword('test-pass')
  .clickLogin();

内容的提问来源于stack exchange,提问作者Duy Phạm

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 09:15:05