前言

有时候页面上没有id属性,并且其它的属性不唯一,平常用的比较多的是单数(element)的定位方法,遇到元素属性不唯一,就无法直接定位到了。

于是我们可以通过复数(elements)定位,先定位一组元素,再通过下标取出元素,这样也是可以定位到元素的。

单数与复数

1.find_element开头的是13种单数定位

2.find_elements开头是13种复数定位

定位一组对象

1.对比用单数定位find_element和复数定位find_elements定位元素的结果

# coding:utf-8
from appium import webdriver
desired_caps = {
'platformName': 'Android',
'deviceName': '127.0.0.1:62001',
'platformVersion': '4.4.2',
'appPackage': 'com.baidu.yuedu',
'appActivity': 'com.baidu.yuedu.splash.SplashActivity',
'noReset': 'true',
'resetKeyboard': 'true',
'unicodeKeyboard': 'true'
}
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) # 等主页面activity出现
driver.wait_activity(".base.ui.MainActivity", 10) # 定位'搜索'按钮
search = driver.find_element_by_id("com.baidu.yuedu:id/tab_search")
print(search) # 打印元素对象 searchs = driver.find_elements_by_id("com.baidu.yuedu:id/tab_search")
print(searchs) # 打印list
print(type(searchs))

2.定位一组元素,返回的是list对象

3.定位一组之后,如果要点击该元素,那就先从list里面通过下标索引取出元素对象,再click就可以了。下标索引是从0开始。

# list定位
driver.find_elements_by_id("com.baidu.yuedu:id/tab_search")[0].click()

元素不唯一

1.通常一个页面上id属性是唯一的,但是有时候会遇到有些元素没有id属性,只有class属性,通常class属性不唯一

2.如果要定位第一个图片元素,可以先用find_elements定位一组Image对象,再通过下标索引[0]取出第一个就可以了。

# 点搜索结果第一个
driver.find_elements_by_class_name("android.widget.Image")[0].click()

参考案例

# coding:utf-8
from appium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from time import sleep
desired_caps = {
'platformName': 'Android',
'deviceName': '127.0.0.1:62001',
'platformVersion': '4.4.2',
'appPackage': 'com.baidu.yuedu',
'appActivity': 'com.baidu.yuedu.splash.SplashActivity',
'noReset': 'true',
'resetKeyboard': 'true',
'unicodeKeyboard': 'true'
}
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) # 等主页面activity出现
driver.wait_activity(".base.ui.MainActivity", 10) # 点'搜索'
driver.find_element_by_id("com.baidu.yuedu:id/tab_search").click() # 输入"python"
driver.find_element_by_id("com.baidu.yuedu:id/full_text_search_bar_input").send_keys(u"Python接口")
sleep(2)
# 点搜索按钮
driver.find_element_by_id("com.baidu.yuedu:id/full_text_search_bar_search").click() sleep(5)
# 点搜索结果第一个
driver.find_elements_by_class_name("android.widget.Image")[0].click()

在学习过程中有遇到疑问的,可以appium+python QQ群交流:330467341

最新文章

  1. bash编程之多分支if 语句及for循环
  2. Hermes:来自腾讯的实时检索分析平台
  3. WPF中的Style(风格,样式)(转)
  4. 双网卡bond
  5. Swift - 手势识别
  6. AltiumDesignerSummer9Build9.3.1.19182破解图文教程
  7. white-space的值
  8. 简单 实现CombineFileInputFormat
  9. C++学习笔记1(扩充:C++中的格式控制)
  10. Django REST framework+Vue 打造生鲜超市(十)
  11. Spark架构原理
  12. JQ remove()方法实现似收货地址逐一删除的效果
  13. ubuntu18.04.2LTS下安装和配置MySql数据库 --ubuntu
  14. Spring AOP失效之谜
  15. SpringBoot系列一:SpringBoot的产生
  16. 点赞功能实现 $(tag).css('属性', '样式')
  17. SQL编程:group by合并结果字符串 ---> group_concat函数就能行
  18. let块级作用域
  19. nyoj746 整数划分(四)
  20. 05——wepy框架中的一些细节

热门文章

  1. poj1273&&hdu1532
  2. 剑指offer--38.左旋转字符串
  3. Python中的数据结构 --- 集合(set)
  4. SQL映射文件
  5. HM编码器代码阅读(1)——介绍以及相关知识
  6. 微信小程序之答题领券系统构建
  7. learn go error
  8. C的动态链表建立
  9. AngularX 指令(ngForof)(转载)
  10. BZOJ2431 HAOI2009 逆序对数列 【DP】*