Как отстаивать активность на переднем плане? - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть класс DeepLinkHandlerActivity, который обрабатывает все мои глубокие ссылки.Чтобы проверить это, я написал следующий фрагмент кода.Не можете понять, как проверить, что через некоторое время активность на переднем плане является желаемой?Есть идеи как это сделать?

class DeepLinkHandlerTest {

@Before
@Throws(Exception::class)
fun setUp() {
}

@After
@Throws(Exception::class)
fun tearDown() {
}

@get:Rule
val activityTestRule = ActivityTestRule<DeepLinkHandlerActivity>(DeepLinkHandlerActivity::class.java)

@Test
fun validalidUrlTest() {
    val url = "myapp://loadwebview"
    triggerDeeplink(url)

    Thread.sleep(5000)

    // what to do here? 
    // some form of assertion that correct activity is in foreground. 
}

private fun triggerDeeplink(url: String) {
    val intent = Intent("android.intent.action.VIEW", Uri.parse(url))
    activityTestRule.launchActivity(intent)
}
}

Ответы [ 3 ]

0 голосов
/ 06 декабря 2018

Есть метод из android blueprint , но я не уверен, работает ли он.

/**
 * Gets an Activity in the RESUMED stage.
 * <p>
 * This method should never be called from the Main thread. In certain situations there might
 * be more than one Activities in RESUMED stage, but only one is returned.
 * See {@link ActivityLifecycleMonitor}.
 */
public static Activity getCurrentActivity() throws IllegalStateException {
    // The array is just to wrap the Activity and be able to access it from the Runnable.
    final Activity[] resumedActivity = new Activity[1];

    getInstrumentation().runOnMainSync(new Runnable() {
        public void run() {
            Collection resumedActivities = ActivityLifecycleMonitorRegistry.getInstance()
                    .getActivitiesInStage(RESUMED);
            if (resumedActivities.iterator().hasNext()) {
                resumedActivity[0] = (Activity) resumedActivities.iterator().next();
            } else {
                throw new IllegalStateException("No Activity in stage RESUMED");
            }
        }
    });
    return resumedActivity[0];
}
0 голосов
/ 07 декабря 2018

Закончилось делать что-то вроде этого:

https://www.codexpedia.com/android/ui-test-deep-linking-using-espresso-in-android/

Открыт для предложений, если есть какой-либо лучший способ.

0 голосов
/ 06 декабря 2018

Один из способов - иметь статический флаг в каждом действии и запускать его с помощью методов onPause и onResume действия.Затем вы можете проверить флаг, чтобы увидеть, находится ли активность на переднем плане или нет.

...