量角器:如何迭代和比较从应用程序和场景表中使用转发器获得的值

时间:2015-08-06 06:40:02

标签: javascript angularjs selenium protractor

我使用转发器功能和方案数据表中的预期值从应用程序中获取实际值列表。如何存储和比较实际值与预期值?

方案: 场景:作为用户,我应该能够登录到该应用程序并查看用户列表和注册日期   鉴于我使用用户名" abcd"登录应用程序和密码" passwOrd123"   当我打开视图会员注册时   然后必须列出以下用户和注册日期:   |用户名| registrationDate |   | user1 | 05/30/2010 |   | user2 | 06/11/2009 |

下面是我为后续步骤编写的实现代码:



this.Then(/^Then the following users and registration date must be listed:$/, function (table) {

        var data = table.hashes();

        element.all(by.repeater('members in member list')).then(function(member) {

            for (i=0;i<member.length;i++) {
                member[i].element(by.binding('app.memberName')).getText().then(function (actualMemberName) {
                    console.log("Member Name: " + actualMemberName);
                });

                member[i].element(by.binding("app.reg.date | jsonDate:'MM/dd/yyyy'")).getText().then(function (actualRegDate) {
                    console.log("Actual Registration Date: " + actualRegDate);
                });
            }
        });
    });
&#13;
&#13;
&#13;

会员&#39;成员返回的用户列表列表不会始终保持相同的顺序。

1 个答案:

答案 0 :(得分:1)

您使用的是哪种框架?如果您使用的是Jasmine框架,那么您可以在 for 循环中添加 expect 语句,以验证实际值和期望值,例如此代码段 -

expect(actual_value).toEqual(expected_value);

如果您没有使用任何框架,那么您可以尝试使用普通的javascript验证这些值,例如此片段 -

if(actual_value === expected_value)
    //do something
else
    //print error

OR

if(actual_value.localeCompare(expected_value) == 0)
    //do something
else
    //print error

两种功能的工作方式相同。

要存储来自转发器功能的用户列表,请查看MAP function  在量角器中可用。它将来自 element.all()函数的数据串行存储在数组中。您可以稍后使用该数组来检查表。这是一个例子 -

element.all('selector here').map(function(ele){
    return ele.getText().then(function(arrayText){
            return arrayText;
        });
    }).then(function(arrayText){
            //arrayText is an array with list of elements from repeater function
            //Use the arrayText and compare it to your table
    });

希望这有帮助。