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類型的頁面元素。

並簡單的編寫了一個腳本。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM