Appium+Python3+iOS定位元素

前言:

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


據(jù)我觀察,按查找元素的順序速度,從快到慢的順序如下:

ios_predicate >> accessibility_id >> class_name >>xpath

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


1、元素屬性介紹
image.png

type:元素類型,與className作用一致,如:XCUIElementTypeButton
value: 一般不用
name:元素的文本內(nèi)容,可用作 AccessibilityId定位方式,如:ClearEmail
label:絕大多數(shù)情況下,與 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)比較運算符:>、<、==、>=、<=、!=
可用于數(shù)值和字符串的比較:
如:value>100value == 'ClearEmail'value != 'ClearEmail'

driver.find_element_by_ios_predicate("value>100")

2)范圍運算符:IN、BETWEEN
可用于數(shù)值和字符串的范圍核對
如:value BETWEEN {1,6}value IN {'Clear','Email'}

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

3)字符串相關(guān):CONTAINS、BEGINSWITH、ENDSWITH
包含某個字符串,如:value CONTAINS 'Email'
以某個字符串開頭,如:value BEGINSWITH 'Clear'
以某個字符串結(jié)束,如: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 框架原生不支持,定位速度很慢,所以官方現(xiàn)在不推薦大家使用,也有其他替代的定位方式可使用。
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("http://className[@value='ClearEmail']")
兩種屬性:
driver.find_element_by_xpath("http://className[@value='ClearEmail'][@ visible =true]")
部分屬性(最強大):driver.find_element_by_xpath("http://className[contains(@value,'ClearEmail')]")


以上,對你有幫助的話,點贊??吧~~
歡迎關(guān)注我的簡書,博客,TesterHome,Github~~~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容