如何在Ui Automator中比较UiObject



我有两个不同的(或者不是-.-)UiObjects,我想对它们进行比较。

我可以看看他们是否属于同一类,诸如此类,但这还不够。

我想过使用资源id,但我找不到访问它的方法(我想在运行时这样做,所以ui自动查看器没有帮助…)。

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

  1. 我应该如何比较两个UiObjects(如果不是100%阳性,请靠近它)
  2. 是否有访问资源id的方法

提前谢谢。

编辑:我的想法是:

  • 打开应用程序
  • 识别其布局和小部件
  • 检测不同小部件之间可能发生的交互
  • 选择一个小部件并与之交互
  • 验证是否是新屏幕或小部件上的更改

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

代码示例:

//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

我没有写代码的原因是因为我认为它并没有真正增加太多。。。因为重要的是我不知道如何进行

好吧,我想明白了这么多:

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

总之,我想要的确实是不可能的。

View类有"getId"方法,您可以使用它来比较视图。例如,如果您的类实现了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
    }
}

相关内容

  • 没有找到相关文章

最新更新