基于appium的常用元素定位方法

一、元素定位工具
  app應用的元素使用的是控件定位,不同于web網頁,web網頁定位元素通常使用的是F12工具,那么在app當中我們則要借助其它的工具來輔助定位。

1.uiautomatorviewer.bat
  uiautomatorviewer.bat工具在安裝完ADT工具之后,位于ADT安裝路徑的android-sdk-windows\tools\bin目錄下

 雙擊啟動即可,啟動之后,在初始界面上,點擊如圖位置按鈕可以進行截屏

? 截屏后即可查看各個元素,截屏后的效果:

?2.appium檢查器

  在appium啟動后的日志窗口界面,點擊“啟動檢查器會話”,會跳轉到檢查器啟動參數配置界面,參數配置直接將我們代碼里面的啟動參數搬過來就可以了。

?

 點擊啟動后,會根據我們配置的應用信息,自動跳轉到應用的主頁面,我們就可以開始進行元素定位了:

?二、常用元素定位方法

  appium從selenium中繼承了所有的元素定位方法,并且增加了自己的一些方法,我們先看看appium的源碼:

  但是從繼承selenium中的定位方法中,一般只會用到id、class_name、xpath這三種方法,總結起來,appium中常用的定位方法一般有以下五種:

通過id定位:resource-id
通過class_name定位:class
通過accessibility_id定位:content-desc
通過android_uiautomator定位:SDK自帶的java開發的uiautomator自動化框架
通過xpath定位
  UIAutomator介紹:  ?  

  UIAutomator是安卓移動端的UI自動化框架,要求:Android4.3以上

提供了一系列API:執行UI測試在系統或者第三方app上面
允許在被測設備上執行操作,比如打開系統設置菜單
適合編寫黑盒自動化測試
  UIAutomator框架的主要特點:

元素定位:UI Automator Viewer。掃描、分析待測應用的UI組件的圖像工具
元素操作:Accessing device state。在目標設備和app上各種操作
元素識別:UI Automator APIs。在多個應用程序中捕獲和操作UI組件
1.id定位
driver.find_element_by_id() 或者 MobileBy.ID

?注意這里是使用resource-id,而不是id

loc = (MobileBy.ID, 'com.taobao.taobao:id/iv_image')
2.class_name定位
driver.find_element_by_class_name() 或者 MobileBy.CLASS_NAME

?直接使用class即可

loc = (MobileBy.CLASS_NAME, 'android.widget.ImageView')
3.accessibility_id定位
driver.find_element_by_accessibility_id() 或者 MobileBy.ACCESSIBILITY_ID

?這里使用content-desc即可

loc = (MobileBy.ACCESSIBILITY_ID, '管理')
4.android_uiautomator定位
driver.find_element_by_android_uiautomator() 或者 MobileBy.ANDROID_UIAUTOMATOR

該方法的參數為UiSelector類定位元素的表達式:

new UiSelector().函數名稱('定位表達式')

實例化一個UiSelector對象,然后通過實例接口調用,具體用到的一些方法參考官網的說明,網址:

這里調用UiSelector對象的text()方法即可,更多的方法請參考上述地址

# 注意字符串必須要用雙引號
loc = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().text("去逛逛")')
5.xpath定位
driver.find_element_by_xpath() 或者 MobileBy.XPATH

?注意這里的標簽名一定是使用class來作為xpath的標簽名,在這里不同于selenium,并且遇到text文本定位的時候,使用的是text而不是text()

loc = (MobileBy.XPATH, '//android.widget.TextView[text="首頁"]')
三、組合定位
使用的是UIAumtomator下的方法,因為UiSelector類下的方法都反回了對象本身,因此可以連續調用各種方法,這種使用方法即組合定位

?我們可以連續調用三個方法進行組合

loc = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().className("android.widget.TextView").text("家裝").index(2)')
四、父子定位
調用UiSelector類的childSelector()方法,在該方法里面傳入子代的元素定位表達式

比如剛剛“家裝”的父節點屬性如下

?那么我們的定位表達式可以通過父子定位來實現

