03 APP 自動化-定位元素工具元素定位

文章目錄

      • 一、Appium常用元素定位工具
        • 1、U IAutomator View Android SDK 自帶的定位工具
        • 2、Appium Desktop Inspector
        • 3、Weditor
          • 安裝:
          • Weditor工具的使用
        • 4、uiautodev
        • 通過定位工具獲取app頁面元素有哪些屬性
      • 二、app 元素定位方法

一、Appium常用元素定位工具

1、U IAutomator View Android SDK 自帶的定位工具
  • 工具所在的位置 Android SDK安裝路徑/tools/bin
  • 雙擊 uiautomatorviewer.bat 文件打開即可:
2、Appium Desktop Inspector

Appium Desktop Inspector 是 appium server工具自帶的定位工具

  • 下載:
    前往 Appium Inspector 的官方 GitHub 發布頁面 ,根據你的操作系統(Windows、macOS 或 Linux)下載對應的安裝包。
  • 安裝:
    Windows:下載后得到 .exe 文件,雙擊運行安裝程序,按照提示完成安裝。
    macOS:下載 .dmg 文件,打開后將 Appium Inspector 圖標拖到 “應用程序” 文件夾。
    Linux:如果下載的是.deb 或.rpm 包,可使用相應的包管理器(如dpkg 或rpm )進行安裝。
  • 啟動與配置
    • 啟動 Appium 服務:在命令行輸入appium ,啟動 Appium 服務器,它會開始監聽默認端口 4723(可通過參數修改)。
    • 啟動 Appium Inspector:打開安裝好的 Appium Inspector 應用程序。在啟動會話前,需要配置相關參數,包括:
      • Remote Host:通常為127.0.0.1 (如果 Appium 服務器在本地運行)。
      • Remote Port:默認是 4723,與 Appium 服務監聽端口一致。
      • Desired Capabilities:根據要測試的應用和設備情況,填寫相關能力參數,如platformName (指定平臺為Android 或iOS )、platformVersion (設備系統版本)、deviceName (設備名稱或模擬器名稱)、appPackage (安卓應用包名)、appActivity (安卓應用啟動 Activity)等 。
        在這里插入圖片描述

完成以上步驟后,點擊 “啟動會話”,Appium Inspector 就能連接到 Appium 服務器,進行 App 的 UI 元素檢查和測試了。

3、Weditor

Uiautomator2 Python第三方庫 appUI自動化測試框架

安裝:
  • 命令01: dos命令窗口 ----- pip install Uiautomator2
  • 命令02:dos命令窗口 ----- python -m uiautomator2 init
  • 命令03: dos命令窗口 ----- pip install weditor
  • 確認工具是否安裝成功:weditor --help
Weditor工具的使用
  • 1、啟動weditor工具
    dos命令窗口-----命令:weditor
  • 2、選擇操作系統,填寫設置設備名稱,點擊連接
  • 3、開始定位元素,獲取元素信息
  • 4、退出工具 ctrl c
4、uiautodev

uiautodev 官方文檔

  • 安裝環境:Python 3.8+
  • 安裝命令:pip3 install -U uiautodev
通過定位工具獲取app頁面元素有哪些屬性
  • 1、 resourceid
  • 2、class 屬性 /classname 元素標簽名
  • 3、text 文本內容
  • 4、description 屬性(content-desc)
  • 5、元素定位方式 ( weditor 提供 xpath 定位語句)
  • 6、appPackage
  • 7、appActivity (weditor)

二、app 元素定位方法

1、元素定位方式一: 基于 text 屬性可以用 AppiumBy.ANDROID_UIAUTOMATOR(Android 專用); AppiumBy.IOS_PREDICATE(iOS 專用)

  • 這種定位方式利用系統自帶框架(Uiautomator1/Uiautomator2)實現元素定位,基于java 代碼編寫
  • 通過這些框架實現元素定位==實質就是調用這些框架里面的方法(UiSelector 類實現元素定位)
    UiSelector - Android 中文版 - API 參考文檔 (apiref.com)

2、元素定位方式二:通過元素的類名進行定位,AppiumBy.CLASS_NAME

3、元素定位方式三: resourceId 屬性定位元素,AppiumBy.ID
4、元素定位方式四:多個屬性組合定位 new UiSelector().方法1().方法2().方法3();UiSelector類里面的方法,如果參數是字符串類型,必須是雙引號
5、元素定位方式五:基于 content‐desc/description 屬性定位:AppiumBy.ACCESSIBILITY_ID
6、元素定位方式六:選擇 xpath 定位 等同于 web 自動化測試 xpath 定位的方法一致

