将应用设置为与 UI 自动化器的默认按钮交互
Set app as default button interaction with UI automator
我有一个测试用例,其中在应用程序中打开 "Set as default" 提示。我想用 UI automator 测试它,我成功地测试了那个案例,但不是 100% 可靠。不幸的是,有些设备有 "Set as default" 大写的提示按钮,而有些则没有,所以我无法为这个测试用例创建 100% 可靠的测试。我在下面编写了这段代码,但是当通过文本获取 "Set as default" 按钮时,字母大小写不起作用,但是当我想与该按钮交互时,文本大小写很重要。在这种情况下,切换 IF-ELSE 案例并不能解决问题。不知何故,当我想按下这些按钮时,none 对话框按钮 ids(按钮 1、按钮 2..)起作用。
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()
}
}
}
您可以使用 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()
}
根据 Jordan's 示例和提示,解决此问题的方法是找到具有模式的对象。使用 pattern,您可以使用 By.text(pattern)
搜索 UIObject。请注意,使用模式找到的对象需要是 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()
}
我有一个测试用例,其中在应用程序中打开 "Set as default" 提示。我想用 UI automator 测试它,我成功地测试了那个案例,但不是 100% 可靠。不幸的是,有些设备有 "Set as default" 大写的提示按钮,而有些则没有,所以我无法为这个测试用例创建 100% 可靠的测试。我在下面编写了这段代码,但是当通过文本获取 "Set as default" 按钮时,字母大小写不起作用,但是当我想与该按钮交互时,文本大小写很重要。在这种情况下,切换 IF-ELSE 案例并不能解决问题。不知何故,当我想按下这些按钮时,none 对话框按钮 ids(按钮 1、按钮 2..)起作用。
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()
}
}
}
您可以使用 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()
}
根据 Jordan's 示例和提示,解决此问题的方法是找到具有模式的对象。使用 pattern,您可以使用 By.text(pattern)
搜索 UIObject。请注意,使用模式找到的对象需要是 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()
}