Robotframework-Appium系列:登录操作
之前Appium的环境已经配置完成(参考Robotframework-Appium系列:安装配置),接下来就是如何使用Appium来完成我们的apk的测试工作。
一、环境准备
所需的软件列表如下
- Robotframework
- Appium
- Android模拟器--夜神模拟器
- 测试的apk文件
- uiautomatorviewer:apk软件定位工具
启动上述列出的软件,如截图所示
RobotFramework打开界面如图所示

Appium配置界面和启动界面如图所示

说明
1. 未启动显示的是三角形,启动之后变为正方形
2. 测试的应用程序的路径
3. 测试的应用程序的包名以及activity名,在路径输入之后,会自动显示,不用修改,使用默认
4. 测试apk的平台和使用的工具,这里选择的是Android6.0,Appium工具
Appium启动成功界面如图所示

Android模拟器--夜神模拟器,如图所示

在第一次使用夜神模拟器的时候,会自动安装Appium Settings和Unlock两个工具;apk文件可以直接拖到夜神模拟器中,模拟器会自动安装。
- uiautomatorviewer:apk软件定位工具,本机启动位置和截图如图所示


二、RobotFramework关键字封装
uiautomatorviewer定位apk元素
安装apk完成之后,打开需要测试的apk,点击图标所示1,定位元素如图

说明
1. 图标1处,打开apk后,点击此处可以定位当前页面中的所有元素信息
2. 图标2处,定位的用户名的具体元素定位
项目结构和library以及resource的导入
项目结构如图所示

关键字封装
接下来就是关键字封装,在robotframework中首先需要打开测试的应用程序,打开应用程序的关键字封装代码如下
打开应用程序
Open Application http://192.168.8.170:4723/wd/hub platformName=Android
platformVersion=6.0.0 deviceName=192.168.8.170:62001
app=F:\\test\\mis.apk
appPackage=com.xxx.xxx
... appActivity=com.xxx.xxx.atys.StartAty unicodeKeyboard=True resetKeyboard=True
界面如图所示

打开应用程序之后,就需要定位我们刚刚使用uiautomatorviewer工具定位的登陆用户名,具体代码如下
输入用户名
[Arguments] ${username}
AppiumLibrary.wait until page contains element id=com.xxx.xxx:id/username
AppiumLibrary.input text id=com.xxx.xxx:id/username ${username}
这样,登陆的用户名的关键字已经封装好了,在下次使用的时候可以直接使用封装好的关键字-输入用户名即可。
三、登陆流程
关于登陆页面的关键字封装完成之后,接下来就是登陆流程的梳理,针对测试apk,登陆的步骤如下:
- 打开应用apk程序
- 在欢迎页面中点击开始
- 输入登陆的用户名
- 输入登陆的密码
- 点击登陆
- 跳过新手指引
根据登陆的流程,接下来就是针对已经封装好的关键字进行流程的操作,代码如下:
登录成功
打开应用程序
点击开始
截图 login
输入用户名 ${username}
输入密码 ${password}
点击登录
截图 login
跳过新手指引
截图 login
四、断言
而对于一个测试用例而已,最重要的就是断言,而针对登陆成功的断言,我们只需要判断登陆的用户名和我们输入的用户名是否一致,如果一致则登陆成功,否则登陆失败。
而apk中登陆的用户名定位需要先进入个人中心,所以封装的关键字如下
进入个人中心
appiumLibrary.click element id = com.xxx.xxx:id/txt_more1
获取登录的用户名
${getLoginName} appiumLibrary.get text id = com.xxx.xxx:id/tvName
[Return] ${getLoginName}
那么接下来就是断言,在robotframework这里使用should contain关键字断言,代码如下
#断言
进入个人中心
${getLoginName} 获取登录的用户名
BuiltIn .should contain ${username} ${getLoginName}
注意
- 此处的关键字
should contain使用的是Builtln包,所以需要加上包名
五、集成jenkins执行用例
之前偶然发现集成工具jenkins,使用一段时间之后,发现它的功能竟这么强大,基本上我们想要实现的集成都可以通过jenkins集成完成操作,省去了一系列麻烦的操作。
目前接触的更新测试环境的代码、接口postman和jmeter都可以使用jenkins工具进行集成构建,对于公司长期的项目进行定时构建,并且发送测试结果给指定的负责人。这样早上来到公司就可以直接看到测试结果。而对于多次迭代的项目测试,不仅提高了工作效率,相对而言也节省了成本。
具体的配置,可以参考:RobotFrameWork自动化系列:安装配置,具体配置截图所示

