UiAutomator app 页面元素,要执行删除操作,但是 CheckBox 的 id 和 class 均相同,比如我要删除红磨坊,如何通过房间名,以相对定位方式,定位到红磨坊的 CheckBox?

Magicchn · 2018年07月09日 · 最后由 Magicchn 回复于 2018年07月10日 · 653 次阅读

问题描述

app自动化测试中,遇到一个问题,需要删除指定的房间(app上长按该房间后即出现删除控件 CheckBox),房间可以找到,但是该房间对应的删除按钮CheckBox却有多个,且id其他属性都相同,使用uiautomatorviewer定位,见截图

小弟试过很多定位方式,均不能定位到该房间的删除控件,望各位大神能指点下,先谢过各位!

  • 其他相关信息截图 - - -
最佳回复

你这情况好像除了xpath没有其它好办法了,你可以先找到房间,然后找到父元素,在找到父元素后面的兄弟节点,//xxx.TextView[@text='房间名称']/parent::xxx.LinerLayout/following-sibling::checkbox,大概是这样

共收到 10 条回复 时间 点赞

可以取ID数组,然后根据数组下标位置定位

xpath啊

BeNice 回复

抱歉可能是我没说清楚,因为房间位置是动态变化的,我也试过XPAth定位,我希望能通过房间名,以相对定位方式,定位到该房间的删除图标,

xiaoj 回复

id数组下标定位应该可以定位到,我本意希望能通过已知得的房间名,以相对定位方式定位到该房间的删除图标,这样的话,不管id是多少,我可以用房间名,定位到它的删除图标

你这情况好像除了xpath没有其它好办法了,你可以先找到房间,然后找到父元素,在找到父元素后面的兄弟节点,//xxx.TextView[@text='房间名称']/parent::xxx.LinerLayout/following-sibling::checkbox,大概是这样

find_element_by_xpath('//android.widget.TextView[contains(@text, "红磨坊")] ')
layasa 回复

非常感谢,已经定位到!方法可行,我16年都注册了,一直没有在论坛问过问题,testerhome果然大神众多,效率高,👍

xiaoj 回复

不是要定位红磨坊,是要定位那个删除图标,不过依然感谢!

BeNice 回复

尽管没有详细说明,不过依然感谢回复!

layasa 回复

已试过以下两种方式都可定位到:
方式一://android.widget.TextView[@text='红磨坊']/parent::android.widget.LinearLayout/following-sibling::android.widget.CheckBox[1]

方式二://*[@text='红磨坊']/../following-sibling::android.widget.CheckBox[1]

说明:后面的checkbox需要加下标,只有一个也需要加下标,

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册