如何在Ui Automator中比较UiObject

时间:2015-02-13 18:22:27

标签: android testing compare uiautomator android-uiautomator

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

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

我想过使用资源ID,但我找不到一种方法来访问它(我想在运行时这样做,所以ui automator viewer没有帮助......)。

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

  1. 我应该如何比较两个UiObjects(如果不是100%正面,靠近它)?
  2. 有没有办法访问资源ID?
  3. 提前致谢。

    修改 我的想法是:

    • 打开应用
    • 识别其布局和小部件
    • 检测可能与不同小部件进行的交互
    • 选择一个小部件并与之互动
    • 验证它是新屏幕还是小部件更改

    目前,我可以通过选择FrameLayout的第一个实例(每个屏幕都为true)来访问布局树的根,从而访问其子节点(作为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
    

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

2 个答案:

答案 0 :(得分:0)

好吧,我想出了这么多:

  • 使用UI Automator时,它与任何应用程序无关,因此无法获取应用程序的视图
  • 无法访问与Ui对象相对应的视图的ID(与之前相同的原因)。
  • 必须通过启发式方法进行比较,而不是100%肯定。

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

答案 1 :(得分:-1)

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