App 自動化《元素定位方式、元素操作、混合應用、分層設計、程式碼方式執行 Pytest 命令》

清菡發表於2020-12-07

堅持原創輸出,點選藍字關注我吧

作者:清菡
部落格:oschina、雲+社群、知乎等各大平臺都有。

目錄

  • 一、App 元素定位方式
  • 二、元素操作
  • 三、測試混合應用
  • 四、以程式碼的方式執行 Pytest 命令
  • 五、App 自動化分層設計

App 自動化目前用得是 Appium,有 Python 版本的Uiautomator2。這個是直接通過Uiautomator2去做的,一個是利用中間的 Appium 去做。Appium 跨平臺跨語言。

一、App 元素定位方式

座標idxpathandroid_uiautomatorclassnameaccesiblity_id

accesiblity_id是安卓的元素定位方式之一。

二、元素操作

這個跟 Web 自動化有些通用的操作之外,它有一些額外的操作。例如:滑屏操作、觸屏操作、混合應用、toast 獲取。

swipe:swipe 也是通過touchAction來實現的。

觸屏操作:touchAction

toast:toast 獲取對安卓版本、Appium 版本都是有要求。

用 uiautomatorview 是捕捉不到的,通過 xpath 來獲取 toast 資訊。

xpath表示式 文字匹配
loc ='//*[contains(@text,"{}")]'.format("手機號碼或密碼")

contains通過 xpath 表示式裡面的contains函式@texttext 在安卓當中,它是個屬性。

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+原創文章,歡迎關注、交流,禁止第三方擅自轉載。

相關文章