Установить приложение как кнопку по умолчанию для взаимодействия с автоматом пользовательского интерфейса - PullRequest
3 голосов
/ 09 апреля 2020

У меня есть тестовый случай, когда в приложении открывается окно «Установить по умолчанию». Я хочу протестировать это с помощью автоматизатора пользовательского интерфейса, и мне это удалось, но не на 100% надежно. К сожалению, на некоторых устройствах кнопка подсказки «Установить по умолчанию» написана заглавными буквами, а на некоторых нет, поэтому я не могу создать 100% надежные тесты для этого теста. Я написал этот код ниже, но при получении кнопки «Установить по умолчанию» по тексту регистр букв не играет роли, но когда я хочу взаимодействовать с этой кнопкой, текстовый регистр важен. Переключение случаев IF-ELSE не решает проблему в этом случае. И почему-то, ни одна из кнопок диалоговых кнопок не работает (button1, button2 ..), когда я хочу нажать их.

            val roleManager = activity.applicationContext?.getSystemService("role") as RoleManager
            if (roleManager.isRoleAvailable(android.app.role.ASSISTANT)) {
                if (!roleManager.isRoleHeld(android.app.role.ASSISTANT)) {
                    val myApp = device.findObject(UiSelector().textMatches(InstrumentationRegistry.getInstrumentation().targetContext.getString(R.string.app_name)))
                    myApp.click()
                    sleepLong()
                    var setAsDefaultButton: UiObject? = null
                    if (device.findObject(UiSelector().text("Set as default")) != null) {
                        setAsDefaultButton = device.findObject(UiSelector().text("Set as default"))
                        setAsDefaultButton?.click()
                    } else if (device.findObject(UiSelector().text("SET AS DEFAULT")) != null) {
                        setAsDefaultButton = device.findObject(UiSelector().text("SET AS DEFAULT"))
                        setAsDefaultButton?.click()
                    } else {
                        clickDialogPositiveButton()
                    }
                }
            }
        }

Ответы [ 2 ]

2 голосов
/ 09 апреля 2020

Вы можете использовать объект Pattern вместо строки.

Вы можете использовать в своем коде как:

val pattern = Pattern.compile("Set as default", Pattern.CASE_INSENSITIVE)
val setDefaultText = device.findObject(UiSelector().text(pattern))
if(setDefaultText != null)) {
    setDefaultText.click()
} else {
   clickDialogPositiveButton()
}
1 голос
/ 09 апреля 2020

Основываясь на примере и подсказке Джордана , решение этой проблемы - найти объект с шаблоном. С шаблоном вы можете искать UIObject с помощью By.text(pattern). Обратите внимание, что объект, найденный по шаблону, должен быть UIObject2 вместо UIObject.

val pattern = Pattern.compile("Set as the default", Pattern.CASE_INSENSITIVE)
if(device.findObject(UiSelector().text(pattern.toString())) != null) {
    device.findObject(By.text(pattern)).click()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...