前一段时间了解到有那么一个自动化测试框架,名叫ATX,是由网易大佬@codeskyblue的团队研发的。
经过一段时间的学习,在此我总结一下ATX的优缺点。
优点:
1.环境搭建简单
2.运行速度比Appium略快
3.易上手,如果学习过其它自动化框架就能在很短的时间内学会ATX,即便是第一次学习这类框架也会感受到世界是如此美好
缺点:
1.暂时还没感受到明显的缺点
欢迎加入ATX qq群499563266
本文不对ATX安装做赘述,如果需要安装教程请另行搜索,本文更专注于ATX在工作中的实际应用。
事前准备:
mac一台(由于ios系统的封闭性,所以想做ios自动化必备mac电脑)
ios手机一台
python3+环境
ATX环境
App选择:
由于是网易的框架,所以在这里我选择网易的app“网易云课堂”做演示(当然其它公司的app也是可以用的),不要问我为什么不选择网易云音乐。
本系列文章预计分成三篇
第一篇:登录网易云课堂
第二篇:更改学习兴趣,搜索课程并标记为想学,观看课程
第三篇:套用单元测试框架,生成测试报告
ok,闲扯了这么多,现在正式开始第一篇,登录网易云课堂,首先在你的手机上安装好app,其次给它打个评价(以防跑脚本的时候冷不丁跳出来求好评,那就凉凉了),再然后确定wda的代理已经运行在你的手机上,最后把手机端口映射到电脑上。(以上这些是安装ATX会涉及的内容,所以本文一句话带过了)
本篇内容主要分为两部分
1.打开app
2.登录帐号
1.打开app
我们先来看一个demo,看一下打开一个app最简单的方法
import wda
client= wda.Client('http://localhost:8100')
client.healthcheck()
session= client.session('包名')
代码非常简单,仅需短短四行就可以实现打开app,每一个app都有包名,那么我们该怎么获得包名呢?
在命令行输入命令:ideviceinstaller -l
可以获得当前手机上所有已安装的app的包名,是不是很简单
我们可以快速得到网易云课堂的包名为:com.netease.study901iphone
然后把上面的demo的session= client.session('包名')替换为
session= client.session('com.netease.study901iphone')就行了
运行文件,看看是不是成功打开了app,由于后面没有加延迟,所以打开后会立马关闭,不要感到诧异,这是正常的!!!
2.登录帐号
接着我们要进入登录界面(目前在首页),那就是先点击"账号"页面,然后点击"登录/注册"(或者你想点击"我的学习",然后点击"登录",也是一样的),本来打算把进入app的广告页面(就是右上角是"跳过"按钮的那个页面)直接跳过的,不过广告页面显示挺短的,一两秒就过了,就不专门做处理了,如果你有兴趣的话可以写一下。
根据wda自带的inspector我们可以获取到元素的属性,如图
WebDriverAgent Inspector我们要做的就是点击"帐号"一下,然后点击"登录/注册"一下
我们可以看到"帐号"这个元素的name为帐号,同理可得"登录/注册"元素的name为元素/注册,但是在这里提醒一下大家,不要想当然以为name就是元素的名字,尽量用inspector确认一下元素的属性再使用
直接上代码
session(name='帐号').tap()
session(name='登录/注册').tap()
粘贴到前面已经成功打开app的代码后面
运行一下试试~
不出意外报错了,没有发现"登录/注册"这一元素,再看一下app当前所在的页面,你会发现还停留在首页,那可以推断出帐号这个点击操作没有成功执行,为什么呢?
忽然想到,打开app后的广告页,会不会内页已经加载完成(但被广告页遮挡),帐号的点击操作实际点击到了广告页面上了呢?
有一个想法了,那怎么让点击操作不落在广告页面上,visible属性了解一下
session(name='帐号',visible=True).tap()
这句比上面多了visible=True,实际作用就是当name为帐号的元素可见时再点击
ok,那我们再试试~
是不是成功进入了登录界面!
然后我们选择手机号登录的方法,然后还要输入帐号,密码,最后点击登录
理想的话应该就是四个操作,如下
登录页面inspectorsession(name='手机号登录').tap()
# 输入帐号
session(className='TextField').set_text('你的帐号')
# 输入密码
session(className='SecureTextField').set_text('你的密码')
# session(value='请输入手机号').set_text('你的帐号')
# session(value='请输入6-16密码').set_text('你的密码')
# 点击登录
session(name='登 录').tap()
由于帐号输入框和密码输入框没有name,所以这里我没有采用name的定位方式,而是className的定位方式,另外还多写了一种用value定位的方式(已注释的两行),有兴趣的同学可以试试。
我们把上面这段代码拷到之前的代码后面,并将你的帐号和密码填充上去,运行一下,
艹,又报错了!
"Keyboard is not present"
键盘不存在,其实就是键盘没有调出来
真不是我故意搞你,我一开始也是这么想的,但是不知道为啥,键盘没有调出来(这里还希望知道的大佬们能说一下原因)
既然不存在,那就把它搞出来,set_text方法不行,那我就用tap方法,我点击帐号输入框,总会调出键盘的,所以在"手机号登录"那一句后面再加一句
session(className='TextField').tap()
我们再试着运行一下,这次百分之一百成功了!
我们成功登录到了帐号页面有木有~
由于本人没用git,所以完整代码保存到百度云上了,感兴趣的同学请到下面的链接下载,会有更详细的注释。
链接: https://pan.baidu.com/s/11F_Ab6t7SnOzXCo4JbHlzQ 密码: 2uu5
那我们下一篇再见吧,bye~
感谢阅读,欢迎转载。
如有错误请及时指出,谢谢!
如有问题请留言,我懂的必然会回复!
共勉。
网友评论