循环并尝试打印到控制台,我的选择和点击无法正常工作。我的每个列表项都有文本,列表项本身是可点击的。我试图遍历列表以匹配文本(choice_item),如果匹配则打印到控制台并单击该项。
但是当我检查输出时,它会点击它之后的下一个项目。 例如,它将打印:
第1项
第2项
选择发现:第2项
第3项
然后单击项目3而不是项目2(我想在列表中找到的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);
});
};
答案 0 :(得分:2)
按....addConverterFactory(GsonConverterFactory.create(gson))
文字过滤元素,然后点击它:
choice_item
请注意,此处不需要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()
检查。
答案 1 :(得分: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()
。