多个相同classname的控件中查找子控件(父控件text、resource-id为空,classname不是唯一...)
来源:互联网 发布:雾霾吸入 知乎 编辑:程序博客网 时间:2024/06/06 03:38
测试目的:搜索结果中找到联系人名为appium的名片,点击打开详情。
调试时发现,如果直接在当前页面使用self.driver.find_element_by_name("appium"),查找失败。
此时考虑使用父控件查找子控件。
接下来,
一、首先要找到父控件了。。。
然而搜索结果有多个,并且通过uiautomator看到 ,父控件text、resource-id为空,classname不是唯一的,且classname同为android.view.View的控件不止4个,比如下面的截图中classname同为android.view.View的控件,除了搜索结果同类的有4个外,其他的还有3个,一共有7个。
解决方法1:使用python list存放classname同为android.view.View的控件,遍历list,从父控件中查找子控件,如果子控件的name为appium,则为结果。
name_list= self.driver.find_elements_by_class_name("android.view.View")
for i in name_list:
try:
if i.find_element_by_name("appium"):
name_appium=i.find_element_by_name("appium")
except Exception,e:
print e
name_appium.click()
解决方法2:
另外,通过调试发现
name_list= self.driver.find_elements_by_class_name("android.view.View")
第一个搜索结果,appium所在的父控件,对应的是name_list中的name_list[3]
最后一个搜索结果,(上图中的联系人名为appiumtest所在的父控件),对应的是name_list中的name_list[len(name_list)-1],依据经验,从下往上数,那么第一个搜索结果,appium所在的父控件,对应的是name_list[len(name_list)-4],调试后发现确实如此。
这种查找并写死的方法虽然可用于当前页面,实际操作以来效率比较低,并且兼容性不好,比如换了不同的界面有更多相同classname的控件,可能不会是list[3]了;如果搜索结果有5个,那么第一个搜索结果应该是list[len(list)-5]了,需要统计搜索结果的个数,并进一步调试。。。
二、父控件查找子控件,并操作控件
解决方法一中,上面的代码中,已经实现了:
name_appium=i.find_element_by_name("appium")
name_appium.click()
三、小结
遇到上面的情况也算特殊了,如果是在实际项目中,resource-id都加上会更方便,另外也想过使用坐标的方法点击,应该是要根据屏幕比例确定坐标,不然换了不同分辨率的手机,估计要报错了。
阅读全文
0 0
- 多个相同classname的控件中查找子控件(父控件text、resource-id为空,classname不是唯一...)
- js更换控件的classname
- 如何使用UiObject获取控件的className
- 找到多个具有相同 ID“_header”的控件。FindControl 要求控件具有唯一的 ID。错误的解决方法!
- classname函数与控件name字串
- WPF中查找子控件、父控件的方法
- 数据绑定控件中查找指定ID的控件
- 用js将文档中className有“test”的id标签背景颜色设为黄色
- 动态生成多个相同的控件
- Android自动化测试—获取、区分具有相同Id的多个控件
- Android自动化测试—获取、区分具有相同Id的多个控件
- WPF 查找子控件和父控件
- className ~
- 基于Qt的收银点餐系统之多个相同子控件与父控件间的交互
- [找所有classname相同的对象]
- 通过Jquery中的选择器选择相同的className统一处理表单(可以同时处理多个表单在一个网页中)
- 查找相同类名的控件句柄
- 将View 转化程数的过程 并且 listView 在子控件不设置id时,默认会给一个ID,为父控件的id
- 带你玩转Visual Studio——带你理解多字节编码与Unicode码
- [编译链接装载]之静态链接
- for循环中进行Promise异步操作的问题总结
- Matlab保存图像的方法总结
- POJ 2376 Cleaning Shifts
- 多个相同classname的控件中查找子控件(父控件text、resource-id为空,classname不是唯一...)
- Java多线程之线程返回值
- c#数据结构——单链表
- Spring Boot学习笔记----Schedule
- SQL入门 7 8 9 10 11 12 从查询中获得有效的结果
- LayaAir 自转的小球围绕着鼠标转动
- J作业
- open-falcon
- 网络知识学习