前言
前面已經弄好了測試環境配置和基礎的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類型的頁面元素。
並簡單的編寫了一個腳本。