jenkins运行结果展示



邮件提醒和文件配置可以参考:JMeter接口测试系列:Jmeter+jenkins+ant 的自动化构建
这里集成结果会发送到指定的邮箱中,这样我们就可以根据测试结果提bug到bug管理系统了。
封装的所有关键字代码展示如下
打开应用程序
Open Application http://192.168.8.170:4723/wd/hub platformName=Android
platformVersion=6.0.0 deviceName=192.168.8.170:62001
app=F:\\test\\mis.apk
appPackage=com.xxx.xxx
... appActivity=com.xxx.xxx.atys.StartAty unicodeKeyboard=True resetKeyboard=True
切换服务器
#切换登录服务器
AppiumLibrary.click element id = com.xxx.xxx:id/login_iv_icon
AppiumLibrary.click element id = com.xxx.xxx:id/login_iv_icon
AppiumLibrary.click element id = com.xxx.xxx:id/login_iv_icon
AppiumLibrary.click element id = com.xxx.xxx:id/login_iv_icon
AppiumLibrary.click element id = com.xxx.xxx:id/login_iv_icon
AppiumLibrary.click element id=com.xxx.xxx:id/login_rela_login
截图
[Arguments] ${ScreenName}
AppiumLibrary.Capture Page Screenshot ${ScreenName}
输入用户名
[Arguments] ${username}
AppiumLibrary.wait until page contains element id=com.xxx.xxx:id/username
AppiumLibrary.input text id=com.xxx.xxx:id/username ${username}
输入密码
[Arguments] ${password}
AppiumLibrary.input text id=com.xxx.xxx:id/pwd ${password}
点击登录
AppiumLibrary.click element id=com.xxx.xxx:id/login
跳过新手指引
AppiumLibrary.click element id = com.xxx.xxx:id/jump_over
点击监测统计
AppiumLibrary.click element id = com.xxx.xxx:id/txt_poi1
点击日历选择
AppiumLibrary.click element id =com.xxx.xxx:id/anIvRight
进入个人中心
appiumLibrary.click element id = com.xxx.xxx:id/txt_more1
获取登录的用户名
${getLoginName} appiumLibrary.get text id = com.xxx.xxx:id/tvName
[Return] ${getLoginName}
登录页面点击下一步
AppiumLibrary.click element id = com.xxx.xxx:id/guide4_btn
完整的登陆成功测试用例代码如下
登录成功
打开应用程序
点击开始
截图 login
输入用户名 ${username}
输入密码 ${password}
点击登录
截图 login
跳过新手指引
截图 login
#断言
进入个人中心
${getLoginName} 获取登录的用户名
BuiltIn .should contain ${username} ${getLoginName}
如图

