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

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

做者:清菡
博客:oschina、雲+社區、知乎等各大平臺都有。html

目錄

  • 1、App 元素定位方式
  • 2、元素操做
  • 3、測試混合應用
  • 4、以代碼的方式執行 Pytest 命令
  • 5、App 自動化分層設計

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

1、App 元素定位方式

座標idxpathandroid_uiautomatorclassnameaccesiblity_idweb

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

2、元素操做

這個跟 Web 自動化有些通用的操做以外,它有一些額外的操做。例如:滑屏操做、觸屏操做、混合應用、toast 獲取。微信小程序

swipe:swipe 也是經過touchAction來實現的。微信

觸屏操做:touchAction框架

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

用 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%的失敗率。固然不一樣的產品是不同的。

3、測試混合應用

原生控件關於 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 自動化

4、以代碼的方式執行 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 中執行的效果是如出一轍的。

5、App 自動化分層設計

App 自動化和 Web 自動化同樣,都是這樣分層的:

在 PO 模式中想要點擊元素、操做元素也得等待元素可見,也有最基本的 4 種元素操做方法:輸入操做、點擊操做、獲取它的文本內容、獲取它的屬性。

Locator 裏面綁定了元素定位方式和定位類型。Locator 來自 PageLocators 文件夾中。

手機屏幕就那麼大,App 要保證排版寬鬆,手指觸屏,要保證點擊一個功能不會碰到別的。

實際作自動化測試,Web 網頁是很複雜的,App 自動化測試的週期要比 Web 自動化時間要短不少。

寫框架先寫頁面,首先研究下頁面構造,看下頁面功能的關聯性。


公衆號 「清菡軟件測試」 首發,更多原創文章:清菡軟件測試 103+原創文章,歡迎關注、交流,禁止第三方擅自轉載。

相關文章
相關標籤/搜索