gpt4 book ai didi

android - 使用 UiAutomator 获取其他应用程序的 Activity 实例?

转载 作者:行者123 更新时间:2023-12-04 17:54:26 44 4
gpt4 key购买 nike

我正在跨应用程序使用 UiAutomator 编写一些自动化测试用例。我的目标是找到我点击的所有应用程序的当前 Activity 。

我有一个名为 MyApp 的项目,其中包含名为 com.example 的程序包和一个 Activity 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 连接到监视器,我能够得到这行代码中的 Activity 实例

Activity currentActivity = instrumentation.waitForMonitorWithTimeout(monitor, 3000);

现在如果我改变流程。 HomeMenu --> SomeOtherApp 并使用 SomeOtherApp 的完全合格的 launcherActivity 附加到监视器,比如 com.someotherapp.MainActivity。我无法获取 Activity 实例。当前 Activity 为空

有没有办法获取我通过 UiAutomator 启动的任何应用程序的当前 Activity 实例?

最佳答案

似乎只能监控同一个包中的 Activity ,对于另一个应用程序的 Activity ,waitForActivityWithTimeout 只返回 null。

如果你只获取 context-needed-api 的 Activity 实例,可以像我一样做

  1. 在 ui-automator-test-class 的同一个包中启动 Activity
  2. 使用监视器获取该 Activity

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

关于android - 使用 UiAutomator 获取其他应用程序的 Activity 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41608311/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com