首页 > 解决方案 > 循环未正确更改元素位置

问题描述

我想自动化一个测试用例,我需要按项目的数值降序对项目进行排序。对于排序用户故事列表项可能会改变。在开始时,他们从头开始查看此。我为此使用了哈希

 var values = $$('div.vertical-list-container div.list-group-item');
 var numberHash = { 'One': 1, 'Two': 2, 'Three': 3, 'Four': 4, 'Five': 5, 'Six': 6, 'Seven': 7, 'Eight': 8, 'Nine': 9, 'Ten': 10 };

在我创建了收集所有这些元素的循环之后。

 for(var i=0;i<values.length;i++)
            {
                numberArray.push(numberHash[values[i].getText()])
            }

所以现在循环看起来是这样 [1,2,3,4,5,6] 之后,我使用冒泡排序进行降序

 function bubble_Sort(a)
            {
            var swapp;
            var n = a.length-1;
            var x=a;
            do {
                swapp = false;
                for (var i=0; i < n; i++)
                {
                    if (x[i] < x[i+1])
                    {
                       var temp = x[i];
                       x[i] = x[i+1];
                       x[i+1] = temp;
                       swapp = true;
                    }
                }
                n--;
            } while (swapp);
         return x; 
        }
            bubble_Sort(numberArray);

在最后一个循环中,我遇到了问题。

for(var i = 0; i < values.length; i++){
                var elem = values[i];
                var elemNumber = numberHash[values[i].getText()];
                var index = numberArray.findIndex((element) => element == elemNumber);
                var target = values[index];
                elem.dragAndDrop(target);
              }

除 2 之外的所有值都更改了位置。我知道为什么会这样(因为在 .dragAndDrop 函数值 1 低于 6 之后,现在值 2 处于零位置,但循环开始检查下一个位置。所以现在我按此顺序排列了值 = >这个[6,2,5,4,3,1] 而不是 [6,5,4,3,2,1]。有人知道如何解决吗?循环中的问题在哪里?我真的需要对此:(

标签: javascriptnode.jsfor-loopautomationwebdriver-io

解决方案


自己解决

var moved = true
    
    while(moved){

            values = $$('div.vertical-list-container div.list-group-item');
            moved = false
            for(var i = 0; i < values.length; i++){
            var elem = values[i];
            var elemNumber = numberHash[values[i].getText()];
            var index = numberArray.findIndex((element) => element == elemNumber);
            if(i === index){continue}
            var target = values[index];
            elem.dragAndDrop(target);
            moved = true;                   
        }

现在循环正在正确更改值


推荐阅读