loc = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().className("android.widget.LinearLayout").childSelector(text("家裝"))')
五、兄弟定位
同理,我們調用fromParent()方法,表示定位同級的兄弟元素

?已知了“首頁”按鈕為本元素,text屬性為“首頁”,則通過該元素來定位“百貨元素”

loc = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().text("首頁").fromParent(text("百貨"))')
總結:

感謝每一個認真閱讀我文章的人!!!

作為一位過來人也是希望大家少走一些彎路,如果你不想再體驗一次學習時找不到資料,沒人解答問題,堅持幾天便放棄的感受的話,在這里我給大家分享一些自動化測試的學習資源,希望能給你前進的路上帶來幫助

?

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

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

相關文章

【Docker】進階之路:(十一)Docker存儲

【Docker】進階之路:(十一)Docker存儲 Docker存儲簡介storage driverdata volumevolumebind mounttmpfs mount Docker提供了4種存儲方式:默認存儲、volume(數據卷)、bind mounts(綁定掛載)、tmpfsmount(僅在Linux環境中提供)。其中…

Jemeter,提取響應體中的數據:正則表達式、Json提取器

一、正則表達式 1、線程組--創建線程組; 2、線程組--添加--取樣器--HTTP請求; 3、Http請求--添加--后置處理器--正則表達式提取器; 4、線程組--添加--監聽器--查看結果樹; 5、線程組--添加--取樣器--調試取樣器。 響應體數據…

docker mysql8 設置不區分大小寫

docker安裝Mysql8.0的坑之lower_case_table_names_docker mysql lower_case_table_names-CSDN博客https://blog.csdn.net/p793049488/article/details/108365929 docker run ‐di ‐‐nametensquare_mysql ‐p 33306:3306 ‐e MYSQL_ROOT_PASSWORD123456 mysql

運籌學經典問題(一):指派問題

問題描述 有 N N N個任務,需要 N N N個人去完成,每個人完成不同工作的效率不同(或者資源、收益等等),需要怎么分配使得整體的效率最高(成本最低等等)呢?這就是經典的指派問題啦&…

金蝶EAS如何增加報表

金蝶EAS如何增加銷售毛利報表? 文章目錄 菜單路徑:導入授權發布管理 菜單路徑: 商業分析———擴展報表中心——報表工具 ——報表工具 汽車 4S——整車管理——整車銷售——擴展報表 導入 選擇報表文件進行導入 授權 發布管理

(純原創)基于JavaWeb的寵物領養商城(詳細源碼以及開發設計報告)

摘要 本寵物領養系統以MVC分層為原則,數據持久化使用Mybatis,數據庫使用MySQL,這些技術目前相對比較成熟,方便系統的維護與擴展 商城系統包括了寵物領養、用戶注冊、用戶登錄、商品查詢、商品添加到購物車、刪除商品等幾大功能…

Linux基礎項目開發2:物聯網監控——視頻監控方案介紹(一)

前言: 這次我們來做一個關于視頻監控的基礎小項目,需要我們用到網絡的相關知識,還會學到好多優秀的網絡協議,下面讓我們開始對物聯網視頻監控進行一個大體框架的介紹吧 目錄 項目內容: 1.視頻監控方案介紹 2.視頻監控…

手寫VUE后臺管理系統10 - 封裝Axios實現異常統一處理

目錄 前后端交互約定安裝創建Axios實例攔截器封裝請求方法業務異常處理 axios 是一個易用、簡潔且高效的http庫 axios 中文文檔:http://www.axios-js.com/zh-cn/docs/ 前后端交互約定 在本項目中,前后端交互統一使用 application/json;charsetUTF-8 的請…

云計算 云原生

一、引言 云計算需要終端把信息上傳到服務器,服務器處理后再返回給終端。在之前人手一臺手機的情況下,云計算還是能handle得過來的。但是隨著物聯網的發展,什么東西都要聯網,那數據可就多了去了,服務器處理不過來&…

汽車標定技術(十二)--A2L文件生成的方法

