1. 到sdkmanger 路径下 run : uiautomator.html
2. 启动被测应用程序。android
3. 获取该应用程序的当前页面。web
4. 常见的定位方式:缓存
driver.findElementByName: text属性
网络
driver.findElementById: sourceID属性
app
driver.findElementByXPath: 具备必定约束的路径抽象标示, 基于XPath方式测试
系统按键事件ui
press_keycode(AndroidKeyCode)//发送按键事件
例如:点击home键,home键的KeyCode是3
driver.press_keycode(3)
键名 描述 键值
KEYCODE_CALL 拨号键 5
KEYCODE_ENDCALL 挂机键 6
KEYCODE_HOME 按键Home 3
KEYCODE_MENU 菜单键 82
KEYCODE_BACK 返回键 4
KEYCODE_SEARCH 搜索键 84
KEYCODE_CAMERA 拍照键 27
KEYCODE_FOCUS 拍照对焦键 80
KEYCODE_POWER 电源键 26
KEYCODE_NOTIFICATION 通知键 83
KEYCODE_MUTE 话筒静音键 91
KEYCODE_VOLUME_MUTE 扬声器静音键 164
KEYCODE_VOLUME_UP 音量增长键 24
KEYCODE_VOLUME_DOWN 音量减少键 25
更多KeyCode能够查看下面的博客:
driver的一些比较重要操做
1.reset()
//重置app
这时候driver会重置,至关于卸载重装应用。因此本地缓存会失效
driver.reset()
2.start_activity(包名,activity名)
//启动app的某一个activity
例如:driver.start_activity("com.wuba.zhuanzhuan","./presentation.view.activity.LaunchActivity")
启动一个activity,这个activity必须是AndroidManifest.xml中有intent-filter的activity
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
这种启动activity和driver的reset()不一样的是
3.contexts
//得到全部contexts
driver.contexts
结果以下:
['NATIVE_APP', 'WEBVIEW_com.android.browser']
NATIVE_APP:native的context
WEBVIEW_com.android.browser:webview的context,存放html的容器
4.current_context
//查看当前的context
5.switch_to.context(context名)
//切换context
driver.switch_to.context("WEBVIEW_com.wuba.zhuanzhuan")
NATIVE时不能定位WEBVIEW的内容,在WEBVIEW的context时不能定位NATIVE的内容。
因此须要切换到对应的context中去进行操做
6.setNetworkConnection(bitmask掩码)
//设置网络类型
例如:设置网络类型为只开wifi
driver.set_network_connection(2)
网络的bitmask掩码以下:
| 值 (别名) | 数据链接 | Wifi 链接 | 飞行模式 |
| ------------------ | ---- | ---- | ------------- |
| 0 (什么都没有) | 0 | 0 | 0 |
| 1 (飞行模式) | 0 | 0 | 1 |
| 2 (只有Wifi) | 0 | 1 | 0 |
| 4 (只有数据链接) | 1 | 0 | 0 |
| 6 (开启全部网络) | 1 | 1 | 0 |
7.scroll(起始元素,结束元素)
driver.scroll(origin_el,destination_el)
8.得到当前页面的全部元素
driver.page_source
这能够用来判断元素是否存在,例如(assert "发布成功" in driver.page_source)
9.补充一些driver启动时可能用到的项
其实这些在上一篇启动里都有介绍,可是有些可能你们没注意到的点再列一下。这些点也是我在测试中实际遇到的点
autoLaunch :Appium是否要自动启动或安装app,默认true
desired_caps['autoLaunch'] = 'false'
有的时候我不想让appium每次都启动app,想本身去启动activity,那这个项这时就能够起做用了
noReset:在会话前是否重置app状态。默认是false
desired_caps['noReset'] = 'true'
newCommandTimeout:设置未接收到新命令的超时时间,默认60s
若是60s内没有接收到新命令,appium会自动断开链接,若是我须要很长时间作driver以外的操做,可能延长接收新命令的超时时间
desired_caps["newCommandTimeout"]=1800