Инструментално тестваното приложение се срива поради автоматично актуализиране на Chrome в Firebase Test Lab

При провеждане на тестове на инструментариума в лабораторията за тестване на Firebase на Google, тестваното приложение се срива поради актуализирането на Google Chrome във фонов режим. Тестваното приложение наистина има някои WebView, но те не се показват по време на тестовото изпълнение.

Видеозаписът ясно показва изтегляне и инсталиране на приложения (анимирано известие за изтегляне) от Play Store.

Съответен logcat:

03-19 22:52:52.450: I/ActivityManager(1154): Force stopping com.android.chrome appid=10086 user=-1: installPackageLI
03-19 22:52:52.450: I/ActivityManager(1154): Killing 31128:com.google.android.googlequicksearchbox:search/u0a54 (adj 500): stop com.android.chrome
03-19 22:52:52.454: I/ActivityManager(1154): Killing 15064:com.MYAPP/u0a159 (adj 0): stop com.android.chrome

Над него мога ясно да видя актуализациите, които се изтеглят, валидират и т.н.

Също така се опитахме да стартираме gcloud с флага --no-auto-google-login без успех: приложенията все още се изтеглят и инсталират.

Някой друг да е имал това или има някакви предложения?


person vvbYWf0ugJOGNA3ACVxp    schedule 25.03.2019    source източник


Отговори (1)


За да имаме по-добър контрол върху нашите тестове на инструментите, в крайна сметка написахме ChromeDisabler, който ще изпълнява всяка тестова сесия на инструментите, ще влиза в настройките на Chrome на телефона и ще деинсталира и деактивира Chrome, като по този начин ще предотврати автоматичното му актуализиране.

В идеалния случай Google трябва да деактивира автоматичните актуализации за изображения на Firebase Test Lab.

Употреба:

class CustomTestRunner : AndroidJUnitRunner() {

    override fun onStart() {
        ChromeDisabler.disable()
        super.onStart()
    }
}

ChromeDisabler:

object ChromeDisabler {
    private const val CHROME_APP_PACKAGE_NAME = "com.android.chrome"
    private const val APPLICATION_DETAILS_SETTINGS_APP_PACKAGE_NAME = Settings.ACTION_APPLICATION_DETAILS_SETTINGS
    private const val WAIT_TIMEOUT_MILLIS = 5000L

    private val device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
    private val disableButton = device.findObject(UiSelector().textStartsWith("disable"))
    private val uninstallButton = device.findObject(UiSelector().textStartsWith("uninstall"))

    fun disable() {
        device.pressHome()

        launchSettingsActivityForChrome()

        device.wait(Until.hasObject(By.pkg(APPLICATION_DETAILS_SETTINGS_APP_PACKAGE_NAME).depth(0)), WAIT_TIMEOUT_MILLIS)

        when {
            disableButton.exists() -> {
                Timber.e("Stock $CHROME_APP_PACKAGE_NAME found")
                disableApp(device)
            }

            uninstallButton.exists() -> {
                Timber.e("Non-stock $CHROME_APP_PACKAGE_NAME found")
                uninstallApp(device)
                disableApp(device)
            }

            device.findObject(UiSelector().textStartsWith("enable")).exists() -> {
                Timber.e("$CHROME_APP_PACKAGE_NAME is already disabled")
            }
        }
    }

    private fun launchSettingsActivityForChrome() {
        val intent = Intent().apply {
            action = Settings.ACTION_APPLICATION_DETAILS_SETTINGS
            data = Uri.fromParts("package", CHROME_APP_PACKAGE_NAME, null)
            addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
        }

        InstrumentationRegistry.getInstrumentation().targetContext.startActivity(intent)
    }

    private fun disableApp(device: UiDevice) {
        Timber.e("Attempting to disable $CHROME_APP_PACKAGE_NAME")

        try {
            disableButton.click()
            device.findObject(UiSelector().textStartsWith("disable app")).click()
            Timber.e("Successfully disabled $CHROME_APP_PACKAGE_NAME")
        } catch (exception: Exception) {
            Timber.e("Failed to disable $CHROME_APP_PACKAGE_NAME, cause: $exception")
        }
    }

    private fun uninstallApp(device: UiDevice) {
        Timber.e("Attempting to uninstall $CHROME_APP_PACKAGE_NAME")

        try {
            uninstallButton.click()
            device.findObject(UiSelector().textStartsWith("ok")).click()
            Timber.e("Successfully uninstalled $CHROME_APP_PACKAGE_NAME")
        } catch (exception: Exception) {
            Timber.e("Failed to uninstall $CHROME_APP_PACKAGE_NAME, cause: $exception")
        }
    }
}
person vvbYWf0ugJOGNA3ACVxp    schedule 27.03.2019