zoukankan      html  css  js  c++  java
  • airtest+pytest实战教程05—登录智学网app

    通过之前的文章,我们环境也配置好了,设备中的应用也安装了,然后包名也获取了,这篇文章我们一起来编写一个登录的操作脚本吧。

    2|0获取应用元素

    如同web自动化测试一样,app的页面元素获取也是一个比较重要的组成部分。我们使用什么获取元素呢,当然是使用airtestIDE了。我们不用它编写脚本可以,但是我们不能没有它来获取APP页面的元素信息。

    2|1poco的使用

    • 首先我们需要开启poco Android页面元素识别

    QQ截图20200620165520.png

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

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

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

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

    QQ截图20200620165941.png

    可以看到当我们把鼠标悬浮在密码登录控件上时,中间的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

    登录和退出登录都没有问题,我们的登录操作的脚本就编写完毕了。

    是不是觉得很简单。因为我也不擅长写博客,有什么建议可以在评论区对我说。

    下期见。

  • 相关阅读:
    GCC 里面的一些命令
    Servlet中的GET和POST之间的区别
    短暂的计算机职业生涯
    如何写详细设计文档
    exe4j打包jar文件成exe .
    android反编译问题
    OnScrollListener拖住主线程
    涵盖Android所有知识点的小实例
    屏蔽log
    sdk调低版本时,clean后失去R文件
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13309146.html
Copyright © 2011-2022 走看看