Is there a way to resolve multiple promises with Protractor?

后端 未结 3 1333
终归单人心
终归单人心 2021-01-01 23:35

I have this:

element(by.id(\'x\')).sendKeys(\'xxx\').then(function(text) {
  element(by.id(\'y\')).sendKeys(\'yyy\').then(function(text) {
     element(by.id         


        
3条回答
  •  旧巷少年郎
    2021-01-02 00:23

    this is a bit after the fact, but:

    var x = element(by.id('x')).sendKeys('xxx');
    var y = element(by.id('y')).sendKeys('yyy');
    var z = element(by.id('z')).sendKeys('zzz');
    
    myFun(x,y,z).then(function(){
       expect(element(by.id('myButton')).isEnabled()).toBe(true);
    });
    
    
    // in a common function library
    function myFun(Xel,Yel,Zel) {
      return protractor.promise.all([Xel,Yel,Zel]).then(function(results){
         var xText = results[0];
         var yText = results[1];
         var zText = results[2];
    
      });
    }
    

    but an even better way:

    var x = element(by.id('x')).sendKeys('xxx');
    var y = element(by.id('y')).sendKeys('yyy');
    var z = element(by.id('z')).sendKeys('zzz');
    
    myFun(x,y,z);
    //isEnabled() is contained in the expect() function, so it'll wait for
    // myFun() promise to be fulfilled
    expect(element(by.id('myButton')).isEnabled()).toBe(true);
    
    
    // in a common function library
    function myFun(Xel,Yel,Zel) {
      return protractor.promise.all([Xel,Yel,Zel]).then(function(results){
         var xText = results[0];
         var yText = results[1];
         var zText = results[2];
    
      });
    }
    

    another way is to chain the .thens together:

    element(by.id('x')).sendKeys('xxx').
      then(function(xtext){
        element(by.id('y')).sendKeys('yyy');
    
      }).then(function(ytext){
         element(by.id('z')).sendKeys('zzz');
    
      }).then(function(ztext){
        expect(element(by.id('myButton')).isEnabled()).toBe(true);
    
      });
    

提交回复
热议问题