1.APP元素定位操作API
1.Appium常用元素定位方式
name | value |
---|
id | id属性值 | class | class属性值 | xpath | xpath表达式 |
2.前置代码
from appium import webdriver
caps = {}
caps["platformName"] = "Android"
caps["deviceName"] = "127.0.0.1:62001"
caps["appPackage"] = "com.android.settings"
caps["appActivity"] = "com.android.settings.Settings"
driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)
3.通过id定位
方法:find_element_by_id(id_value) # id_value:为元素的id属性值 业务场景: 1.进入设置页面 2.通过ID定位方式点击搜索按钮
代码展示: 4.通过class定位
方法:find_element_by_class_name(class_value) # class_value:为元素的class属性值 业务场景: 1.进入设置页面 2.点击搜索按钮 3.通过class定位方式点击输入框的返回按钮
代码展示: 5.通过xpath定位
方法:find_element_by_xpath(xpath_value) # xpath_value:为可以定位到元素的xpath语句
*** 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可以是部分值
1.进入设置页面 2.点击WLAN菜单栏
代码展示 6.定位一组元素,注意element -> elements
应用场景为元素值重复,无法通过元素属性直接定位到某个元素,只能通过elements方式来选择,返回一个定位对象的列表.
方法: find_elements_by_id(id_value) # id_value:为元素的id属性值 业务场景: 1.进入设置页面 2.点击WLAN菜单栏(id定位对象列表中第1个)
7.WebDriverWait 显示等待操作
在一个超时时间范围内,每隔一段时间去搜索一次元素是否存在,如果存在返回定位对象,如果不存在直到超时时间到达,报超时异常错误。
方法:WebDriverWait(driver, timeout, poll_frequency).until(method) 参数: 1.driver:手机驱动对象 2.timeout:搜索超时时间 3.poll_frequency:每次搜索间隔时间,默认时间为0.5s 4.method:定位方法(匿名函数)
匿名函数:
lambda x: x
等价于python函数:
def test(x):
return x
使用示例: 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返回超时异常错误.
业务场景: 1.进入设置页面 2.通过ID定位方式点击搜索按钮
代码展示:
2.APP元素获取信息操作API
1.前置代码
from appium import webdriver
caps = {}
caps["platformName"] = "Android"
caps["deviceName"] = "127.0.0.1:62001"
caps["appPackage"] = "com.android.settings"
caps["appActivity"] = "com.android.settings.Settings"
driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)
2.发送数据到输入框
方法:send_keys(vaue) # value:需要发送到输入框内的文本 业务场景: 1.打开设置 2.点击搜索按钮 3.输入内容abc
代码展示: 3.清空输入框内容
方法:clear() 业务场景: 1.打开设置 2.点击搜索按钮 3.输入内容abc 4.删除已输入abc
代码展示: 4.获取元素的文本内容
方法: text 业务场景: 1.进入设置 2.获取所有元素class属性为“android.widget.TextView”的文本内容
代码展示: 5.获取元素的属性值
方法: get_attribute(value) # value:元素的属性 ?? value=‘name’ 返回content-desc / text属性值 ?? value=‘text’ 返回text的属性值 ?? value=‘className’ 返回 class属性值,只有 API=>18 才能支持 ?? value=‘resourceId’ 返回 resource-id属性值,只有 API=>18 才能支持
业务场景: 1.进入设置 2.获取搜索按钮的content-desc属性值
代码展示: 6.获取元素在屏幕上的坐标
方法:location 业务场景: 1.进入设置页面 2.获取搜索按钮在屏幕的坐标位置
代码展示: 7.获取app包名和启动名
获取包名方法:current_package 获取启动名:current_activity 业务场景: 1.启动设置 2.获取包名和启动名
代码展示:
3.APP元素事件操作API
1.前置代码
from appium import webdriver
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '5.1'
desired_caps['deviceName'] = '192.168.56.101:5555'
desired_caps['appPackage'] = 'com.android.settings'
desired_caps['appActivity'] = '.Settings'
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
2.swip滑动事件
??从一个坐标位置滑动到另一个坐标位置,只能是两个点之间的滑动 方法:swipe(start_x, start_y, end_x, end_y, duration=None) 参数: 1.start_x:起点X轴坐标 2.start_y:起点Y轴坐标 3.end_x: 终点X轴坐标 4.end_y,: 终点Y轴坐标 5.duration: 滑动这个操作一共持续的时间长度,单位:ms 业务场景: 1.进入设置 2.从坐标(129,882)滑动到坐标(122,353)
代码展示: 3.scroll滑动事件
?? 从一个元素滑动到另一个元素,直到页面自动停止 方法:scroll(origin_el, destination_el) 参数: 1.origin_el:滑动开始的元素 2.destination_el:滑动结束的元素 业务场景: 1.进入设置页 2.模拟手指从电池菜单位置 到 WLAN菜单位置的上滑操作
代码展示:
4.drag拖拽事件
?? 从一个元素滑动到另一个元素,第二个元素替代第一个元素原本屏幕上的位置 方法:drag_and_drop(origin_el, destination_el) 参数: 1.origin_el:滑动开始的元素 2.destination_el:滑动结束的元素 业务场景: 1.进入设置页 2.模拟手指将存储菜单 滑动到 WLAN菜单栏位置
代码展示: 5.应用置于后台事件
APP放置后台,模拟热启动 方法:background_app(seconds) 参数: 1.seconds:停留在后台的时间,单位:秒 业务场景: 1.进入设置页 2.将APP置于后台5s
代码展示:
4.APP模拟手势高级操作
TouchAction是AppiumDriver的辅助类,主要针对手势操作,比如滑动、长按、拖动等, 原理是将一系列的动作放在一个链条中发送到服务器,服务器接受到该链条后,解析各个动作,逐个执行。
1.前置代码
from appium import webdriver
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '5.1'
desired_caps['deviceName'] = '192.168.56.101:5555'
desired_caps['appPackage'] = 'com.android.settings'
desired_caps['appActivity'] = '.Settings'
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
?? 所有手势都要通过执行函数才会运行.
2.手指轻敲操作
模拟手指轻敲一下屏幕操作 方法:tap(element=None, x=None, y=None) 方法:perform() # 发送命令到服务器执行操作 参数: 1.element:被定位到的元素 2.x:相对于元素左上角的坐标,通常会使用元素的X轴坐标 3.y:通常会使用元素的Y轴坐标 业务场景: 1.进入设置 2.点击更多选项
代码展示: 3.手指按操作
模拟手指按下屏幕,按就要对应着离开. 方法:press(el=None, x=None, y=None) 方法:release() # 结束动作,手指离开屏幕 参数: 1.element:被定位到的元素 2.x:通常会使用元素的X轴坐标 3.y:通常会使用元素的Y轴坐标 业务场景: 1.进入设置 2.点击WLAN选项
代码展示: 4.等待操作
方法:wait(ms=0) 参数: ms:暂停的毫秒数 业务场景: 1.进入设置 2.点击WLAN选项 3.长按WiredSSID选项5秒
代码展示: 5.手指长按操作
方法:long_press(el=None, x=None, y=None, duration=1000) 参数: 1.element:被定位到的元素 2.x:通常会使用元素的X轴坐标 3.y:通常会使用元素的Y轴坐标 4.duration:持续时间,默认为1000ms 业务场景: 1.进入设置 2.点击WLAN选项 3.长按WiredSSID选项5秒
代码展示: 6.手指移动操作
模拟手机的滑动操作 方法:move_to(el=None, x=None, y=None) 参数: 1.el:定位的元素 2.x:相对于前一个元素的X轴偏移量 3.y:相对于前一个元素的Y轴偏移量 业务场景1: 1.进入设置 2.向上滑动屏幕
代码展示:
给大家的福利
业务场景2: 1.进入设置 2.向上滑动屏幕到可见"安全"选项 3.进入到安全 4.点击屏幕锁定方式 5.点击图案 6.绘制图案
代码展示:
|