目錄 1.工具生成 1.1 CANape/ASAP2 Studio 1.2 ASAP2ToolKit 1.3 Matlab/Simulink 2.手寫A2L要點 3.小結 A2L文件的制作一直以來是一個很少有人關注的方向,不管是標定工程師還是Slave協議棧的開

MachMap:End-to-End Vectorized Solution for Compact HD-Map Construction

參考代碼:None 動機與出發點 地平線的MapTR展現出了構建高精地圖的能力,但是它的機制確實是有點復雜了。為了兼容不同車道線的朝向,環形車道線的起終點等情況,針對性設計了permute-equal的匹配邏輯,這樣的邏輯真的是太…

軟件測試之壓力測試詳解

一、什么是壓力測試 軟件測試中:壓力測試(Stress Test),也稱為強度測試、負載測試。壓力測試是模擬實際應用的軟硬件環境及用戶使用過程的系統負荷,長時間或超大負荷地運行測試軟件,來測試被測系統的性能、…

leetcode206. 反轉鏈表

題目描述 給你單鏈表的頭節點 head ,請你反轉鏈表,并返回反轉后的鏈表。 示例 1: 輸入:head [1,2,3,4,5] 輸出:[5,4,3,2,1]示例 2: 輸入:head [1,2] 輸出:[2,1]示例 3&#xf…

appium安卓app自動化,遇到搜索框無搜索按鈕元素時無法搜索的解決方案

如XX頭條,搜索框后面有“搜索”按鈕,這樣實現搜索操作較為方便。 但有些app沒有設置該搜索按鈕,初學者就要花點時間去學習怎么實現該功能了,如下圖。 這時候如果定位搜索框,再點擊操作,再輸入文本后&#x…

SpringBootWeb請求響應之前言及狀態碼的詳細解析

SpringBootWeb請求響應 前言 在上一次的課程中,我們開發了springbootweb的入門程序。 基于SpringBoot的方式開發一個web應用,瀏覽器發起請求 /hello 后 ,給瀏覽器返回字符串 “Hello World ~”。 其實呢,是我們在瀏覽器發起請求…

【算法與數據結構】332、LeetCode重新安排行程

文章目錄 一、題目二、解法三、完整代碼 所有的LeetCode題解索引,可以看這篇文章——【算法和數據結構】LeetCode題解。 一、題目 二、解法 思路分析:本題比較屬于困難題目,難點在于完成機票、出發機場和到達機場之間的映射關系,再…

使用yum/dnf管理軟件包

本章主要介紹使用 yum 對軟件包進行管理。 yum 的介紹搭建yum源創建私有倉庫yum客戶端的配置yum的基本使用使用第三方yum源 使用rpm安裝包時經常會遇到一個問題就是包依賴,如下所示。 [rootrhel03 ~]# rpm -ivh /mnt/AppStream/Packages/httpd-2.4.37-41.modulee…

【三維重建】對極幾何

極幾何描述了同一場景或者物體的兩個視點圖像間的幾何關系 可以發現P在左右相機的投影點一定在各自的極線上,如果求出極線就能縮小求解對應點的范圍。 本質矩陣對規范化攝像機拍攝的兩個視點圖像間的極幾何關系進行代數描述 規范化相機指的是相機的內參…

人工智能_機器學習063_SVR支持向量機_回歸擬合天貓雙十一銷量方程---人工智能工作筆記0103

之前我們用線性回歸做過天貓雙十一銷量預測的數據,現在我們再來用SVR支持向量機來做一下 首先上面是給出了銷量,對應2009年到2019年的,銷售額 可以看到: X=np.arange(2009,2020)-2008 統一減去2008的話看起來數據比較簡單了 y=np.array([0.5,9.36,52,191,350,571,912,1207,1…

華為OD機試 - 結隊編程(Java JS Python C)

題目描述 某部門計劃通過結隊編程來進行項目開發, 已知該部門有 N 名員工,每個員工有獨一無二的職級,每三個員工形成一個小組進行結隊編程,結隊分組規則如下: 從部門中選出序號分別為 i、j、k 的3名員工,他們的職級分貝為 level[i],level[j],level[k], 結隊小組滿足…