2

我正在使用 UI 自动化为我的应用程序开发测试用例。我需要测试的一项操作是将表格置于“编辑”模式,然后重新排列表格中的单元格。

我可以导航到视图并点击我放入导航栏中的“编辑”按钮。

但是,我似乎无法弄清楚如何正确拖动屏幕。

我发现 UIElement 是表视图 (app.mainWindow().tables()[0]) 并执行了拖动:

table.dragInsideWithOptions({startOffset:{x:0.8, y:0.3}, endOffset:{x:0.8, y:0.8}, duration:1.5});

但是,表格需要触摸并按住单元格的句柄,然后拖动。我不知道如何执行这样的操作。

任何人都知道如何做到这一点?

4

1 回答 1

1

我对“拖放”有几乎相同的问题。首先,您需要尝试拖动的不是表格而是单元格。第二点是超时。像往常一样,应用程序对拖动(触摸并按住)有超时反应。此操作可能需要 1 或 2 秒。尝试增加 dragFromToForDuration 的超时参数。对于我的应用程序,设置 6 - 8 秒就足够了。

尝试实现您自己的函数,该函数将采用 2 个参数。第一个参数 - 要拖动的单元格对象。第二个参数 - 您拖动单元格的另一个单元格对象将被删除。请注意,FROMTO对象都在屏幕上可见时,此功能才有效。

function reorderCellsInTable(from, to)
{
    if ( from.checkIsValid() && to.checkIsValid() )
    {
        if ( !from.isVisible() )
        {
            from.scrollToVisible();
            //put 1 second delay if needed
        }
        var fromObjRect = from.rect();
        // setting drag point into the middle of the cell. You may need to change this point in order to drag an object from required point. 
        var sourceX = fromObjRect.origin.x + fromObjRect.size.width/2;
        var sourceY = fromObjRect.origin.y + fromObjRect.size.height/2;
        var toObjRect = to.rect();
        // setting drop point into the middle of the cell. The same as the drag point - you may meed to change the point to drop bellow or above the drop point
        var destinationX = toObjRect.origin.x + toObjRect.size.width/2;
        var destinationY = toObjRect.origin.y + toObjRect.size.height/2;

        UIATarget.localTarget().dragFromToForDuration({x:sourceX, y:sourceY}, {x:destinationX, y:destinationY}, 8);
        }
    }

例如,您有 5 个单元格。您需要拖动第二个并将其放在最后。函数调用示例:

var cellToReorder = tableView()[<your table view>].cells()[<cell#2NameOrIndex>];
var cellToDrop = tableView()[<your table view>].cells()[<cell#5NameOrIndex>];
reorderCellsInTable(cellToReorder, cellToDrop);
于 2012-07-09T11:37:27.170 回答