Robotframework+appium 实现移动端自动化测试
文章目录
一 环境搭建:
二 脚本实例
前置条件:
1.开启Appium Server GUI;
2.开启Appium Inspector:方便随时获取元素属性;
开启后需输入:platformName Android,并启动会话
3.打开虚拟机或链接上测试机;
4.获取待测应用信息:
其中appPackage、appActivity获取方式如下:
1.aapt命令来获取包名
aapt dump badging E:\XXX.apk(本地apk包路径)
appPackage的值如上
appActivity的值如上;
2.adb命令来获取当前打开应用的包名
a 测试机或模拟器上打开待测应用,命令提示符中输入:
adb shell dumpsys window | findstr mCurrentFocus
前面是appPackage的值,后面是appActivity的值
b 测试机或模拟器上打开待测应用,命令提示符中输入:
adb shell dumpsys window | findstr mFocusedApp
2.1微信登录
首先打开微信,使用关键字Open Application:
Open Application http://localhost:4723/wd/hub platformName=Android deviceName=127.0.0.1:62001 appPackage=com.tencent.mm appActivity=.ui.LauncherUI noReset=True platformVersion=7.1.2
接着inspector中获取手机号xpath路径:
input text //*[@text='请填写手机号'] 18000000000
或者添加类型:属性class的值:
input text //android.widget.EditText[@text='请填写手机号'] 18000000000
也可以通过resource-id识别:
input text id=com.tencent.mm:id/cd7 18000000000
由于每台手机的id值不一样,不建议使用ID识别
使用其他手机登录微信的脚本如下:
2.2进入微信小程序-店店U惠
进入微信小程序涉及到页面的滑动,此处通过swipe实现向下滑动功能
Wait Until Element Is Visible //*[@text='我'] 10
#获取屏幕大小
${width} Get Window Width
${height} Get Window Height
log width is ${width},hetght is ${height}
${start_x} Evaluate ${width}/2
${start_y} Evaluate ${height}/4
${end_x} Evaluate ${width}/2
${end_y} Evaluate ${height}/4*3
Swipe ${start_x} ${start_y} ${end_x} ${end_y} 1000
Wait Until Element Is Visible //*[@text='店店U惠'] 10
click element //*[@text='店店U惠']
log ----------------开始断言 ------------------------
${result} run keyword and return status Run Keyword And Continue On Failure Wait Until Page Contains 正在加载...
run keyword if ${result}==True log 店店U惠小程序加载中... ELSE Fail 点击小程序失败!
2.3微信退出
微信的退出页面存在一个向上滚屏的功能,同样使用swipe实现
Open Application ${REMOTE_URL[0]} platformName=${platformName[0]} deviceName=${deviceName[0]} appPackage=${appPackage[0]} appActivity=${appActivity[0]} noReset=True platformVersion=${platformVersion[0]}
AppiumLibrary.Wait Until Element Is Visible xpath=/hierarchy/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.view.ViewGroup/android.widget.FrameLayout[1]/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.LinearLayout/android.widget.RelativeLayout[4]/android.widget.LinearLayout 10
AppiumLibrary.Click Element xpath=//*[@text='我'] #我标签页
AppiumLibrary.Wait Until Element Is Visible xpath=//*[@text='设置'] 10
AppiumLibrary.Click Element xpath=//*[@text='设置'] #点击设置
#获取屏幕大小
${width} Get Window Width
${height} Get Window Height
${start_x} Evaluate ${width}/2
${start_y} Evaluate ${height}/4*3
${end_x} Evaluate ${width}/2
${end_y} Evaluate ${height}/4
wait Until Element Is Visible xpath=//*[@text='通用'] 10 #等待进入设置页面
Swipe ${start_x} ${start_y} ${end_x} ${end_y} 1000 #滑动页面到退出按钮位置
Wait Until Element Is Visible xpath=//*[@text='退出'] 10
Click Element xpath=//*[@text='退出'] #点击退出按钮
Wait Until Element Is Visible xpath=//*[@text='退出登录'] 10
Click Element xpath=//*[@text='退出登录'] #点击退出登录
log ----------------开始断言 ------------------------
${result} run keyword and return status Run Keyword And Continue On Failure Wait Until Page Contains 正在退出
run keyword if ${result}==True log 发起退出成功! ELSE Fail 发起退出失败! [添加链接描述](https://quanjing.feishu.cn/9dba2035-9cc0-4544-b8f8-6fa144ceceb8)
三 遇到问题:
1. appium连接真机报错:Failed to create session. An unknown server-side error occurred while processing the command.
第一次连接真机没有安装 Appium Settings,只开启了usb调试,导致uiautomator可以连接 AppiumInspect连接报错,开启权限即可
在这之前APPIUM报错:occurred while processing the command. Original error: The desired capabilities must include either an app, appPackage or browserName
添加了:“automationName”:“UiAutomator1” 然后就换了错误提示,由于之前在模拟器上操作过,突然意识到是移动端没有安装Appium Settings,安装Appium Settings后,“automationName”:"UiAutomator1"就可以去掉了
附:appium -Android keycode
appium -Android keycode
电话按键:
键名 描述 键值
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_ENTER 回车键 66
KEYCODE_ESCAPE ESC键 111
KEYCODE_DPAD_CENTER 导航键 确定键 23
KEYCODE_DPAD_UP 导航键 向上 19
KEYCODE_DPAD_DOWN 导航键 向下 20
KEYCODE_DPAD_LEFT 导航键 向左 21
KEYCODE_DPAD_RIGHT 导航键 向右 22
KEYCODE_MOVE_HOME 光标移动到开始键 122
KEYCODE_MOVE_END 光标移动到末尾键 123
KEYCODE_PAGE_UP 向上翻页键 92
KEYCODE_PAGE_DOWN 向下翻页键 93
KEYCODE_DEL 退格键 67
KEYCODE_FORWARD_DEL 删除键 112
KEYCODE_INSERT 插入键 124
KEYCODE_TAB Tab键 61
KEYCODE_NUM_LOCK 小键盘锁 143
KEYCODE_CAPS_LOCK 大写锁定键 115
KEYCODE_BREAK Break/Pause键 121
KEYCODE_SCROLL_LOCK 滚动锁定键 116
KEYCODE_ZOOM_IN 放大键 168
KEYCODE_ZOOM_OUT 缩小键 169
组合键:
键名 描述
KEYCODE_ALT_LEFT Alt+Left
KEYCODE_ALT_RIGHT Alt+Right
KEYCODE_CTRL_LEFT Control+Left
KEYCODE_CTRL_RIGHT Control+Right
KEYCODE_SHIFT_LEFT Shift+Left
KEYCODE_SHIFT_RIGHT Shift+Right
基本按键:
键名 描述 键值
KEYCODE_0 按键'0' 7
KEYCODE_1 按键'1' 8
KEYCODE_2 按键'2' 9
KEYCODE_3 按键'3' 10
KEYCODE_4 按键'4' 11
KEYCODE_5 按键'5' 12
KEYCODE_6 按键'6' 13
KEYCODE_7 按键'7' 14
KEYCODE_8 按键'8' 15
KEYCODE_9 按键'9' 16
KEYCODE_A 按键'A' 29 metastate=1(大写)metastate=0(小写) 默认小写
KEYCODE_B 按键'B' 30 metastate=1(大写)metastate=0(小写) 默认小写
KEYCODE_C 按键'C' 31 metastate=1(大写)metastate=0(小写) 默认小写
KEYCODE_D 按键'D' 32 metastate=1(大写)metastate=0(小写) 默认小写
KEYCODE_E 按键'E' 33 metastate=1(大写)metastate=0(小写) 默认小写
KEYCODE_F 按键'F' 34 metastate=1(大写)metastate=0(小写) 默认小写
KEYCODE_G 按键'G' 35 metastate=1(大写)metastate=0(小写) 默认小写
KEYCODE_H 按键'H' 36 metastate=1(大写)metastate=0(小写) 默认小写
KEYCODE_I 按键'I' 37 metastate=1(大写)metastate=0(小写) 默认小写
KEYCODE_J 按键'J' 38 metastate=1(大写)metastate=0(小写) 默认小写
KEYCODE_K 按键'K' 39 metastate=1(大写)metastate=0(小写) 默认小写
KEYCODE_L 按键'L' 40 metastate=1(大写)metastate=0(小写) 默认小写
KEYCODE_M 按键'M' 41 metastate=1(大写)metastate=0(小写) 默认小写
KEYCODE_N 按键'N' 42 metastate=1(大写)metastate=0(小写) 默认小写
KEYCODE_O 按键'O' 43 metastate=1(大写)metastate=0(小写) 默认小写
KEYCODE_P 按键'P' 44 metastate=1(大写)metastate=0(小写) 默认小写
KEYCODE_Q 按键'Q' 45 metastate=1(大写)metastate=0(小写) 默认小写
KEYCODE_R 按键'R' 46 metastate=1(大写)metastate=0(小写) 默认小写
KEYCODE_S 按键'S' 47 metastate=1(大写)metastate=0(小写) 默认小写
KEYCODE_T 按键'T' 48 metastate=1(大写)metastate=0(小写) 默认小写
KEYCODE_U 按键'U' 49 metastate=1(大写)metastate=0(小写) 默认小写
KEYCODE_V 按键'V' 50 metastate=1(大写)metastate=0(小写) 默认小写
KEYCODE_W 按键'W' 51 metastate=1(大写)metastate=0(小写) 默认小写
KEYCODE_X 按键'X' 52 metastate=1(大写)metastate=0(小写) 默认小写
KEYCODE_Y 按键'Y' 53 metastate=1(大写)metastate=0(小写) 默认小写
KEYCODE_Z 按键'Z' 54 metastate=1(大写)metastate=0(小写) 默认小写