2016-02-06 48 views
1

循環並嘗試打印到控制檯我的選擇和點擊不能正常工作。我的每個列表項目都有文本,並且列表項目本身是可點擊的。我試圖遍歷列表以匹配文本(choice_item),如果它匹配打印到控制檯並單擊該項目。量角器循環不能點擊正確的項目

但是當我檢查我的輸出時,它會在它後面點擊下一個項目。 例如,將打印:

項目1

項目2

選擇實測值:項目2

項目3

然後點擊代替項目2項目3(該choice_item,我想在列表中找到)。任何解釋如何解決這個問題和/或控制流量錯誤,我將不勝感激!

this.getListItems = function(choice_item){ 
    var choice = ""; 
    this.getSelectionsList().filter(function(elem, index) { 
     return elem.element(by.css('.choicename')).getText().then(function(text) { 
      if(text === choice_item){ 
       console.log("choice found:"+ choice_item); 
       choice = text; 
       elem.click(); 
       return true; 
      } 
     }); 
    }).then(function(items) { 
     expect(choice).toBe(choice_item); 
    }); 
}; 

回答

1

我認爲這是一個控制流錯誤。 試試這個方法:

this.getListItems = function(choice_item){ 
    var choice = ""; 
    this.getSelectionsList().filter(function(elem, index) { 
     return elem.element(by.css('.choicename')).getText(); //it returns promise 

    }).then(function(text) { 
     //getText() Promise fulfill 
     if(text === choice_item){ 
      console.log("choice found:"+ choice_item); 
      choice = text; 
      elem.click(); 
      browser.sleep(2000); 
      expect(choice).toBe(choice_item); 
     } 

    }); 
}; 

的點擊方法的最佳途徑。做工廠的功能,例如:

var click1 = function (element){ 
    element.click(); 
    return new Promise (function (fulfill, reject){ 
     setTimeout(function(){ 
     fulfill(); 
     },2000); 
    }  
}); 

,您可以使用此:

click1(elem).then(function(){ 
//the code 
}); 

但在代碼中click()事件影響什麼,因爲getText()click()早。

2

濾波由文本的元素,並單擊它:

this.getListItems = function(choice_item) { 
    var listItems = this.getSelectionsList().filter(function(elem) { 
     return elem.element(by.css('.choicename')).getText().then(function(text) { 
      return text === choice_item; 
     }); 
    }); 

    listItems.first().click(); 
}; 

注意,沒有必要到這裏expect()因爲你已經應用檢查,同時過濾列表項。