1. 程式人生 > >Appium+Python3+iOS定位元素

Appium+Python3+iOS定位元素

前言:

最近在做IOS自動化測試,IOS的Appium環境都配置OK,執行起來真的慢,慢到懷疑人生,那麼今天就來總結一下IOS定位方式和各個定位方式的速度排序。

據我觀察,按查詢元素的順序速度,從快到慢的順序如下:

ios_predicate >> accessibility_id >> class_name >>xpath

注⚠️:(論壇比較多的說法是class_name>>accessibility_id,在這裡我們姑且認為它們的速度是一樣的。)

1、元素屬性介紹

image.png

type:元素型別,與className作用一致,如:XCUIElementTypeButton
value

: 一般不用
name:元素的文字內容,可用作 AccessibilityId定位方式,如:ClearEmail
label:絕大多數情況下,與 name 作用一致
enabled:元素是否可點選,一般值為true或者false
visible;元素是否可見,一般值為true或者false

2、ios_predicate

在 iOS 的 UI 自動化中,使用原生支援的Predicate定位方式是最好,可支援元素的單個屬性和多個屬性定位,強烈推薦使用。
使用方法,舉例如下:

driver.find_element_by_ios_predicate("value == 'ClearEmail'")
driver.find_element_by_ios_predicate("type == 'XCUIElementTypeButton' AND value == 'ClearEmail'")

1)比較運算子:>、<、==、>=、<=、!=
可用於數值和字串的比較:
如:value>100value == 'ClearEmail'value != 'ClearEmail'

driver.find_element_by_ios_predicate("value>100")

2)範圍運算子:IN、BETWEEN
可用於數值和字串的範圍核對
如:value BETWEEN {1,6}value IN {'Clear','Email'}

driver.find_element_by_ios_predicate("value BETWEEN {1,6}")

3)字串相關:CONTAINS、BEGINSWITH、ENDSWITH
包含某個字串,如:value CONTAINS 'Email'
以某個字串開頭,如:value BEGINSWITH 'Clear'
以某個字串結束,如:value ENDSWITH '班級Email'

driver.find_element_by_ios_predicate("value CONTAINS 'Email'")

4)萬用字元: LIKE
其中:?代表一個字元,*代表多個字元
如:一個元素的value屬性為ClearEmail:
value LIKE 'Clear?mail'
value LIKE 'Clear*'
以上這麼多種文字都可以被識別為同一個元素。

driver.find_element_by_ios_predicate("value LIKE 'Clear*'")

5)正則表示式:MATCHES
如:一個元素的value屬性為ClearEmail:
value MATCHES '^C.+l$'

driver.find_element_by_ios_predicate("value MATCHES '^C.+l$'")

注⚠️:正則表示式詳情可參考我的另一篇文章《Python-正則表示式
6)兩種及兩種以上屬性定位元素:AND
單個屬性定位用符號AND連線起來即可,如下:

driver.find_element_by_ios_predicate("type == 'XCUIElementTypeButton' AND value == 'ClearEmail'")

3、accessibility_id

替代以前的name定位方式,在 iOS 上,主要使用元素的labelname(兩個屬性的值都一樣)屬性進行定位,如該屬性為空,也是不能使用該屬性。
driver.find_element_by_accessibility_id('ClearEmail')

4、class_name

使用元素的type屬性定位,特別注意該屬性的唯一性!class_name唯一的情況並不多,一般情況下用不上。
driver.find_element_by_class_name('XCUIElementTypeButton')

5、xpath

由於 iOS 10開始使用的 XCUITest 框架原生不支援,定位速度很慢,所以官方現在不推薦大家使用,也有其他替代的定位方式可使用。
1)使用絕對路徑定位:
driver.find_element_by_xpath('/XCUIElementTypeApplication/XCUIElementTypeButton')
2)使用相對路徑定位
driver.find_element_by_xpath('//XCUIElementTypeButton')
3)通過元素的索引定位
driver.find_element_by_xpath('//XCUIElementTypeButton[index]')
4.通過元素的屬性定位
一種屬性:
driver.find_element_by_xpath("//className[@value='ClearEmail']")
兩種屬性:
driver.find_element_by_xpath("//className[@value='ClearEmail'][@ visible =true]")
部分屬性(最強大):driver.find_element_by_xpath("//className[contains(@value,'ClearEmail')]")

以上,對你有幫助的話,點贊❤️吧~~
歡迎關注我的簡書,部落格,TesterHome,Github~~~

相關推薦

【Mac + Appium學習(四)】之常用的IOS自動化測試API總結 Selenium2+python自動化36-判斷元素存在 Appium+Python3+iOS定位元素

環境: Appium:1.9.1 Appium-desktop:1.7.1 Xcode:10.0 IOS:iPhone5S(10.3.3) Mac:10.13.6   ①獲取手機螢幕size:長、寬 《Appium Appium 1.9 版本 BUG:使用

Appium+Python3+iOS定位元素

前言: 最近在做IOS自動化測試,IOS的Appium環境都配置OK,執行起來真的慢,慢到懷疑人生,那麼今天就來總結一下IOS定位方式和各個定位方式的速度排序。 據我觀察,按查詢元素的順序速度,從快到慢的順序如下: ios_predicate >> accessibility_id >&

appium相對位置定位元素----父節點/兄弟節點定位

