使用沉浸式模式进行UiAutomator测试,无法点击导航栏下的内容

时间:2017-10-02 17:29:38

标签: android uiautomator android-uiautomator uidevice android-immersive

我正在尝试在我的以沉浸式模式运行的应用上运行测试。

但是,当我尝试点击导航栏通常位于的位置时,没有任何反应,因为UiDevice认为屏幕比实际屏幕小。

即。它认为屏幕高2076像素,实际上现在是2152.无论如何都可以访问额外的76像素屏幕吗?

我的应用代码的一个粗略示例如下......

@RunWith(AndroidJUnit4.class)
@SdkSuppress(minSdkVersion = 18)
public class ScreenShotTest {

private static final String BASIC_SAMPLE_PACKAGE = "my.package.name";

private UiDevice mDevice;

@Before
public void startMainActivityFromHomeScreen() {
    context = InstrumentationRegistry.getTargetContext();
    pref = context.getSharedPreferences("my_preferences", MODE_PRIVATE);

    // Initialize UiDevice instance
    mDevice = UiDevice.getInstance(getInstrumentation());

    // Wait for launcher
    final String launcherPackage = getLauncherPackageName();
    assertThat(launcherPackage, notNullValue());
    mDevice.wait(Until.hasObject(By.pkg(launcherPackage).depth(0)), LAUNCH_TIMEOUT);

    // Launch the blueprint app
    final Intent intent = context.getPackageManager().getLaunchIntentForPackage(BASIC_SAMPLE_PACKAGE);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);    // Clear out any previous instances
    context.startActivity(intent);
}

@Test
public void allTests() throws InterruptedException, UiObjectNotFoundException {
    int i = 0;
    boolean mainMenuFinished = false;
    while(!mainMenuFinished && i < 600) {
        i++;
        sleep(1000);
        mainMenuFinished = pref.getBoolean(MAIN_MENU_FINISHED, false);
    }

    int j = 0;
    int[] buttonBounds = new int[2];
    for (String s : pref.getString(name, "").split(",")) {
        buttonBounds[j] = Math.round(Float.parseFloat(s));
        j++;
    }

    mDevice.click(buttonBounds[0], buttonBounds[1]);
}

我在我的实际apk中的共享pref中设置我的按钮的像素位置,然后我的测试apk正在读取值并点击该位置。

我的真实应用的屏幕宽度为2152(横向)我的测试apk只认为屏幕是2076.

0 个答案:

没有答案