我正在自动测试我安装设备管理员的应用程序中的流程。要在大多数设备上激活设备管理员(假设这里没有一些企业 API 可以让我像三星提供的那样执行此操作),系统会向用户显示一个弹出窗口,然后用户必须单击“激活”按钮。
我在用着Robotium和 Android JUnit 来驱动我的测试。在正常的测试情况下,人们只能与被测应用程序和进程交互,而不能与出现的任何系统活动交互。
The Ui自动化声称允许您通过利用无障碍框架,然后允许一个注入任意输入事件.
所以 - 这就是我想做的:
public class AbcTests extends ActivityInstrumentationTestCase2<AbcActivity> {
private Solo mSolo
@Override
public void setUp() {
mSolo = new Solo(getInstrumentation(), getActivity());
}
...
public void testAbc(){
final UiAutomation automation = getInstrumentation().getUiAutomation();
MotionEvent motionDown = MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), KeyEvent.ACTION_DOWN,
100, 100, 0);
automation.injectInputEvent(motionDown, true)
MotionEvent motionUp = MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), KeyEvent.ACTION_UP,
100, 100, 0);
automation.injectInputEvent(motionUp, true)
motionUp.recycle();
motionDown.recycle();
}
}
运行此测试时,系统弹出窗口“激活”,设备管理员处于活动状态,我只想单击屏幕。出于本问题的目的,我已将 100,100 硬编码为点击位置,但实际上我将点击屏幕的右下角,以便点击按钮。
我没有收到屏幕上发生任何点击事件。有人对此有经验吗?有其他选择可以做我想做的事吗?据我了解,很少有工具可以做到这一点。
Thanks.
Update
Added setSource
为了正确答案