使用可重复查找元素数组时量角器测试的问题

时间:2016-10-05 13:16:17

标签: javascript angularjs protractor

我为以下html创建了一个量角器测试:

<div class="well well-sm" data-ng-repeat="feedback in f.feedbackList">
   Rating:&nbsp;{{feedback.rating}}
   <blockquote class="small">{{feedback.comment}}</blockquote>
</div>

在page.js文件中我有:

"use strict";

module.exports = (function () {
  function AdminFeedbackPage() {
    this.comments = element.all(by.repeater('feedback in f.feedbackList').column('feedback.comment')).map(function (comments) {
        return comments.getText();
    });

    this.ratings = element.all(by.repeater('feedback in f.feedbackList').column('feedback.rating')).map(function (ratings) {
        return ratings.getText();
    });
}

return AdminFeedbackPage; })();

然后在我的step.js文件中进行测试:

var feedbackFound = false;
        var feedbackIndex;

        adminFeedbackPage.comments.then(function (commments) {
            for (var i = 0; i < commments.length; i++) {

                console.log("Comments " + i + ": " + commments[i]);

                if (commments[i] == "TestApplicationFeedback") {
                    feedbackIndex = i;
                    console.log("FEEDBACK INDEX - " + feedbackIndex)
                    feedbackFound = true;
                    break;
                }
            }
        }).then(function () {
            expect(feedbackFound).to.be.true;
        }).then(function() {
          adminFeedbackPage.ratings.then(function (ratings) {
              console.log(ratings);
              console.log("RATINGS length " + ratings.length + " and rating is " + ratings[feedbackIndex]);
              expect(ratings[feedbackIndex]).to.equal(3);
          })
        });

我得到以下日志:

评论0:体面的应用

评论1:真的很喜欢

评论2:TestApplicationFeedback

FEEDBACK INDEX - 2

[]

RATINGS长度为0且评级未定义

AssertionError:预期未定义为等于3

这真让我感到困惑,因为评论没有任何问题,但评级只是一个空数组,据我所知,我已经为两者做了同样的事情。

是否有人有任何建议/理由为什么没有找到评级?我怀疑它与page.js文件中的内容有关,但我不知道可能出现什么问题?

谢谢!

1 个答案:

答案 0 :(得分:1)

在上面的评论中解决了这个问题,发布了答案:

这只是一个基于HTML的猜测/建议,一个是子元素,另一个直接在转发器内(这个没有被捕获)。所以我的建议是尝试使用.evaluate() source,它就像在给定元素的范围内一样。因此,替换.column()似乎有效:

element.all(by.repeater('feedback in f.feedbackList')).evaluate('feedback.rating').then(function(val) {
    console.log(val) // should return an array of values (feedback.rating)
})