Robotframework-Appium系列:登录操作的更多相关文章
- robotframework自动化系列:操作mysql数据库
随着项目自动化深入和不断完善,大部分功能都已经能完成了自动化的操作:但是在设备添加的时候,遇到了难题.添加设备的时候mac必须是服务器设备管理中已经存在的mac地址,且是没有关联或绑定用户的设备信息. ...
- robotframework自动化系列:登陆操作
robotframework自动化系统:登录 robotframework对于编程能力比较弱的测试人员而言,真的是雪中送炭!我们可以使用robotframework根据之前完成的测试用例,一步步完善自 ...
- robotframework自动化:登陆操作
robotframework自动化系统:登录 robotframework对于编程能力比较弱的测试人员而言,真的是雪中送炭!我们可以使用robotframework根据之前完成的测试用例,一步步完善自 ...
- shell编程系列25--shell操作数据库实战之备份MySQL数据,并通过FTP将其传输到远端主机
shell编程系列25--shell操作数据库实战之备份MySQL数据,并通过FTP将其传输到远端主机 备份mysql中的库或者表 mysqldump 常用参数详解: -u 用户名 -p 密码 -h ...
- shell编程系列22--shell操作数据库实战之shell脚本与MySQL数据库交互(增删改查)
shell编程系列22--shell操作数据库实战之shell脚本与MySQL数据库交互(增删改查) Shell脚本与MySQL数据库交互(增删改查) # 环境准备:安装mariadb 数据库 [ro ...
- 保存mysql用户的登录信息到~.my.cnf文件;用于方便登录操作。
原理说明: 在用户调用mysql 这个客户端程序去登录目标服务器时,mysql客户端程序会从本地读取配置文件信息,它要去读的配置文件包括 /etc/my.cnf /etc/mysql/my.cnf ~ ...
- python3 selenium 登录操作
使用场景: 测试过程中,有的时候需要登录才可以进行其他操作 举例说明: # coding=utf-8 """ :author: 花花测试 :time: 2017.05.0 ...
- robotframework自动化系列:随机下拉框
robotframework自动化系列:随机下拉框 随着项目自动化不断推进,在下拉框定位的时候出现些问题,每次下拉框选择都是相同的下拉选项,如果想每次选择的选项不一样,该如何实现呢,查找了很多资料,没 ...
- 使用ASIFormDataRequest完成用户的登录操作
ASIFormDataRequest是用于向表单post数据或get数据,可以用于用户向服务器端发送请求完成登录注册,上传下载数据的操作. 之前写过一篇文章是介绍使用ios内置的功能完成登录操作(NS ...
随机推荐
- PHP Xdebug安装及配置
1.首先在官方网站下载dll文件; Xdebug官方网站 2.将php_xdebug.dll文件放入php/ext文件夹下; 3.编辑php.ini,在文件最后加入如下代码: ; Xdebug zen ...
- JAVA基础面试(一)
1.一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致. 2.Java有 ...
- Microsoft SQL Server 2008 R2数据库备份 - 人工备份
业务介绍 数据库人工备份是指由相关管理人员通过主动的手工方式备份数据库文件.在一些特殊的时间节点,如重要资料的录入完成.软硬件环境更新前等需要特别关注数据库安全的时候,一定要进行数据库的人工备份,以保 ...
- Mybatis(一)实现单表的增删改查
1.1 什么是Mybatis MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并 ...
- Caddy服务器搭建和实现文件共享
1:Caddy介绍 作为新兴 Web 服务器,Caddy 提供了很多简单易用的功能而没有历史的包袱,其默认支持并且能帮你自动配置 HTTP/2.HTTPS,对于 IPV6.WebSockets 都有很 ...
- 【MySQL】20个经典面试题,全部答对月薪10k+
Part2:经典题目 1.MySQL的复制原理以及流程 基本原理流程,3个线程以及之间的关联: 2.MySQL中myisam与innodb的区别,至少5点 (1).问5点不同: (2).innodb引 ...
- 前端CSS的工程化——掌握Sass这四大特性就够了
初遇 CSS,一见倾心 记得刚遇见css的时候,咱像是见了美人儿一样,简直是爱不释手啊,简简单单写几行算不上代码的代码,就能做出这么漂亮的东西,这也成了咱前端之路的最初动力. 然而,随着项目体量和页面 ...
- System.Security.Cryptography.RSA.FromXmlString 系统找不到指定的文件和X509读取证书文件系统找不到指定的文件异常
前言: 最近公司增加服务器,在新增加的服务器中发现一些问题. 1.应用程序在读取证书文件中出现"系统找不到指定的文件."异常,但是已经确认证书文件存在.本地测试也可以读取,就在新增 ...
- 两年JAVA程序员的面试总结
前言 工作两年左右,实习一年左右,正式工作一年左右,其实挺尴尬的,高不成低不就.因此在面试许多公司,找到了目前最适合自己的公司之后.于是做一个关于面试的总结.希望能够给那些依旧在找工作的同学提供帮助. ...
- NOIP2017普及组解题报告
刚参加完NOIP2017普及,只考了210,于是心生不爽,写下了这篇解题报告...(逃 第一次写博,望dalao们多多指导啊(膜 第一题score,学完helloworld的人也应该都会吧,之前好多人 ...