根据量角器中的比较单击元素

时间:2016-07-04 07:34:13

标签: protractor

在使用量角器的e2e测试中,我从文件中获取数据并检查UI中是否存在该数据。如果存在,则单击它。

页面中大约有10章,我的文件有2章(表示为chapterName)。我想检查我的文件中的chapterNames是否在UI中,如果是,则逐个点击。我是使用下面的代码,但不知道如何进行循环

如何在量角器中做到这一点?

element.all(by.repeater('chapter in chapters')).filter(function (ele,index) {
                return ele.getText().then(function(text){

                return text === chapterName;

            });
            }).click(); 

3 个答案:

答案 0 :(得分:0)

您需要使用闭包函数来实现promise中的循环。请看下面的示例代码。

 function clickChapterByName(){
   var chapterNames= ['chapter-1','chapter-2','chapter-3','chapter-4','chapter-5']
   for(i=0;i<chapterNames.length;i++){
       function closure(chapterName) {
           element.all(by.repeater('chapter in chapters')).filter(function (ele,index) {
               return ele.getText().then(function(text){
                   return text === chapterName;
               });
           }).click();
       }
       closure(chapterNames[i])
   }
  }

答案 1 :(得分:0)

不太确定我是对的,但我认为你几乎就在那里:

element.all(by.repeater('chapter in chapters')).filter(element=> {
                return ele.getText().then(text=> text === chapterName);
            });
        }).map(element=> element.click());

.filter的结果只是匹配条件的元素,因此您将获得新的ArrayElementFinder,并且可以使用.map()

进行迭代。

答案 2 :(得分:0)

根据您的要求,您需要进行循环操作。因此,您可以通过量角器api中提供的each()方法实现此目的。

代码段:

element.all(by.repeater('chapter in chapters')).
            each(function (ele, index) {//for looping purpose
                   ele.getText().then(function(text){
                                      if(text == inputChapterName){
                                         ele.click();//click chapter is 
                                        }
                                   });
           })
相关问题