airtest+pytest实战教程02-APP页面元素获取
前言
前面已经弄好了测试环境配置和基础的airtestIDE使用。入门使用应该不是问题了。
但是在airtestIDE中编写代码是有局限性的,所以我们使用pycharm编写脚本。
工具选择
工欲善其事必先利其器。工具确定
- IDE
- pycharm2020.1社区版 注:社区版就够用了
- python
- 3.7.7 注::3.8+的版本可能会有一些第三方库不兼容
好了工具选好了,我们开始吧!
安装airtest库
打开pycharm,选择新建项目。
如图: 新项目名称为steward
点击create创建。
进入pycharm之后项目中会有一个venv的文件夹,这是pycharm为我们创建的虚拟环境。
现在我们点击下面的Terminal
,打开cmd命令行。输入:
pip install airtest
这个包东西比较多,网速慢的话可能会等许久。 安装完成后我们在安装poco。
值得注意的是poco在pypi中的名称并不叫poco而是pocoui,至于原因可能是有先来者了
pip install pocoui
两个都install successful就安装成功了。
获取应用元素
我们环境也配置好了,设备中的应用安装了,然后包名获取了,airtest的python库也安装了。
我们就一起来编写一个登录的操作脚本吧。编写脚本之前先熟悉一下元素获取。
如同web自动化测试一样,app的页面元素获取也是一个比较重要的组成部分。
我们使用什么获取元素呢,当然是使用airtestIDE
了。我们不用它编写脚本可以,但是我们不能没有它来获取APP页面的元素信息。
airtest获取元素
airtest的运行方式是通过截图并对比预期的图片,对比成功则操作截图的区域。所以没有页面元素树的功能。
pocoui获取元素
poco-Android是支持页面元素获取的,它和uiautomator2有着基本相同的语法和元素定位方式。
开启元素识别
- 首先我们需要开启poco
Android
页面元素识别
我们在airtestIDE中展开poco辅助窗的列表。然后我们选择Android
,箭头1所指部分。
选中之后,等2秒左右,右侧的设备显示窗会刷新一下。
元素检查
然后看第二个箭头所指的按钮。鼠标放上去之后显示poco inspecter
,poco检查,这个按钮就和chrome浏览器开发者工具中的检查按钮是一样的。
然后我们点击这个按钮一下,去右侧设备屏幕显示框检查一下元素。
可以看到当我们把鼠标悬浮在密码登录
控件上时,中间的Log查看窗
,显示出了这个控件的详细信息。
而对于密码登录这个控件元素来说:name
属性正是我们所需要的。箭头所指部分。
当然了还有text
、resourceId
、pos
等等属性我们也可以用。
登录智学网app
我们现在来编写一个完整的登录操作吧,通过airtestIDE获取app页面元素,然后在pycharm中编写脚本代码。
然后先简单的用unittest
封装一下。
-
setupclass
- 应用程序被启动
- 等待5秒用于app加载时间
-
test001
- 通过poco的
click
方法我们实现了点击操作 - 通过poco的
set_text
方法我们输入账号和密码,在输入前如果存在密码就先清空,这样我们就能看到输入的过程了 - 登录成功后等待8秒用于留时间给你观察
- 通过poco的
-
test_002
- 退出登录成功的账号
- 退出后等待5秒用于留时间给你观察
-
teardownclass
- 最后停止应用
这样一个智学网app
登录就简单的写好了,我们运行一下。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
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
登录和退出登录都没有问题。
后记
通过这篇文章你了解到了,在airtestIDE中获取poco Android类型的页面元素。
并简单的编写了一个脚本。
随风挥手 ——土木狗的IT生涯 | 群: 299524235 |