一、基础操作
1.1 寻找activity & package
- 命令行输入
adb shell dumpsys window | grep mFocusedApp
1.2 关闭app跟驱动
-
关闭app
close_app()
-
关闭驱动
quit()
1.3 安装跟卸载以及判断
- 安装应用
install_app('path')
- 卸载应用
remove_app('package_name')
- 判断某个应用是否安装
is_app_installed('package_name')
1.4 模拟按home键
background_app(time)
二、元素定位
-
注意点
- 当前屏幕范围内可见
2.1 定位一个元素
-
通过id定位
driver.find_element_by_id(id_value)
-
通过class_name定位
driver.find_element_by_class_name(class_value)
-
通过xpath定位 (content_desc)
driver.find_element_by_xpath(xpath_value)
2.2 定位一组元素
-
通过id定位
driver.find_elements_by_id(id_value)
-
通过class_name定位
driver.find_elements_by_class_name(class_value)
-
通过xpath定位 (content_desc)
driver.find_elements_by_xpath(xpath_value)
三、元素等待
3.1 显式等待
- 关键类:WebDriverWait
- 学会封装
- 在设置了显示等待之后,在等待时间之捏,以设置的频率进行定位
wait = WebDriverWait(driver, time, frequency)
wait.until(lambda x: x.find_elements_by_id(id_value))
3.2 隐式等待
- 在设置了超时时间后,在该等待时间内等待定位元素。
- 出现,则直接进行后续操作;没出现,报错。
driver.implicity_wait(time)
3.3 隐式等待与显示等待的选择
- 作用域:
- 显式等待单个有效,隐式等待全剧有效
- 方法:
- 显式等待方法封装在WebDriverWait类里,而隐式等待则可以直接调用
- 对比:
- 使用角度上:
- 隐式等待简单
- 显式等待相对负责
- 灵活性上:
- 显式等待灵活,针对每一个元素
- 隐式等待针对全局
- 对比sleep
- sleep时间固定,造成时间上的浪费
- 元素等待可以让元素出来之后第一时间进行操作。
- 使用角度上:
四、元素操作
4.1 元素点击
-
点击
element.click()
4.2 输入与清空输入框内容
-
输入输入框
element.send_keys('text')
-
注意点:输入中文可能有问题,加入以下两行代码
dedired_caps['unicodekeyboard'] = True dedired_caps['resetkeyboard'] = True
-
-
清空输入框
element.clear()
4.3 获取元素文本
-
获取文本
element.text
4.4 获取元素大小与位置
-
获取元素大小
返回字典:{height :_ , width : _ ,}两个值,int类型
element.location
-
获取元素位置
返回字典:{x :_ , y : _ ,} 两个值(int类型)
element.size
4.5 获取元素属性
-
元素属性
element.get_attribute(value)
-
注意点
有一些属性的名称不同,写法应发生改变
value = 'text' 返回 content-desc/text 属性值
value = 'resourceId' 返回 resource-id 属性值,只有API>18才支持
value = 'className' 返回 class 属性值,只有API>18才支持
-
五、滑动拖拽事件
5.1 swipe 滑动事件
-
方法
从一个坐标位置点到另一个坐标位置点
driver.swipe(start_x, start_y, end_x, end_y, duration=None)
- 注意点
- 有误差
- duration为ms
- 时间越长,惯性越小
- 距离越长,实际距离也越大
- 注意点
5.2 scroll 滑动事件
-
方法
从一个元素划到另一个元素,直到页面停止
driver.scoll(origin_el, destination_el)
- 小结
- 不能设置持续时间,惯性很大
- 小结
5.3 drag_and_drop 拖拽事件
-
方法
从一个元素滑到另一个元素,第二个元素替代第一个元素的位置
driver.drag_and_drop(origin_el, destination_el)
- 小结
- 不能设置持续时间,没有惯性
- 小结
5.4 滑动事件和拖拽事件的选择
看是否存在惯性,以及传参是元素还是坐标
- 有惯性,传元素
- scroll
- 无惯性,传元素
- drag_and_drop
- 有惯性,传坐标
- swipe,较短的duration
- 无惯性,传坐标
- swipe,较长的duration