Protractor中Cucumber Promise未正确解析问题求助
问题分析与解决方案:Protractor+Cucumber中Promise未解析导致断言失败
你猜的没错,问题根源就是Promise没有正确解析!browser.getTitle()返回的是一个Promise对象,不是直接的标题字符串——你直接把这个Promise和expectedTitle做相等断言,肯定会失败,毕竟一个Promise对象和字符串压根不是一回事儿。
给你两种修正方案,选哪种都可以:
方案1:使用Promise链式调用(传统写法)
把断言逻辑放在.then()回调里,同时一定要return这个Promise,让Cucumber知道要等异步操作完成再往下走:
Then('the title should be {string}', function(expectedTitle) { return browser.getTitle().then(function(actualTitle) { assert.equal(actualTitle, expectedTitle); }); });
方案2:使用async/await(更简洁的现代写法)
现在Protractor和Cucumber都支持async/await语法,用这个写出来的代码可读性更高,不用嵌套then链:
Then('the title should be {string}', async function(expectedTitle) { const actualTitle = await browser.getTitle(); assert.equal(actualTitle, expectedTitle); });
额外提醒
- 不管用哪种方式,都要确保Cucumber能追踪到异步操作的状态:要么return Promise,要么用async函数(async函数本身会返回Promise),不然测试会跳过等待直接执行后续步骤,照样出问题。
- 别再像原来那样把
browser.getTitle().then(...)赋值给变量了,那个变量存的是Promise对象,不是你要的标题字符串哦。
内容的提问来源于stack exchange,提问作者Arnab Datta
相关产品推荐
相关产品推荐

