Macaca NodeJS 循环获取元素属性方法

@zsmjluo · 2016年12月16日 · 最后由 0x88 回复于 2016年12月19日 · 2295 次阅读

因为 Macaca 的缘故接触到 nodeJS,nodeJS 的异步思想有时候确实让人很头疼。

最近遇到这样一个场景,需要循环获取滚动条的值,直到滚动条的值等于 100% 再执行下一步。很郁闷的是 node 的异步思想让这个需求实现起来并没有那么简单,while 循环直接就 GG 了!经过一番折腾,给出如下解决方案,分享给小伙伴!一句话总结就是:把获取元素属性的操作封装成一个函数递归调用!代码如下:

d.addPromiseChainMethod('waitForElmentValueByName', function(elementName){
          return this
             .elementByName(elementName).getProperty("value")
             .then(function(value){
               if(value != "100%"){
                 return driver.waitForElmentValueByName(elementName)}
               else{
                 return value;
              }
      })
});

上述代码中,elementName 是元素的 name 属性,相对应的可以使用其他元素查找的 api。同样的,如果需要判断其它属性也只需要做对应修改即可!driver 变量我定义成了全局变量。

共收到 4 条回复 时间 点赞

可以看一下 bluebird 的 Promise.all.

#2 楼 @0x88 Promise.all 能怎么弄,我感觉楼主这个已经很不错了。

根据需求是要执行完循环才下一步是吧?而 bluebird 的方法一定会等到执行完了才会执行下一步,不用去判断是否执行完。具体百度 bluebird 官网。

var execpro=function(){
  return new Promise(function(resolve, reject) {
      funtion({ 
            resolve()
        })
     //执行循环程序的方法
     })
}
return execpro()
.then(下一步)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册