堅持原創輸出,點選藍字關注我吧
作者:清菡
部落格:oschina、雲+社群、知乎等各大平臺都有。
目錄
一、App 元素定位方式 二、元素操作 三、測試混合應用 四、以程式碼的方式執行 Pytest 命令 五、App 自動化分層設計
App 自動化目前用得是 Appium,有 Python 版本的Uiautomator2
。這個是直接通過Uiautomator2
去做的,一個是利用中間的 Appium 去做。Appium 跨平臺跨語言。
一、App 元素定位方式
座標
、id
、xpath
、android_uiautomator
、classname
、accesiblity_id
。
accesiblity_id
是安卓的元素定位方式之一。
二、元素操作
這個跟 Web 自動化有些通用的操作之外,它有一些額外的操作。例如:滑屏操作、觸屏操作、混合應用、toast 獲取。
swipe:swipe 也是通過touchAction
來實現的。
觸屏操作:touchAction
toast:toast 獲取對安卓版本、Appium 版本都是有要求。
用 uiautomatorview 是捕捉不到的,通過 xpath 來獲取 toast 資訊。
xpath表示式 文字匹配
loc ='//*[contains(@text,"{}")]'.format("手機號碼或密碼")
contains
通過 xpath 表示式裡面的contains
函式@text
,text
在安卓當中,它是個屬性。
xpath 定位表示式,拿到它之後,經常用的是presence
。
# 等待的時候,要用元素存在的條件。不能用元素可見的條件。
try:
WebDriverWait(driver,10,0.01).until(EC.presence_of_elements_located((MobileBy.XPATH,loc)))
# 上限10秒就夠了,確認toast在頁面上存在的時候大概是多久,它都沒有0.5秒,你去間隔0.5,可能消失了,你還只留在這。
print(driver.find_element_by_xpath(loc).text)
except:
print("沒有找到匹配的toast!!!!")
做 Web 自動化或者其它的時候,都是等待元素可見。在 toast 資訊獲取的時候,是等待元素存在,然後獲取它的文字內容。
這個地方有個概率的問題:用它去獲取 toast,時間越短,概率越高。可能面臨 1%-10%的失敗率。當然不同的產品是不一樣的。
三、測試混合應用
原生控制元件關於 html 頁面的元素標識是什麼?
Web 自動化中一個頁面中嵌入了另外一個頁面,用的是iframe
。webview 代表網頁檢視。
如果從原生控制元件中切換到網頁檢視當中,切換的名字叫做context
,切換的前提是獲取到它。
獲取到 webview 對應的context
,然後在這裡面去操作。
從原生控制元件切換到 html 頁面,通過context
切換之後,應該在 html 頁面中做元素定位。
Uiautomatorview 沒辦法找到 html 頁面,所以用 Uc-devtools。
找到元素之後,後續就是 Web 自動化操作了,要看到 Webview 頁面的時候,必須要開啟 debug 模式,否則你是看不到的。
網上有些操作可以強制的開啟它,不過操作流程比較複雜,會破壞一些東西。
混合應用是 App 和 Web 自動化的結合。微信小程式其實就是 Web 自動化,只不過嵌在微信裡面。
微信本身是個 App,在微信裡操作,切換到小程式裡面,在小程式裡做想做的 Web 自動化測試。
原生控制元件+html 頁面:混合應用-webview\切換 context\uc-devtools\web 自動化
四、以程式碼的方式執行 Pytest 命令
import pytest
if __name__ == '__main__':
pytest.main()
這是以 Python 程式碼的方式來執行 Pytest 命令,來看看main
函式的原始碼:
之前在 cmd 中輸入pytest -m
過濾下標籤,比如 smoke 標籤pytest -m smoke
,或者指定 html 報告pytest -m smoke -
都是在這裡寫的。
pytest -m smoke
這樣的命令,在程式碼裡寫就好了。
它這裡,第一個引數就是寫的命令,但是它是個列表,用列表的方式存起來就好了。
import pytest
if __name__ == '__main__':
pytest.main(["-m","smoke"])
在命令列中用空格隔開的,在這裡一樣一樣放在列表當中來。程式碼中的執行效果跟在 cmd 中執行的效果是一模一樣的。
五、App 自動化分層設計
App 自動化和 Web 自動化一樣,都是這樣分層的:
在 PO 模式中想要點選元素、操作元素也得等待元素可見,也有最基本的 4 種元素操作方法:輸入操作、點選操作、獲取它的文字內容、獲取它的屬性。
Locator 裡面繫結了元素定位方式和定位型別。Locator 來自 PageLocators 資料夾中。
手機螢幕就那麼大,App 要保證排版寬鬆,手指觸屏,要保證點選一個功能不會碰到別的。
實際做自動化測試,Web 網頁是很複雜的,App 自動化測試的週期要比 Web 自動化時間要短很多。
寫框架先寫頁面,首先研究下頁面構造,看下頁面功能的關聯性。
公眾號 「清菡軟體測試」 首發,更多原創文章:清菡軟體測試 103+原創文章,歡迎關注、交流,禁止第三方擅自轉載。