Приложение, протестированное инструментами, аварийно завершает работу из-за автоматического обновления Chrome в тестовой лаборатории Firebase

Во время инструментальных тестов в Google Firebase Test Lab тестируемое приложение дает сбой из-за обновления Google Chrome в фоновом режиме. В тестируемом приложении действительно есть несколько WebView, но они не отображаются во время тестового запуска.

Видеозапись отчетливо показывает, что приложения загружаются и устанавливаются (анимированное уведомление о загрузке) из Play Store.

Соответствующий логарифм:

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