Appium+RobotFrameWork测试环境搭建
前提:搭建好robotframework环境
RF基于python2.7的版本实现的一套开源自动化测试框架
推荐使用Appium Desktop,
搭建Appium环境:
1. 搭建JDK
2. 搭建SDK环境;SDK:software development kit 软件包,常用的软件是UIAutomatorViewer,进行移动端应用的元素定位
3. 连接的移动端设备,安卓真机或者模拟器(夜神)
PS:安装完模拟器之后,将sdk中的adb.exe文件复制到夜神的安装路径下的nox_adb.exe,并重命名为nox_adb.exe
4. 安装Appium desktop,直接下载安装即可。 如果安装的是Appium server,需要配置node.js,Appium server路径到环境系统变量中
5. 在RobotFrameWork中导入Appium的包,实现对移动端App的自动化测试
启动conmand命令窗口,输入pip install robotframework-appiumlibrary
6. 启动RobotFrameWork,导入AppiumLibrary,导包时,包名大小写敏感
导入AppiumLibrary后,可能会报错,提示six not found的error,启动conmand窗口,输入 pip install six,然后重启RobotFrameWork
RobotFrameWork的工程结构:
新建Project,选择type为directory——新建Suite,选择type为file——在Suite中导入library——新建Case
RF本身是一个关键字驱动的方式来实现自动化的。
腾讯QQ的登录demo:
1.RF连接模拟器,启动腾讯QQ
Open Application参数解析:
1.Appium服务端,连接固定
2.配置Appium的Capabilities:
deviceName 设备名称 可以通过conmand窗口输入 adb devices获取到
platformName 操作系统 Android
platformVersion 系统版本 4.4.2
appPackage 被测包名
com.lixin.yezonghui
appActivity 被测应用的主入口
.splash.SplashActivity
2. 进入QQ登录界面
要获取元素的定位,然后基于已定位的元素进行相对于的操作。
Appium1.6.3(客户端版)解决每次运行都需要安装Unlock以及AppiumSetting的问题
文件1地址:/Applications/Appium.app/Contents/Resources/node_modules/appium/node_modules/appium-android-driver/lib/android-helpers.js
注释掉:await helpers.pushSettingsApp(adb);
注释掉:await helpers.pushUnlock(adb);
文件2地址:
/Applications/Appium.app/Contents/Resources/node_modules/appium/node_modules/appium-android-driver/build/lib/android-helpers.js
注释掉:return _regeneratorRuntime.awrap(helpers.pushSettingsApp(adb));
新增:return context$1$0.abrupt('return', defaultIME);
注释掉:return _regeneratorRuntime.awrap(helpers.pushUnlock(adb));
新增:return context$1$0.abrupt('return', defaultIME);
重启appium
Appium Setting和Unlock在测试过程中不要轻易去掉。
虽然AppiumSetting不知道做什么用的,但是Unlock在手机锁屏的情况下会有解锁的效果。如果没有Unlock,锁屏状态下client会启动失败,而有Unlock时会自动解锁,然后执行下一步
如果有谁知道Appium Setting是做什么的,希望大家给科普一下~
AppiumLibrary常用关键字
关键字 |
含义 |
实例 |
备注 |
Click button |
点击按钮 |
Click button 登录 |
这里的登录是class属性,必须是button |
Click element |
点击元素 |
Click element [locator] |
Locator可以是resource-id,也可以是xpath,但必须是当前页面唯一存在的,一般用该关键字可以完成所有元素点击 |
Click text |
点击文字 |
Click text 我的 |
我的需要是当前页面唯一存在的 |
Input text |
在指定元素中输入文本 |
Input text [locator] 111 |
Locator可以是resource-id,也可以是xpath |
Swipe |
滑动屏幕 |
Swipe 1000 1800 100 1800
|
|
Get Text |
获取某标签内容 |
${account} Get Text [locator] |
获取内容后存储到指定变量中,从而在后续脚本中调用该内容 |
二、校验函数
关键字 |
含义 |
实例 |
备注 |
Element Name Should Be |
检查元素的name属性 |
Element Name Should Be [locator] 登录 |
locator可以是resource-id,也可以是xpath |
Element Should Be Enabled |
检查元素是否可用/可见 |
Element Should Be Enabled [locator] |
|
Page Should Contain Element |
检查界面包含某些元素 |
Page Should Contain Element [locator] |
|
Page Should Contain Text |
检查界面包含某些文字信息 |
Page Should Contain Text 预约挂号 |
|
Page Should Not Contain Element |
检查界面不包含某些元素 |
Page Should Not Contain Element [locator] |
|
Page Should Not Contain Text |
检查界面不包含某些文字信息 |
Page Should Not Contain Text 预约挂号 |
|
三、等待函数
关键字 |
含义 |
实例 |
备注 |
Wait Until Page Contains |
等待直到界面中包含某些文字,才进行下一步 |
Wait Until Page Contains 预约挂号 |
默认等待时间为5s |
Wait Until Page Contains Element |
等待直到界面中包含某些元素,才进行下一步 |
Wait Until Page Contains Element [locator] |
locator可以是resource-id,也可以是xpath |
Wait Until Page Does Not Contain |
等待直到界面中不包含某些文字,才进行下一步 |
Wait Until Page Does Not Contain 预约挂号 |
|
Wait Until Page Does Not Contain Element |
等待直到界面中不包含某些元素,才进行下一步 |
Wait Until Page Does Not Contain Element [locator] |
|