• #13 楼 @runaway_girl 解决了,在拖拽完之后 i-1 就好了·

  • #13 楼 @runaway_girl 恩,我那代码运行过,只获取到第一个 app 应用的信息,我想测试的是循环遍历所有 app 然后拖动符合的 app 成一个文件夹,问题是相邻的两个后一个不能循环到,

  • #10 楼 @runaway_girl 我的需求就是到 home 界面把界面的除了文件夹外所有应用图标都拖动到第一个循环到的应用图标位置。碰到问题是:只要是相邻的两个要拖动的应用图标就只能拖动前一个后一个就不可以。假如一排有 5 个 app 图标,for 循环只能拿到 1,3,5 这 3 个,而 2 ,4for 循环没遍历 2 ,4 这个 2 个 app。
    。。。 我知道每拖动成功一个 app 图标时候,root UiObjcet 的 child count 就会-1 ,按你说的只能循环到第一个 app 图标,其他遍历不到。

  • int count = ob.getChildCount();
    TestHelper.e(" count :" + count);
    if (count > 1) {
    Rect r = null;
    List list = new ArrayList<>();
    for (int i = 0; i < count; i++) {
    UiObject obj = null;
    if (i != 0)
    obj = ob.getChild(new UiSelector().index(1));

    else
    obj = ob.getChild(new UiSelector().index(i));

    if (null != obj) {

    String txtName = obj.getText().toString();

    TestHelper.e("obj text :" + txtName + ", i=" + i);

    if (! TextUtils.isEmpty(txtName) && data.contains(txtName)) {

    TestHelper.e(" 符合的 app:" + txtName);
    list.add(obj);
    if (null == r) {
    r = obj.getBounds();
    } else {
    TestHelper.e("dragTo...");
    obj.dragTo(r.centerX(), r.centerY(), STEPS);//30
    Thread.sleep(SLEEP_TIME);//1000
    obj.waitUntilGone(SLEEP_TIME);

    }
    }

    }

    }

    不行哦,这样只循环到第一个,其他打印不出来。

  • #5 楼 @runaway_girl for (int i = 0; i < count; i++) {
    UiObject obj = ob.getChild(new UiSelector().index(i));

    if (null != obj) {
    String txtName = obj.getText().toString();

    TestHelper.e("obj text :" + txtName + ", i=" + i);
    if (! TextUtils.isEmpty(txtName) && data.contains(txtName)) {
    TestHelper.e(" 符合的 app:" + txtName);
    list.add(obj);
    if (null == r) {
    r = obj.getBounds();
    } else {
    TestHelper.e("dragTo...");
    obj.dragTo(r.centerX(), r.centerY(), STEPS);//30
    Thread.sleep(SLEEP_TIME);//1000
    obj.waitUntilGone(SLEEP_TIME);

    }
    // }
    }

    }

    }

  • #5 楼 @runaway_girl 上面问题是我最近遇到的一个麻烦问题,想请教你一下。跟之前回复的没关系哈,

  • #5 楼 @runaway_girl 对啊,碰到这个麻烦问题,就是在桌面我想把全部符合的应用图标拖进一个文件夹,所以用 for 循环遍历获取 child.
    int count = ob.getChildCount();
    for (int i = 0; i < count; i++) {
    UiObject obj = ob.getChild(new UiSelector().index(i));

    但是,当两个相邻的应用刚好是我要拖动的,拖动时候只能拖动第一个,到第二个的时候会跳过去 for 循环都循环不到,打印语句没有打印,但是我去掉 drapto 拖动语句时候,是全部可以打印出来的。大概我知道当拖动完一个应用时候,这是 child 的数量是动态的减少了一个的,但是我纳闷的是为啥 for 循环不到

  • 我现在用 UiObject2 做 drap 拖拽时候,一个 for 循环里面只能把第二个 obj 拖动一次就将结束测试了。当我想把第三个也拖动的时候已经没用了 测试结束,郁闷

  • 当然对象必须要是 Uiobject 而不是 Uiobject2

  • performTwoPointerGesture