Как установить мое приложение по умолчанию в тестах эспрессо?

Я хочу написать несколько тестов пользовательского интерфейса, в которых мое приложение должно быть приложением по умолчанию в настройках приложений Android по умолчанию. В приложении есть предпочтение, которое запустит экран приложений по умолчанию, чтобы я мог выбрать значение по умолчанию, а затем вернуться, и у меня будут установлены предпочтения. Другой способ - сбросить все настройки приложения по умолчанию, запустить намерение со ссылкой, а затем по умолчанию выбрать мое приложение из средства выбора приложений.

Есть ли способ сделать это программно, используя котлин и эспрессо? Я читал и пробовал эспрессо-интенты, но это позволит мне запустить только экран приложений по умолчанию, а не выбрать в нем то, что мне нужно. Эспрессо не может взаимодействовать с внешней деятельностью.

У меня нет образца кода, которым можно поделиться, ничего даже близко не работает.


person Oana Horvath    schedule 13.12.2019    source источник
comment
Я не знаю, как это используется, но предполагаю, что вам понадобится что-то вроде этого разработчика .android.com / training / testing / ui-automator, потому что он работает с системой.   -  person coroutineDispatcher    schedule 13.12.2019
comment
да, спасибо! Единственный способ, который я нашел для этого, - это довольно легко использовать UiAutomator.   -  person Oana Horvath    schedule 16.12.2019
comment
Большой. Вы можете ответить на свои вопросы, потому что я почти уверен, что это понадобится сообществу.   -  person coroutineDispatcher    schedule 16.12.2019


Ответы (1)


В приложении есть переключатель для установки его по умолчанию, который запускает экран приложений по умолчанию (в стандартной ОС Android, а не в пользовательских), поэтому метод будет выглядеть следующим образом: '' '

private fun setDefaultBrowserToggle() = onView(withId(R.id.switch_widget))
private fun defaultBrowserAppList() = mDevice.findObject((UiSelector().text("Browser app")))
private fun myAppOption() = mDevice.findObject(UiSelector().text("<App Name>"))

   fun selectDefaultBrowser(){
        setDefaultBrowserToggle().click()
        mDevice.waitNotNull(
            Until.findObject(By.text("Browser app")),
            TestAssetHelper.waitingTime
        )
        defaultBrowserAppList().click()
        myAppOption().click()
        mDevice.pressBack()
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            mDevice.pressBack() //needs an extra back press on Android O or higher, to return to the app
        }
    }

'''

person Oana Horvath    schedule 18.12.2019