UI 带有自定义键盘的自动化器。找到确切的键盘按钮并单击它
UI Automator with custom keyboard. Find exact keyboard button and click it
我正在尝试使用 UI Automator and\or Espresso 为自定义软键盘编写 UI 自动化测试。尝试了不同的方法,但我找不到合适的解决方案来“在打开的键盘上找到确切的按钮并单击它”。
问题:
- UIAtomator 的
UiDevice.findObject(By.text("Q")).click()
在键盘上找不到 Q 按钮。
- Espresso 的
onView(withText("Q")).perform(click())
也找不到按钮。
目前看来,点击按钮的唯一方法是根据屏幕高度和键盘高度测量 XY 坐标。但是这个解决方案很丑陋而且不持久。
typeText("text")
和uiObject.text = "text"
不工作,因为它绕过了键盘输入。
有人使用自定义键盘吗?请帮忙。
我认为最好的解决方案是创建自己的 TCP 服务器来解决此问题。请参考此 link 以了解如何:https://ops.tips/blog/a-tcp-server-in-c/
由于您正在构建自定义软键盘,因此我希望您使用的是 KeyboardView
。 KeyboardView
使用 canvas 绘制密钥,因此无法获取密钥的资源 ID...因此无法通过 UiDevice
的 [=13= 找到它们]方法。
考虑到 KeyboardView
class 自 API 29 以来已被弃用,一个可能的解决方案是重新实现您自己的 KeyboardView
(建议 here)并使用 AccessibilityNodeInfo
class 构建将包含在视图层次结构中的虚拟元素(每个键一个)。
我正在尝试使用 UI Automator and\or Espresso 为自定义软键盘编写 UI 自动化测试。尝试了不同的方法,但我找不到合适的解决方案来“在打开的键盘上找到确切的按钮并单击它”。
问题:
- UIAtomator 的
UiDevice.findObject(By.text("Q")).click()
在键盘上找不到 Q 按钮。 - Espresso 的
onView(withText("Q")).perform(click())
也找不到按钮。
目前看来,点击按钮的唯一方法是根据屏幕高度和键盘高度测量 XY 坐标。但是这个解决方案很丑陋而且不持久。
typeText("text")
和uiObject.text = "text"
不工作,因为它绕过了键盘输入。
有人使用自定义键盘吗?请帮忙。
我认为最好的解决方案是创建自己的 TCP 服务器来解决此问题。请参考此 link 以了解如何:https://ops.tips/blog/a-tcp-server-in-c/
由于您正在构建自定义软键盘,因此我希望您使用的是 KeyboardView
。 KeyboardView
使用 canvas 绘制密钥,因此无法获取密钥的资源 ID...因此无法通过 UiDevice
的 [=13= 找到它们]方法。
考虑到 KeyboardView
class 自 API 29 以来已被弃用,一个可能的解决方案是重新实现您自己的 KeyboardView
(建议 here)并使用 AccessibilityNodeInfo
class 构建将包含在视图层次结构中的虚拟元素(每个键一个)。