美文网首页ios
ATX ui自动化ios实战(一)

ATX ui自动化ios实战(一)

作者: xFlamingo | 来源:发表于2018-07-30 20:35 被阅读0次

    前一段时间了解到有那么一个自动化测试框架,名叫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,那我们再试试~

    是不是成功进入了登录界面!

    然后我们选择手机号登录的方法,然后还要输入帐号,密码,最后点击登录

    理想的话应该就是四个操作,如下

    session(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()

    登录页面inspector

    由于帐号输入框和密码输入框没有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~

    感谢阅读,欢迎转载。

    如有错误请及时指出,谢谢!

    如有问题请留言,我懂的必然会回复!

    共勉。

    相关文章

      网友评论

        本文标题:ATX ui自动化ios实战(一)

        本文链接:https://www.haomeiwen.com/subject/wsjimftx.html