如何使用屏幕上的位置(边界)在 UiAutomator 中查找对象

Posted

技术标签:

【中文标题】如何使用屏幕上的位置(边界)在 UiAutomator 中查找对象【英文标题】:How to findObject in UiAutomator using position on screen (bounds) 【发布时间】:2015-06-20 16:41:48 【问题描述】:

我想使用 device.findObject() 在我的屏幕中查找一个对象,这需要一个 UiSelector。到目前为止一切顺利。

问题是我有几个项目只能通过它们在屏幕上的位置来区分,例如,在消息传递应用程序中,所有头像都具有相同的属性,除了它们在屏幕上的位置。

如何指定?

我想到了:

在找到对象后检查属性并在没有此对象的情况下再次进行搜索,但我也找不到任何从搜索中消除对象的方法。 使用 UiCollection 获取所有可能的元素,然后一一检查哪个是正确的。问题:在UiCollection中无法使用foreach,查找元素只能使用UiSelector,问题和之前一样。

您有什么建议/解决方案吗?

谢谢。

【问题讨论】:

您是否能够使用边界单击元素?我目前无法这样做。我正在使用appium_lib gem 来自动化并使用adb 命令system('adb shell input tap 43,676 265,972') 来单击坐标,但这似乎没有帮助。我想,我写命令的方式有问题,你有什么解决办法吗? @Ines 我能够按照艾伦的建议使用 UiDevice.findObjects 来做到这一点,这是标记为正确的答案。至少我认为这是很久以前的事了……不过我从来没有使用过 appium。但是,我想说使用 adb shell 并不是最好的解决方案...... 是的!从设备到设备的界限不断变化。它在我的本地模拟器中通过,但在 CI 上失败。然后我不得不编写更长的 xpath 行,幸运的是我能够找到该元素。谢谢! 【参考方案1】:

这不是一个很好的解决方案,但您可以使用UiDevice.findObjects(..) 来返回所有这些。然后使用getVisibleBounds()或getVisibleCenter()查看坐标。

【讨论】:

以上是关于如何使用屏幕上的位置(边界)在 UiAutomator 中查找对象的主要内容,如果未能解决你的问题,请参考以下文章

为啥鼠标不能超过电脑屏幕的左,上边界,而能够超过

如何检查鼠标点击位置是否在所需的应用程序上?

如何在 Qt 中获取鼠标在屏幕上的位置?

如何在屏幕上的特定位置设置视图?

如何在屏幕上的特定位置设置视图?

JavaFX:如何在屏幕上的任何位置检测鼠标/键事件?