APPIUM元素定位 兄弟節點定位 父節點定位 同級節點定位 相對定位節點 講一下定位手機app上元素時定位父節點、兄弟節點的方法 這裏就講這兩種了,也是比較常用的兩種方法,其他的方法大家查看博客的其他章節 實例: 我們現在要定位到RelativeLayout[0,1285][1080,1

Appium+Python3+iOS真機環境搭建

rip contain dev 設置 project prop xcode 連接 github Appium 是一個自動化測試開源工具,支持 iOS 平臺和 Android 平臺上的原生應用,web 應用和混合應用。 本次環境配置相關:macOS:10.13.4Appi

appium實用xpath定位元素

一、實用xpath定位,定位選單框中的5個元素 表示式:    //android.widget.HorizontalScrollView/*/android.support.v7.app.a$c 但是在appium中無法識別“$”,要改為點“.”或者星“*”,所以

appium+python如何定位元素

一、開啟appium,進入錄製介面 二、在需要定位的地方左鍵點選,右側會顯示該元素的資訊。(如下圖) 三、附上程式碼例項: el8 = driver.find_element_by_id("com.nvrcloud.android.presentation:id/

Appium+Python3+iOS真機環境搭建 (轉載並更新)

應用 sele nod rar tao zh-cn 新版 bim test 原文地址:https://www.cnblogs.com/dalongNOTES/p/9900670.html Appium 是一個自動化測試開源工具,支持 iOS 平臺和 Andr

Python3+Appium學習筆記07-元素定位工具UI Automator Viewer

nim get python3 none sca 打開 改變 aac err 這篇主要說下如何使用UI Automator Viewer這個工具來定位元素。這個工具是sdk自帶的。在sdk安裝目錄Tools目錄下找到uiautomatorviewer.bat並啟動它 ?

iOSNsPredicate Appium 定位元素

bsp fin inspect drive 規則 acc 屬性 access 使用 Appium使用WebDriverAgent之後,新增了一種定位方法iOSNsPredicate,總結了一下使用方法: MobileElement photo = driver.fi

appium +ios 判斷元素是否存在,排除visible=“false”的數據

drive bsp tco 查看 val ios ive xxx idt 問題 想要判斷name=xxx的元素是否存在,存在的話進行點擊,結果頁面並沒有展示我要的元素時也提示找到了元素 原因 ios通過driver.find_element_by_name(“name值

appium+python自動化49-yaml管理定位元素

絕對路徑 ech alt 生成 join http mar _file__ OS 如何高效管理定位元素,這個是很有學問的問題,也是面試必問的[以下純屬個人觀點,勿噴!]。 有的人用xml管理頁面定位元素,這種逼格略高,但是小編認為學習成本大,賊麻煩。 有的人提到用ex

Appiumios下獲取頁面元素的一種新思路

p.p1 { margin: 0.0px 0.0px 16.5px 0.0px; text-align: justify; font: 22.0px "PingFang SC Semibold"; color: #000000 } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px;

python3 + selenium 之元素定位

8種定位方式 定位一個元素 webdriver提供了一系列的物件定位方法,常用的有以下幾種 driver.find_element_by_name()——最常用,簡單 driver.find_element_by_id()——最常用,簡單 driver.fi

Appium Android定位元素與操作

一、常用識別元素的工具 uiautomator:Android SDK自帶的一個工具,在tools目錄下 monitor:Android SDK自帶的一個工具,在tools目錄下 Appium Inspector:Appium自帶的一個功能,只有mac下可以使用該功能

python+appium-desktop:安卓(android)7.0以上使用appium無法定位元素(無法refresh)且 無法執行指令碼

--解決方法:   啟動appium時配置中新增: "automationName":"uiautomator2" --擴充套件:     想支援安卓7.0及以上版本需要滿足一下3點:     1、使用appium-desktop 1.6.3以及以上版本     2、啟動appium的driver配置新增:"

ios 固定定位元素被隱藏的問題

在做web-app應用的時候,做了一個類似於通訊錄的元件時,遇到ios系統將固定定位的元素部分隱藏的問題,頁面如下 右側導航的a-z被半部分隱藏,而在安卓或者chrome模擬則沒有問題,如圖 感覺非常奇怪,找了很久也沒找出來。某天心血來潮,認為應該是overflow:hidd

Appium Python 五:元素定位

總結 單個元素定位: driver.find_element_by_accessibility_id(id) driver.find_element_by_android_uiautomator(uia_string) driver.find_element_by_class_name(name)

appium定位元素java篇

1、關於沒有name,沒有ID的元素的定位---通用篇 解題思路: 因為沒有name,id;其實剩下的選擇已不多,要麼xpath,要麼className。xpath木有好印象(穩定性不高,加之1.0x後需要寫全路徑,相當崩潰),我決定十分個人色彩的建議使用className。 具體方法: 用classNa

Appium通過content-desc的值定位元素

使用content-desc的值快速定位元素: driver.findElementByAccessibilityId("content-desc的值"); 今天在做慕測的軟體測試的九月雙週賽,在做到第二個題目的時候我的uiautomatorviewer突然報了這個

appium中xpath定位原生元素詳解

當頁面元素中沒有包含明顯的text、ID等或者text不具備唯一性時,定位就比較坑爹了,那麼我們就必須要使用xpath定位了。 一般情況下不推薦使用絕對路徑,如果確實人品爆棚整個頁面都沒有你能夠定位到的東西或者無法定位時那就老老實實一層一層的寫,但這種情況基本不會存在。