前置代码:
from appium import webdriver
# server 启动参数
desired_caps = {}
# 设备信息
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '5.1'
desired_caps['deviceName'] = '192.168.56.101:5555'
# app的信息
desired_caps['appPackage'] = 'com.android.settings'
desired_caps['appActivity'] = '.Settings'
# 中文处理
desired_caps['unicodeKeyboard'] = True
desired_caps['resetKeyboard'] = True
# 声明driver对象
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
一、APP元素定位操作(id,class,xpath)
1 通过 id 定位,定位一组时为 elements
方法:find_element(s)_by_id(id_value) # id_value:为元素的id属性值
定位单个元素:
driver.find_element_by_id("com.android.settings:id/search").click()
定位一组元素:
title = driver.find_elements_by_id("com.android.settings:id/title") # title为列表
titile[0].click()
2 通过 class 定位,定位一组时为 elements
方法:find_element(s)_by_class_name(class_value) # class_value:为元素的class属性值
定位单个元素:
driver.find_element_by_class_name('android.widget.ImageButton').click()
定位一组元素:
title = driver.find_elements_by_class_name("android.widget.TextView")
title[0].click
3 通过 xpath 定位,定位一组时为 elements
方法:find_element(s)_by_xpath(xpath_value) # xpath_value:为定位到元素的xpath语句
定位单个元素:
driver.find_element_by_xpath("//*[contains(@text,'WLA')]").click()
定位一组元素:
title = driver.find_elements_by_xpath("//*[contains(@class,'widget.TextView')]")
title[0].click
android端xptah常用属性定位:
1. id ://*[contains(@resource-id,'com.android.settings:id/search')]
2. class ://*[contains(@class,'android.widget.ImageButton')]
3. text ://*[contains(@text,'WLA')],模糊定位 contains(@key,value): value可以是部分值
4 WebDriverWait 显示等待操作
方法:WebDriverWait(driver, timeout, poll_frequency).until(method)
参数:
1.driver:手机驱动对象
2.timeout:搜索超时时间
3.poll_frequency:每次搜索间隔时间,默认时间为0.5s
4.method:定位方法(匿名函数)
使用示例:
WebDriverWait(driver, timeout, poll_frequency).until(lambda x: x.find_elements_by_id(id_value))
解释:
1.x传入值为:driver,所以才可以使用定位方法.
函数运行过程:
1.实例化WebDriverWait类,传入driver对象,之后driver对象被赋值给WebDriverWait的一个类变量:self._driver
2.until为WebDriverWait类的方法,until传入method方法(即匿名函数),之后method方法会被传入self._driver
3.搜索到元素后until返回定位对象,没有搜索到函数until返回超时异常错误.
代码实现:
# 导入WebDriverWait类
from selenium.webdriver.support.wait import WebDriverWait
# 超时时间为30s,每隔1秒搜索一次元素是否存在,如果元素存在返回定位对象并退出
search_button = WebDriverWait(driver, 30, 1).until(lambda x: x.find_elements_by_id(com.android.settings:id/search))
search_button.click()
driver.quit()