我正在使用UiAutomator在我的应用程序的应用程序中编写一些Automated TestCase。我的目标是找到我点击的所有应用程序的当前活动。
我的项目名为 MyApp ,其中包含名为 com.example 的程序包,其中包含一个活动 MainActivity
我尝试了以下内容(我的应用程序在androidTest下的所有内容)
public class ActivityTester extends InstrumentationTestCase {
private UiDevice device;
@Test
public void testAdd() throws Exception {
}
@Override
protected void setUp() throws Exception {
super.setUp();
Instrumentation instrumentation = getInstrumentation();
Instrumentation.ActivityMonitor monitor = instrumentation.addMonitor("com.example.MainActivity", null, false);
device = UiDevice.getInstance(instrumentation);
device.pressHome();
device.wait(Until.hasObject(By.desc("Apps")), 3000);
UiObject2 appsButton = device.findObject(By.desc("Apps"));
appsButton.click();
device.wait(Until.hasObject(By.text("MyApp")), 3000);
UiObject2 calculatorApp = device.findObject(By.text("MyApp"));
calculatorApp.click();
Activity currentActivity = instrumentation.waitForMonitorWithTimeout(monitor, 3000);
}
我点击 HomeMenu 并启动 Myapp 并使用 com.example.MyActivity 附加到显示器,我可以获得此代码行中的活动实例
活动currentActivity = instrumentation.waitForMonitorWithTimeout(monitor,3000);
现在如果我改变了流程。 HomeMenu - > SomeOtherApp 并使用SomeOtherApp的完全限定的launcherActivity附加到监视器上,说明 com.someotherapp.MainActivity 。 我无法获得活动实例。 currentActivity为null
有没有办法可以获取我通过UiAutomator启动的任何应用的当前Activity实例?
答案 0 :(得分:0)
似乎只能监视同一个包中的活动, 对于另一个应用程序的活动,waitForActivityWithTimeout只返回null。
如果您只获取context-needed-api的活动实例,可以按照我的方式进行操作
public class ExampleInstrumentedTest {
private UiDevice mDevice;
private Activity mActivity;
@Before
public void before() {
// Initialize UiDevice instance
mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
mActivity = getActivity();
// Start from the home screen
mDevice.pressHome();
}
private Activity getActivity() {
Activity activity = null;
Instrumentation inst = InstrumentationRegistry.getInstrumentation();
Context context = inst.getContext();
Instrumentation.ActivityMonitor monitor =
inst.addMonitor("com.wispeedio.uiautomator2hello.MainActivity", null, false);
Intent intent = context.getPackageManager()
.getLaunchIntentForPackage("com.wispeedio.uiautomator2hello");
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
context.startActivity(intent);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
activity = monitor.waitForActivityWithTimeout(2000);
return activity;
}
private void takeScreenshot(String name) {
File file = Utils.CreateFileToExternal(mActivity, name, "test-screenshots");
mDevice.takeScreenshot(file);
}
}