如何在 Ui Automator 中比较 Ui 对象
How to compare UiObject in Ui Automator
我有两个不同的(或不是-.-)UiObject,我想比较它们。
我可以看看它们是否相同 class 之类的,但这还不够。
我想过使用资源 ID,但找不到访问它的方法(我想在 运行 时间内完成,所以 ui automator viewer 没有帮助... ).
所以我实际上是在问两件事:
- 我应该如何比较两个 UiObject(如果不是 100% 肯定,接近它)?
- 有没有办法访问资源 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% 肯定。
综上所述,我想要的确实是不可能的
我有两个不同的(或不是-.-)UiObject,我想比较它们。
我可以看看它们是否相同 class 之类的,但这还不够。
我想过使用资源 ID,但找不到访问它的方法(我想在 运行 时间内完成,所以 ui automator viewer 没有帮助... ).
所以我实际上是在问两件事:
- 我应该如何比较两个 UiObject(如果不是 100% 肯定,接近它)?
- 有没有办法访问资源 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% 肯定。
综上所述,我想要的确实是不可能的