共计 3998 个字符,预计需要花费 10 分钟才能阅读完成。
通过之前的文章,我们环境也配置好了,设备中的应用也安装了,然后包名也获取了,这篇文章我们一起来编写一个登录的操作脚本吧。
2|0获取应用元素
如同 web 自动化测试一样,app 的页面元素获取也是一个比较重要的组成部分。我们使用什么获取元素呢,当然是使用 airtestIDE
了。我们不用它编写脚本可以,但是我们不能没有它来获取 APP 页面的元素信息。
2|1poco 的使用
- 首先我们需要开启 poco
Android
页面元素识别
我们在 airtestIDE 中展开 poco 辅助窗的列表。然后我们选择Android
,箭头 1 所指部分。
选中之后,等 2 秒左右,右侧的设备显示窗会刷新一下。
然后看第二个箭头所指的按钮。鼠标放上去之后显示poco inspecter
,poco 检查,这个按钮就和 chrome 浏览器开发者工具中的检查按钮是一样的。
然后我们点击这个按钮一下,去右侧设备屏幕显示框检查一下元素。
可以看到当我们把鼠标悬浮在 密码登录
控件上时,中间的Log 查看窗
,显示出了这个控件的详细信息。
而对于这个控件元素来说:name 属性正是我们所需要的。箭头所指部分。
3|0启动 / 关闭 app
上一篇文章我们已经获取到了应用的包名。如下:
声明:没有恶意用途,也没有商业用途,纯属为了写博客交流学习。
‘com.iflytek.elpmobile.smartlearning’
然后我们先来试试启动 APP 和关闭 app 的操作吧。
编写脚本:
!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
sys.path.append(‘.’)
__author__ = ‘1084502012@qq.com’
import unittest
from airtest.core.api import *
from airtest.core.android import Android
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)
auto_setup(__file__)
start_app(‘com.iflytek.elpmobile.smartlearning’)
time.sleep(5)
stop_app(‘com.iflytek.elpmobile.smartlearning’)
运行之前我们保证 智学网 app
没有被启动,
然后在 pycharm 中运行一下这个脚本。我们观察模拟器的情况。
运行结束后,可以看到,智学网 app 被启动了,然后等待了 5 秒,又被关闭了。这就是 airtest 启动和关闭 app 的方法。
4|0编写登录操作
我们现在来编写一个完整的登录操作吧,通过 airtestIDE 获取 app 页面元素,然后在 pycharm 中编写脚本代码。
!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
sys.path.append(‘.’)
__author__ = ‘1084502012@qq.com’
from airtest.core.api import *
from airtest.core.android import Android
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)
auto_setup(__file__)
start_app(‘com.iflytek.elpmobile.smartlearning’)
sleep(5)
poco(name=”com.iflytek.elpmobile.smartlearning:id/account_login_tv”).click()
sleep()
poco(name=”com.iflytek.elpmobile.smartlearning:id/login_name”).set_text(“”)
sleep()
poco(name=”com.iflytek.elpmobile.smartlearning:id/login_name”).set_text(‘18291900215’)
sleep()
poco(name=”com.iflytek.elpmobile.smartlearning:id/login_pwd”).set_text(“”)
sleep()
poco(name=”com.iflytek.elpmobile.smartlearning:id/login_pwd”).set_text(‘test001’)
sleep()
poco(name=”com.iflytek.elpmobile.smartlearning:id/login_btn”).click()
sleep(8)
stop_app(‘com.iflytek.elpmobile.smartlearning’)
编写完成了,我们来运行一下。
可以看到:
- 应用程序被启动,等待 5 秒用于 app 加载时间
- 通过 poco 的
click
方法我们实现了点击操作 - 通过 poco 的
set_text
方法我们输入账号和密码,在输入前如果存在密码就先清空,这样我们就能看到输入的过程了 - 登录成功后等待 8 秒用于留时间给你观察
- 最后停止应用
这样一个登录操作就简单的写好了
5|0简单封装一下
上面的脚本执行成功了但是看起来不是很整齐,所以我先简单的用 unittest
封装一下,并加入退出登录功能。
!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
sys.path.append(‘.’)
__author__ = ‘1084502012@qq.com’
import unittest
from airtest.core.api import *
from airtest.core.android import Android
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)
auto_setup(__file__)
class TestZhiXue(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
start\_app('com.iflytek.elpmobile.smartlearning')
sleep(5)
@classmethod
def tearDownClass(cls) -> None:
stop\_app('com.iflytek.elpmobile.smartlearning')
def test\_001(self):
"""进行登录操作"""
poco(name="com.iflytek.elpmobile.smartlearning:id/account\_login\_tv").click()
sleep()
poco(name="com.iflytek.elpmobile.smartlearning:id/login\_name").set\_text("")
sleep()
poco(name="com.iflytek.elpmobile.smartlearning:id/login\_name").set\_text('18291900215')
sleep()
poco(name="com.iflytek.elpmobile.smartlearning:id/login\_pwd").set\_text("")
sleep()
poco(name="com.iflytek.elpmobile.smartlearning:id/login\_pwd").set\_text('test001')
sleep()
poco(name="com.iflytek.elpmobile.smartlearning:id/login\_btn").click()
sleep(8)
def test\_002(self):
"""进行登出操作"""
poco(text="我的").click()
sleep()
poco(name="com.iflytek.elpmobile.smartlearning:id/head\_collect").click()
sleep()
poco(name="com.iflytek.elpmobile.smartlearning:id/btn\_user\_exit").click()
sleep()
poco(name="com.iflytek.elpmobile.smartlearning:id/dialog\_right").click()
sleep(5)
if __name__ == ‘__main__’:
unittest.main(verbosity=2)
运行一下:
———————————————————————-
Ran 2 tests in 39.899s
OK
登录和退出登录都没有问题,我们的登录操作的脚本就编写完毕了。
是不是觉得很简单。因为我也不擅长写博客,有什么建议可以在评论区对我说。
下期见。