# -*- coding=utf-8 -*-
from time import sleep
from appium import webdriver
from appium.options.android import UiAutomator2Options
from appium.webdriver.common.appiumby import AppiumBy
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as Ec# 設置操作終端的配置參數
desired_caps = dict(platformName='Android', # 指定操作系統platformVersion='12',# 指定操作系統版本automationName='Uiautomator2',# 默認框架deviceName='127.0.0.1:62001',# 指定設備名稱appPackage='com.tal.kaoyan',# 被操作的應用程序包名appActivity='com.tal.kaoyan.ui.activity.SplashActivity',# 啟動頁面noReset='false',# true--不重置  false--重置app='F:\Pycharm\AppAuto\kaoyan_v4.5.3.apk'  # apk文件所在路徑
)
# 發送命令給 appium server
driver = webdriver.Remote('http://127.0.0.1:4723', options=UiAutomator2Options().load_capabilities(desired_caps))
#-------------首次啟動后彈窗處理----------------
try:# 等待用戶協議彈窗元素出現(最多5秒)user_protocal = WebDriverWait(driver, 5).until(Ec.presence_of_element_located((AppiumBy.ID, 'com.tal.kaoyan:id/tip_commit')))user_protocal.click()  # 關閉彈窗print("用戶協議彈窗已關閉")
except Exception:print("未發現用戶協議彈窗,繼續執行")pass  # 未出現彈窗,繼續執行后續代碼
try:# 等待權限彈窗元素出現(最多5秒)confirm_permission = WebDriverWait(driver, 5).until(Ec.presence_of_element_located((AppiumBy.ID, 'com.tal.kaoyan:id/tv_ok')))confirm_permission.click()  # 關閉彈窗print("權限彈窗已關閉")
except Exception:print("未發現用戶協議彈窗,繼續執行")pass  # 未出現彈窗,繼續執行后續代碼
#-------------登錄----------------
# 1、元素定位方式一: 基于 text 屬性可以用 AppiumBy.ANDROID_UIAUTOMATOR(Android 專用);AppiumBy.IOS_PREDICATE(iOS 專用)
phone_input = WebDriverWait(driver, 5).until(Ec.presence_of_element_located((AppiumBy.ANDROID_UIAUTOMATOR, 'new UiSelector().resourceId("com.tal.kaoyan:id/kylogin_phone_input_phonelayout")')))
# 點擊手機號輸入框,保證輸入框是可輸入狀態
phone_input.click()
# 通過模擬人為的點擊響應的數字按鈕,對應到手機鍵盤的字母/數字鍵從而完成文本的輸入,以下是輸入手機號 18710846693
driver.press_keycode(8)
driver.press_keycode(15)
driver.press_keycode(14)
driver.press_keycode(8)
driver.press_keycode(7)
driver.press_keycode(15)
driver.press_keycode(11)
driver.press_keycode(13)
driver.press_keycode(13)
driver.press_keycode(16)
driver.press_keycode(10)# 2、元素定位方式二:通過元素的類名進行定位,AppiumBy.CLASS_NAME
checkbox_btn = driver.find_element(AppiumBy.CLASS_NAME, 'android.widget.CheckBox')
checkbox_btn.click()# 3、元素定位方式三: resourceId 屬性定位元素,AppiumBy.ID
verify_code_btn = driver.find_element(AppiumBy.ID, "com.tal.kaoyan:id/kylogin_phone_input_codeget")
verify_code_btn.click()
# AppiumBy.ANDROID_UIAUTOMATOR支持多個屬性組合定位:className resourceId
# 等待用戶輸入
code_value = input("請輸入手機驗證碼")
# 4、元素定位方式四:多個屬性組合定位 new UiSelector().方法1().方法2().方法3();UiSelector類里面的方法,如果參數是字符串類型,必須是雙引號
code_input = driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR,'new UiSelector().text("請輸入驗證碼").resourceId("com.tal.kaoyan:id/kylogin_phone_input_code") ')
code_input.send_keys(code_value)
# 5、元素定位方式五:基于 content‐desc/description 屬性定位:AppiumBy.ACCESSIBILITY_ID
# 6、元素定位方式六:選擇 xpath 定位 等同于 web 自動化測試xpath定位的方法一致
login_btn = driver.find_element(AppiumBy.XPATH, '//*[@resource-id="com.tal.kaoyan:id/loginCodeLoginBtn"]')
login_btn.click()
sleep(5)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/83429.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/83429.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/83429.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java消息隊列與安全實戰:謝飛機的燒餅攤故事

