自動化測試定位方式那麼多,應該選哪個?

簡介

定位策略是用於在自動化測試中定位移動應用界面元素的方法和策略。通過選擇合適的定位策略,測試人員可以定位和操作應用程序的各種控件,如按鈕、文本框、下拉列表等。常見的定位策略包括 ID 定位、XPath 定位、Class Name 定位、AccessibilityID 定位、Name 定位、XPath 模糊定位、Android UI Automator 定位以及 iOS Predicate 定位。通過靈活運用不同的定位策略,可以提高自動化測試的穩定性和可靠性。

App 定位方式

定位策略 描述
Accessibility ID 識別一個唯一的 UI 元素,對於 XCUITest 引擎,它對應的的屬性名是 accessibility-id,對於 Android 系統的頁面元素,對應的屬性名是 content-desc
Class name 對於 iOS 系統,它的 class 屬性對應的屬性值會以XCUIElementType開頭,對於 Android 系統,它對應的是 UIAutomator2 的 class 屬性(e.g.: android.widget.TextView)
ID 原生元素的標識符,Android 系統對應的屬性名爲resource-id,iOS 爲name
Name 元素的名稱
XPath 使用 xpath 表達式查找頁面所對應的 xml 的路徑(不推薦,存在性能問題)
Image 通過匹配 base 64 編碼的圖像文件定位元素
Android UiAutomator (UiAutomator2 only) 使用 UI Automator 提供的 API, 尤其是 UiSelector 類來定位元素,在 Appium 中,會發送 Java 代碼作爲字符串發送到服務器,服務器在應用程序的環境中執行這段代碼,並返回一個或多個元素
Android View Tag (Espresso only) 使用 view tag 定位元素
Android Data Matcher (Espresso only) 使用 Espresso 數據匹配器定位元素
IOS UIAutomation 在 iOS 應用程序自動化時,可以使用蘋果的 instruments 框架查找元素

Web 定位方式

定位策略 描述
class name 通過 class 屬性定位元素
css selector 通過匹配 css selector 定位元素
id 通過 id 屬性匹配元素
name 通過 name 屬性定位元素
link text 通過 text 標籤中間的 text 文本定位元素
partial link text 通過 text 標籤中間的 text 文本的部分內容定位元素
tag name 通過 tag 名稱定位元素
xpath 通過 xpath 表達式匹配元素

選擇定位器通用原則

  • 與研發約定的屬性優先 。
    • web 推薦 class。
    • android 推薦 content-description。
    • ios 推薦 label。
  • 身份屬性 id,name(web 定位)。
  • 組合定位 xpath,css。
  • 其它定位。

元素定位不到

導致 Appium 元素定位不到的原因可能包括定位信息錯誤、元素未加載完成、元素隱藏或不可見、元素定位策略不準確、Appium 和應用程序版本不兼容以及設備連接或設置問題。要解決這些問題,需要確保定位信息正確、等待元素加載完成、使元素可見、選擇合適的定位策略、確保版本兼容性以及正確配置和設置設備。

原因 解決方案
定位不正確 在定位工具中先測試定位表達式是否正確
存在動態 ID 定位方式使用 css 或者 xpath 的相對定位
頁面還沒有加載完成 添加死等驗證,使用顯式等待或隱式等待進行優化
頁面有 iframe 切換到 iframe 後定位
頁面切換 window 切換到對應窗口後定位
要定位元素爲隱藏元素 使用 js 操作該元素

混合定位的應用場景

  • 場景:
    • 屬性動態變化(id,text)。
    • 重複元素屬性(id,text,class)。
  • 解決:
    • 根據相對位置關係進行定位(css、xpath)(父級,子級,兄弟,索引)。
    • 使用 find_elements 遍歷查找。
  • 參考高級定位技巧章節(xpath,css)。

使用等待機制的場景

  • 場景
    • 控件動態出現
    • 控件出現特定特徵
  • 解決
    • 元素定位結合隱式等待與顯式等待

特殊控件定位

Web 彈框定位

  • 場景
    • web 頁面 alert 彈框
  • 解決:
    • web 需要使用 driver.switchTo().alert() 處理

App toast 提示框定位

  • 場景:
    • app Toast 提示框。
  • 解決:
    • 使用 driver.page_source 拿到頁面佈局結構文件,分析 Toast/彈框組件的標籤內容。
    • 然後通過 id/text/class 等屬性,使用 xpath 完成元素定位。
    • 結合隱式等待。

下拉框/日期控件定位

  • 場景:
    • 標籤組合的下拉框無法定位。
    • 標籤組合的日期控件無法定位。
  • 解決:
    • 面對這些元素,可以引入 JS 注入技術來解決問題。

文件上傳定位

  • 場景:
    • input 標籤文件上傳。
  • 解決:
  • input 標籤直接使用 send_keys() 方法。

總結

在選擇定位策略時,需要考慮元素的屬性、上下文以及應用的特定情況。有時候需要結合多個屬性或使用相對定位,以確保定位的準確性和穩定性。此外,使用隱式等待或顯式等待是確保元素加載完成的重要步驟,以避免定位超時的問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章