appium自动化
1.选择界面元素
2.操作元素(点击,输入字符,拖曳,获取页面元素的各种属性)
3.根据获取到的数据进行分析处理
获取apk的启动activity
执行命令: 路径/aapt dump badging xxx.apk
在里面搜索: launchable-activity
如果sendkeys中要输入中文,descrip capbility中要加入这两行:
unicodeKeyborad --输入中文
resetKeyborad
--noReset = True 不清除应用数据
webdriver.Remote('...') --执行后创建一次会话, 下面的操作在driver.quit()前都在这个会话中。
http通信, 客户端歇菜后, 服务端不知道, 新的session到服务端后, 因为appium只支持一个session, 所以会报错。所以启动时要指定- --session-override
ADB命令
1. 是一个通用命令行工具
2. 与模拟器或真机进行通信
3. 进行各种设备操作,如安装,调试应用, 提供对设备上的shell访问
3. appium对android的自动化非常依赖这个工具,用这个工具获取设备信息,传送文件到手机,安装APK,启动某些应用程序等 。
ADB包含三部分:
1.客户端, 即命令本身
2.服务器 敲adb时就会启动服务,绑定5037端口
3. 后台服务器,运行到andriod手机上
tap方法: 与click类似,都是点击界面,区别是tap是针对坐标,难以用通常的方法定位元素时使用
driver.tap([(x1,y1)],duration) --坐标是列表,可以同时支持5个。
id,xpath,class等方法都是通过UI Automator API封装的
UI Automator API定位
UI Automator测试框架提供了一组API来构建UI测试
利用UI Automator API,控制测试设备
UI Automator测试框架非常适合编写黑盒自动化测试
API就是库的编辑接口application programming interface
UiSelector类就是用来选择web元素的
根据text和className来查找
code = 'new UiSelector().text("").className("")' #这过滤条件还可以继续加,过滤条件没有顺序。
ele = driver.find_element_by_ui_automator(code)
new UiSelector()生成一个对象, 后面的.text .class是过滤条件
根据resouceId来查
根据childSelector和instance方法
new UiSelector.resouceId("").childSelector(new UiSelector.class("").instance(3)) //instance从0开始
元素的子元素 new UiSelector.resouceId("").childSelector
子元素过滤条件 new UiSelector.class("").instance(3)
instance是父节点的第几个实例
index 是指Node Detail 的index的值
childSelector不一定是直接子节点
滑动
Appium WebDriver的swipe方法
1. 直接查看,获取操作坐标
2. 先获取元素坐标,再分析操作坐标(更健壮)
location = ele.location() 左上角坐标 dict 有x,y 即 location['x'], location['y']
size1 = ele.size 宽,高(dict: 有width,height) size1['width'], size1['height']
操作不可见元素方法:1先滑动到其可见 2再操作该元素
获取全屏幕尺寸
screenSize = driver.get_window_size() #返回字典
screenW = screenSize['width']
screenH = screenSize['height']
滑动的时长到滑动效果有差距,滑动快的话, 一般翻的页面更多
WebView的测试
1. app修改编译
对WebView对象加入setWebContentDebuggingEnabled的调用
WebView的自动化测试
1. 如果WebView的内容不依赖于所在的app, 1.只是打开一个url, 2.直接用Chrome浏览器打开对应的网页, 3.使用手机模式就可以了。
2. 如果WebView的内容依赖于所在App, 1. 通过chrome的远程调试功能 2. 打开chrome浏览器,地址栏输入 chrome://inspect
webview版本较老,有时没有显示inspect
Appium自动化WebView
appium中把所有的界面环境称之为 context
native部分的context的名字一般为NATIV_APP
webview部分的context则为WEBVIEW_XXX(XXX为应用包名)
查看当前有哪些context driver.context
而显示当前的context则是 driver.current_context
切换 driver.switch_to.context('WEBVIEW_XXX')
driver.switch_to.context('NATIVE_APP')
系统通知:
打开通知 driver.open_notifications()
查看通知内容, 将所有text都查找出来,再来找?
怎么从通知栏中返回应用 1, 上滑, 2 按返回键 driver.press_keycode(3)
怎么判断是否滑动到最后
1. 底部有固定元素 -- 找到这个元素, 就到底部了
2. 一点点翻动, 某一个元素的坐标位置, 前后翻动, 坐标不再变化。