Java消息隊列與安全實戰:謝飛機的燒餅攤故事 第一輪:消息隊列與緩存 面試官:謝飛機,Kafka和RabbitMQ在電商場景如何選型? 謝飛機:(摸出燒餅)Kafka適合訂單日志處理,像…

Unity中的MonoSingleton<T>與Singleton<T>

1.MonoSingleton 代碼部分 using UnityEngine;/// <summary> /// MonoBehaviour單例基類 /// 需要掛載到GameObject上使用 /// </summary> public class MonoSingleton<T> : MonoBehaviour where T : MonoSingleton<T> {private static T _instance;…

day 40 python打卡

仔細學習下測試和訓練代碼的邏輯&#xff0c;這是基礎&#xff0c;這個代碼框架后續會一直沿用&#xff0c;后續的重點慢慢就是轉向模型定義階段了。 # 先繼續之前的代碼 import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataL…

進階日記(一)大模型的本地部署與運行

目錄 一、背景知識 為什么要在本地部署大模型&#xff1f; 在本地部署大模型需要做哪些準備工作&#xff1f; &#xff08;1&#xff09;硬件配置 &#xff08;2&#xff09;軟件環境 有哪些部署工具可供選擇&#xff1f; 二、Ollma安裝 Ollama安裝完之后&#xff0c;還…

Spring Boot Starter 自動裝配原理全解析:從概念到實踐

Spring Boot Starter 自動裝配原理全解析&#xff1a;從概念到實踐 在Spring Boot開發中&#xff0c;Starter和自動裝配是兩個核心概念&#xff0c;它們共同構成了“開箱即用”的開發體驗。通過引入一個Starter依賴&#xff0c;開發者可以快速集成第三方組件&#xff08;如Red…

win11回收站中出現:查看回收站中是否有以下項: WPS云盤回收站

好久沒更新了&#xff0c;首先祝所有大朋友、小朋友六一兒童節快樂&#xff0c;真的希望我們永遠都不會長大呀&#xff0c;長大真的好累呀(?_?) 免責聲明 筆者先來個免責聲明吧&#xff0c;被網上的陰暗面嚇到了 若讀者參照筆者的這篇文章所執行的操作中途或后續出現的任何…

網絡安全大模型理解

一、網絡安全大模型的概述 網絡安全大模型是一種用于識別和應對各種網絡安全威脅的模型。它通過分析網絡數據包、網絡行為等信息&#xff0c;識別潛在的網絡安全事件&#xff0c;并采取相應的措施進行防御。網絡安全大模型主要包括以下幾個部分&#xff1a; 1. 數據預處理&am…

C++語法架構解說

C 是一種功能強大且靈活的編程語言&#xff0c;廣泛應用于系統編程、游戲開發、嵌入式系統、金融軟件等領域。 其語法架構復雜且豐富&#xff0c;涵蓋了從基礎語法到高級特性的各個方面。 對 C 語法架構 的詳細解析&#xff0c;涵蓋其核心語法結構、面向對象編程&#xff08;…

審計- 1- 審計概述

1.財務報表審計的概念 財務報表審計是指注冊會計師對財務報表是否不存在重大錯報提供合理保證&#xff0c;以積極方式提出意見&#xff0c;增強除管理層之外的預期使用者對財務報表信賴的程度。 1.1 審計業務三方關系人 注冊會計師對財務報表發表審計意見是注冊會計師的責任管…

RapidOCR集成PP-OCRv5_det mobile模型記錄

該文章主要摘取記錄RapidOCR集成PP-OCRv5_mobile_det記錄&#xff0c;涉及模型轉換&#xff0c;模型精度測試等步驟。原文請前往官方博客&#xff1a; https://rapidai.github.io/RapidOCRDocs/main/blog/2025/05/26/rapidocr%E9%9B%86%E6%88%90pp-ocrv5_det%E6%A8%A1%E5%9E%8B…

Spine工具入門教程2之導入

