如何在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
相关产品推荐
相关产品推荐

