【发布时间】:2014-06-03 06:24:19
【问题描述】:
我正在安装设备管理员的应用中自动测试流程。要在大多数设备上激活设备管理员(假设在这里我没有一些企业 API 可以让我像三星提供的那样执行此操作),系统会向用户显示一个弹出窗口,然后用户必须单击“激活”按钮。
我正在使用 Robotium 和 Android JUnit 来推动我的测试。在正常的测试用例中,只能与被测应用和进程交互,而不能与出现的任何系统活动交互。
UiAutomation 声称允许您通过利用Accessibility Framework 与其他应用程序进行交互,然后允许一个inject arbitrary input events。
所以 - 这就是我想要做的:
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 硬编码为点击位置,但实际上我会点击屏幕的右下角,以便点击按钮。
我没有在屏幕上看到任何点击事件。有任何人对此有经验吗?有没有其他方法可以做我想做的事?据我了解,很少有工具可以做到这一点。
谢谢。
更新
为正确答案添加setSource
【问题讨论】:
-
我认为您应该取出您编辑的 setSource() 调用。原始问题应该说明问题,其中答案显示解决方案。事实上,比较两者会导致混淆,因为它们都有效。
标签: android testing ui-automation robotium