Angularjs 分选用量角器e2e试验

Angularjs 分选用量角器e2e试验,angularjs,protractor,Angularjs,Protractor,我正在使用量角器编写e2e测试用例。我正在尝试编写排序测试(升序、降序)。这是我的html代码 <tbody> <tr> <td> <a ng-click="sortBy('Name')" href="" style="text-decoration: none;" class=""> Name</a> </td> <td>

我正在使用量角器编写e2e测试用例。我正在尝试编写排序测试(升序、降序)。这是我的html代码

<tbody>
    <tr>
        <td>
         <a ng-click="sortBy('Name')" href="" style="text-decoration: none;" class=""> Name</a>
        </td>
        <td>
         <a ng-click="sortBy('RollNo')" href="" style="text-decoration: none;"> Roll Number</a>
        </td>
        <td>
         <a ng-click="sortBy('subject')" href="" style="text-decoration: none;"> Subject</a>
        </td>     
    </tr>
    <tr>
        <td>ANDREW, STRAUSS</td>
        <td>122</td>
        <td>Maths</td>
    </tr>  
    <tr>
        <td>ANDREW, STRAUSS</td>
        <td>123</td>
        <td>Science</td>
    </tr>      
</tbody>

安德鲁,施特劳斯
122
数学
安德鲁,施特劳斯
123
科学类

我们能测试一下分类吗。如果是,如何进行?

以任何顺序测试排序

  • 单击sortBy元素,以便按顺序对该元素进行排序
  • 从按排序顺序显示的列中获取元素的文本
  • 稍后将每个元素的文本存储在一个数组中,以便稍后检查排序
  • 下一步是将这个未排序的数组复制到一个临时数组中,并对临时数组进行排序
  • 最后一件事是检查元素是否按照您需要的顺序排序,您可以使用
    expect
    语句来验证
使用Javascript
sort()
方法按升序检查排序,使用
reverse()
方法按降序检查排序

const cellElements = element.all(by.css(`table tbody tr td:nth-child(1)`));
const textFields = await cellElements
                .map((el: ElementFinder) => el.getText()
                .then((text: string) => text));

textFields.forEach((description: string, index: number) => {
  if (index > 0) {
    expect(descriptions[index - 1] > description).toBe(true);
  }
});
您可以通过将元素添加到数组中,然后使用已排序的数组验证元素的升序排序。这是一个如何做的示例-

var sorted = [] , unSorted = [];
var ele = element.all(by.css(tbody tr td:nth-of-type(1)));
ele.each(function(eachName){
    eachName.getText().then(function(name){
        unSorted[i] = name;
        i++;
    });
}).then(function(){
    //check sorting
    sorted = unSorted.slice();
    sorted.sort(); //use sort function of Javascript
    expect(sorted).toEqual(unSorted);
});
类似地,您可以尝试使用其他元素来检查案例中的其他排序类型—按RollNo和subject排序。如果由于量角器速度快而面临异步错误问题,则可以将排序验证代码与循环链接起来

另一种方法是使用量角器的
map()。我建议使用这个。这里有一个例子-

    ele.map(function(eachName){
        return eachName.getText().then(function(unSorted){
            return unSorted;
        });
    }).then(function(unSorted){
            var sorted = unSorted.slice();
            sorted = sorted.sort(); //sort the array
            expect(sorted).toEqual(unSorted); //check if both sorted and unsorted arrays are same
    });

希望这能有所帮助。

另一种方法是创建一个包含排序文本字段的数组,然后比较其中的值。对数据进行排序后,可以执行以下操作来测试升序

const cellElements = element.all(by.css(`table tbody tr td:nth-child(1)`));
const textFields = await cellElements
                .map((el: ElementFinder) => el.getText()
                .then((text: string) => text));

textFields.forEach((description: string, index: number) => {
  if (index > 0) {
    expect(descriptions[index - 1] > description).toBe(true);
  }
});
this.Then(/^使用优先级排序升序$/,函数(回调)验证中的操作{
变量排序=[],未排序=[],i=0;
var OperationPriority=element.all(by.xpath('//table/tbody/tr//dx number box/div/input');
console.log(“count”+OperationPriority.count);
操作优先级.map((每个名称)=>{
未排序的[i]=eachName.getText();
i++;
});
sorted=unSorted.slice();
sorted.sort();
控制台日志(已排序);
console.log(未排序);
expect(已排序)。toEqual(未排序);
回调();

});谢谢回复。这里我想测试单个列。比如,如果我点击学生。它应该只测试学生栏。@N123我已经在上面写了相同的答案。它只检查学生专栏。这一切都是关于使用元素和使用数组检查排序的。您也可以使用其他列来测试它。如果你不清楚答案,请告诉我。是的,我不清楚。你能给我举个例子吗。谢谢。@N123用可用于测试排序的步骤更新了答案。@GirishSortur doing
var sorted=unSorted生成一个引用副本,而不是实际的数组副本,因此期望
expect(已排序).toEqual(未排序)将始终为真。您应该使用数组副本,使用slice(),类似于
var sorted=unSorted.slice(0)