如何在 Ui Automator 中比较 Ui 对象

How to compare UiObject in Ui Automator

我有两个不同的(或不是-.-)UiObject,我想比较它们。

我可以看看它们是否相同 class 之类的,但这还不够。

我想过使用资源 ID,但找不到访问它的方法(我想在 运行 时间内完成,所以 ui automator viewer 没有帮助... ).

所以我实际上是在问两件事:

  1. 我应该如何比较两个 UiObject(如果不是 100% 肯定,接近它)?
  2. 有没有办法访问资源 ID?

提前致谢。

编辑: 我的想法是:

目前,我可以通过选择 FrameLayout 的第一个实例(对每个屏幕都为真)来访问布局树的根,从而访问其子项(作为 UiObject)

代码示例:

//I get the first object of the current layout screen by
UiObject obj = new UiObject(new UiSelector().className("android.widget.FrameLayout").instance(0));
/*
    code to get rest of the tree ...
*/
/*
    code interact with a button
*/
// now I want to see if the screen changed (completely new or if a new widget appeared) or if its the same
// for that I need to know if the objects are the same
// To compare objects I need their id

我没有写代码的原因是因为我认为它并没有真正增加太多......因为重要的是我不知道该怎么做

视图class有"getId"方法,你可以用它来比较视图。例如,如果您的 class 实现了 OnClickListener,那么您可以像这样检查哪个视图引发了事件:

public void onClick (View view) {
    switch(view.getId()) {
        case R.id.my_button_1:
            // What to do for button 1.
            break;
        case R.id.my_button_2:
            // What to do for button 2.
            break;
        default:
            // Unknown view
    }
}

嗯,我明白了这么多:

  • 使用 UI Automator 时,它不与任何应用程序相关联,因此无法获取应用程序的视图
  • 无法访问Ui对象对应的View的id(同上)
  • 必须通过试探法进行比较,而不是 100% 肯定。

综上所述,我想要的确实是不可能的