如何在Protractor中获取页面元素数量并返回计数变量?
解决Protractor中异步获取元素数量并返回的问题
这个问题我太熟悉啦!因为Protractor里几乎所有操作都是异步的,你遇到的就是典型的异步回调作用域问题——count变量只在then的回调函数内部有效,外部根本拿不到,而且你的函数会在异步操作完成前就先返回了,自然找不到count。
下面给你两种靠谱的解决方案:
方案一:返回Promise链
既然count()方法本身返回的是一个Promise,我们可以直接把整个Promise链返回出去,让调用方通过then来获取最终的count值:
public countElements(){ // 返回整个Promise,在then里把count作为resolve的值返回 return element.all(by.repeater('app in userApps')).count().then(function(count) { console.log(count); return count; }); }
调用这个方法的时候,需要这样处理:
countElements().then(function(elementCount) { // 在这里就能拿到正确的count值啦 console.log("元素总数:", elementCount); });
方案二:使用async/await(更简洁的现代写法)
如果你用的是支持ES2017及以上的环境,推荐用async/await语法,它能让异步代码看起来像同步代码一样直观:
public async countElements(){ // await会等待count()的异步操作完成,直接拿到结果 const count = await element.all(by.repeater('app in userApps')).count(); console.log(count); return count; }
调用的时候同样要用await(注意调用的函数也得是async函数):
async function getCount() { const elementCount = await countElements(); console.log("元素总数:", elementCount); } getCount();
简单来说,核心就是要适应Protractor的异步机制——不要试图直接同步返回异步操作的结果,而是通过Promise或者async/await来处理异步流程,这样才能拿到正确的元素数量。
内容的提问来源于stack exchange,提问作者Jacob
相关产品推荐
相关产品推荐

