airtest+pytest实战教程02-APP页面元素获取

前言

前面已经弄好了测试环境配置和基础的airtestIDE使用。入门使用应该不是问题了。

但是在airtestIDE中编写代码是有局限性的,所以我们使用pycharm编写脚本。

工具选择

工欲善其事必先利其器。工具确定

  • IDE
    • pycharm2020.1社区版 注:社区版就够用了
  • python
    • 3.7.7 注::3.8+的版本可能会有一些第三方库不兼容

好了工具选好了,我们开始吧!

安装airtest库

打开pycharm,选择新建项目。

如图: 新项目名称为steward

image-20200617213815579.png

点击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页面元素识别

QQ截图20200620165520.png

我们在airtestIDE中展开poco辅助窗的列表。然后我们选择Android,箭头1所指部分。

选中之后,等2秒左右,右侧的设备显示窗会刷新一下。

元素检查

然后看第二个箭头所指的按钮。鼠标放上去之后显示poco inspecter,poco检查,这个按钮就和chrome浏览器开发者工具中的检查按钮是一样的。

然后我们点击这个按钮一下,去右侧设备屏幕显示框检查一下元素。

QQ截图20200620165941.png

可以看到当我们把鼠标悬浮在密码登录控件上时,中间的Log查看窗,显示出了这个控件的详细信息。

而对于密码登录这个控件元素来说:name属性正是我们所需要的。箭头所指部分。

当然了还有textresourceIdpos等等属性我们也可以用。

登录智学网app

我们现在来编写一个完整的登录操作吧,通过airtestIDE获取app页面元素,然后在pycharm中编写脚本代码。

然后先简单的用unittest封装一下。

  • setupclass

    • 应用程序被启动
    • 等待5秒用于app加载时间
  • test001

    • 通过poco的click方法我们实现了点击操作
    • 通过poco的set_text方法我们输入账号和密码,在输入前如果存在密码就先清空,这样我们就能看到输入的过程了
    • 登录成功后等待8秒用于留时间给你观察
  • 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类型的页面元素。

并简单的编写了一个脚本。

原文地址:https://www.cnblogs.com/wxhou/p/13154987.html