1、導入定義 從原畫轉化為Spine的環節。 &#xff08;1&#xff09;選擇路徑&#xff0c;拖動圖片導入方式 缺點&#xff1a;定位不準 【使用批量導出的方式】 在PS工具中&#xff0c;選擇所有圖層后右鍵選擇導出。 在Spine工具中&#xff0c;選擇路徑導入圖片。 然后再拖…

【03】完整開發騰訊云播放器SDK的UniApp官方UTS插件——優雅草上架插件市場-卓伊凡

【03】完整開發騰訊云播放器SDK的UniApp官方UTS插件——優雅草上架插件市場-卓伊凡 一、項目背景與轉型原因 1.1 原定計劃的變更 本系列教程最初規劃是開發即構美顏SDK的UTS插件&#xff0c;但由于甲方公司內部戰略調整&#xff0c;原項目被迫中止。考慮到&#xff1a; 技術…

戴爾AI服務器訂單激增至121億美元,但傳統業務承壓

戴爾科技121億美元的AI服務器訂單&#xff0c;不僅超過了公司整個2025財年的AI服務器出貨量&#xff0c;更讓其AI訂單積壓達到144億美元的歷史高位。 戴爾科技最新財報顯示&#xff0c;AI服務器需求的爆炸式增長正在重塑這家老牌PC制造商的業務格局&#xff0c;但同時也暴露出…

多線程和并發之線程

線程 前面講到進程&#xff1a;為了并發執行任務&#xff08;程序&#xff09;&#xff0c;現代操作系統才引進進程的概念 分析&#xff1a; 創建開銷問題&#xff1a;創建一個進程開銷&#xff1a;大 子進程需要拷貝父進程的整個地址空間 通信開銷問題&#xff1a;進程間的通…

AAAI 2025論文分享│STD-PLM:基于預訓練語言模型的時空數據預測與補全方法

本文詳細介紹了一篇發表于人工智能頂級會議AAAI 2025的論文《STD-PLM: Understanding Both Spatial and Temporal Properties of Spatial-Temporal Data with PLM》。該論文提出了一種基于預訓練語言模型&#xff08;Pre-trained Language Model?&#xff0c;PLM&#xff09;的…

前端八股 tcp 和 udp

都是傳輸層協議 udp 數據報協議 不可靠面向數據包對于應用層傳遞的報文加上UDP首部就傳給網絡層 tcp 傳輸控制協議 可靠 會將報文分段進行傳輸 區別&#xff1a; 1.tcp 可靠 udp 不可靠 2.tcp 面向連接 三握四揮 udp 無連接 3.tcp面向字節流 udp面向報文 4.效率低 效率高…

MES管理系統:Java+Vue,含源碼與文檔,實現生產過程實時監控、調度與優化,提升制造企業效能

前言&#xff1a; 在當今競爭激烈的制造業環境中&#xff0c;企業面臨著提高生產效率、降低成本、提升產品質量以及快速響應市場變化等多重挑戰。MES管理系統作為連接企業上層計劃管理系統與底層工業控制之間的橋梁&#xff0c;扮演著至關重要的角色。它能夠實時收集、分析和處…

MSTNet:用于糖尿病視網膜病變分類的多尺度空間感知 Transformer 與多實例學習方法|文獻速遞-深度學習醫療AI最新文獻

Title 題目 MSTNet: Multi-scale spatial-aware transformer with multi-instance learning for diabetic retinopathy classification MSTNet&#xff1a;用于糖尿病視網膜病變分類的多尺度空間感知 Transformer 與多實例學習方法 01 文獻速遞介紹 糖尿病視網膜病變&#…

每日八股文6.2

每日八股-6.2 Go1.GMP調度原理&#xff08;這部分多去看看golang三關加深理解&#xff09;2.GC&#xff08;同樣多去看看golang三關加深理解&#xff09;3.閉包4.go語言函數是一等公民是什么意思5.sync.Mutex和sync.RWMutex6.sync.WaitGroup7.sync.Cond8.sync.Pool9.panic和rec…

【Unity】相機 Cameras

1 前言 主要介紹官方文檔中相機模塊的內容。 關于“9動態分辨率”&#xff0c;這部分很多API文檔只是提了一下&#xff0c;具體細節還需要自己深入API才行。 2 攝像機介紹 Unity 場景在三維空間中表示游戲對象。由于觀察者的屏幕是二維屏幕&#xff0c;Unity 需要捕捉視圖并將…