iOS自动化测试元素定位
目錄
前言
一、元素屬性介紹
? 1、元素屬性
? 2、查看各定位方式執(zhí)行效率
二、iOS常用定位方法
? 1、accessibility_id
? 2、class_name
? 3、Xpath
? 4、ios_class_chain(類型鏈)
? 5、ios_predicate(謂詞)
結(jié)語
前言
今天要給大家分享的是對元素的定位,在一個頁面中有很多不同的策略來定位一個元素,我們選擇最合適的方法即可。
一個頁面最基本組成單元是元素,想要定位一個元素,我們需要特定的信息來說明這個元素的唯一特征。
一、元素屬性介紹
? iOS自動化元素查找工具,我使用的是Appium的inspector。最新版的appium自動展示多種元素定位表達(dá)式,還可以查看每種定位表達(dá)式的執(zhí)行效率。
? 1、元素屬性
| type | 元素類型,與className作用一致,如:XCUIElementTypeButton |
| value | 一般不用 |
| name | 元素的文本內(nèi)容,可用作 AccessibilityId定位方式,如:ClearEmail |
| label | 絕大多數(shù)情況下,與 name 作用一致 |
| enabled | 元素是否可點擊,一般值為true或者false |
| visible | 元素是否可見,一般值為true或者false |
? 2、查看各定位方式執(zhí)行效率
? Appium的inspector功能中,選擇某個元素后在“selected Element”中會展示多個定位表達(dá)式,而且點擊定位表達(dá)式后面的“Get Timing”,可以顯示每個定位表達(dá)式的執(zhí)行時間。
二、iOS常用定位方法
? 1、accessibility_id
? iOS自動化測試元素定位的accessibility_id主要使用元素的label或name(兩個屬性的值都一樣)屬性進(jìn)行定位。
? 例如:第一張截圖中l(wèi)abel或name都是“我的功能”
driver.find_element_by_accessibility_id("我的功能") driver.find_element(MobileBy.ACCESSIBILITY_ID, "我的功能")? 2、class_name
? class_name定位方法使用元素的type屬性,type屬性表示控件類型,一般不具有唯一性,因此class_name不常用。
? 例如:type屬性為:XCUIElementTypeButton
driver.find_element_by_class_name("XCUIElementTypeButton") driver.find_element(MobileBy.CLASS_NAME, "XCUIElementTypeButton")? 3、Xpath
? Appium對app原生環(huán)境的xpath定位方法執(zhí)行效率很低,從iOS 10開始使用的 XCUITest 框架原生不支持,定位速度很慢,官方不推薦這種方式。但是在實際使用中,當(dāng)其他定位方式都不能找到元素時,可以嘗試xpath定位。
? 例如:第一張截圖中“我的功能”定位
driver.find_element_by_xpath("//XCUIElementTypeStaticText[@name='我的功能']") driver.find_element(MobileBy.XPATH, "//XCUIElementTypeStaticText[@name='我的功能']")? 4、ios_class_chain(類型鏈)
? ios_class_chain僅支持iOS 10或以上,且僅限于WebDriverAgent 框架中使用。此方法用于替代xpath,但該方法還有待完善,沒有納入官方文檔。
? Github說明地址:https://github.com/appium/appium-xcuitest-driver
? 例如:第一張截圖中“我的功能”定位
driver.find_element_by_ios_class_chain('**/XCUIElementTypeStaticText[`label == "我的功能"`]') driver.find_element(MobileBy.IOS_CLASS_CHAIN, '**/XCUIElementTypeStaticText[`label == "我的功能"`]')? 5、ios_predicate(謂詞)
? iOS Predicate 即謂詞邏輯。ios_predicate定位方法支持iOS所有的版本,也就是能適配XCUITest 和 UIAutomation底層測試框架,使用的就是iOS編程語言,因此可以把此方法作為首選定位方式。
? 謂詞表達(dá)式由屬性、運算符和值構(gòu)成。
? ?1.1、常用的屬性
? ?在上面的表格中已經(jīng)介紹,可以使用的元素屬性:type、value、name、label、enabled、visible
? ?1.2、運算符
? ?1.2.1、比較運算符
| 比較運算符 | >, <, ==, >=, <=, != |
? ?可用于數(shù)值和字符串的比較,如:label == ‘我的功能’,label >= 500
? ?示例:
driver.find_element_by_ios_predicate("label == '我的功能'") driver.find_element(MobileBy.IOS_PREDICATE, "label == '我的功能'") driver.find_element_by_ios_predicate("type == 'XCUIElementTypeButton' AND value == 'ClearEmail'")? ?1.2.2、范圍運算符
? ?常用的范圍運算符有:
| 范圍運算符 | 說明 | 實例 |
| IN | 用于字符串的范圍核對 | name IN {'Alan','May'} |
| BETWEEN | 用于數(shù)值的范圍核對 | name BETWEEN {3,10} |
? ?示例:
driver.find_element(MobileBy.IOS_PREDICATE, "name IN {'id_cell', 'id_alert'}") driver.find_element_by_ios_predicate("value BETWEEN {5, 7}")? ?1.2.3、字符串相關(guān)
| 字符串相關(guān) 運算符 | 說明 |
| CONTAINS | 表示包含某個字符串 |
| BEGINSWITH | 表示以某個字符串開頭 |
| ENDSWITH | 表示以某個字符串結(jié)束 |
? ?以字符串“自動化軟件測試”為例:
- 包含某個字符串:label CONTAINS ‘軟件’
- 以某個字符串開頭:label BEGINSWITH ‘自動’
- 以某個字符串結(jié)束:label ENDSWITH ‘測試’
? ?擴(kuò)展:在三個關(guān)鍵字后加上[c]、或者[d]、[cd]
-
[c]:表示不區(qū)分大小寫,可用于字母的校驗;
-
[d]:不區(qū)分發(fā)音符號,即沒有重音符號($、#等);
-
[cd]:既不區(qū)分大小寫,也不區(qū)分發(fā)音符號;
? ?例如:name CONTAINS[c] ABcd 和 ?name CONTAINS abcd是等同的
? ?示例:
driver.find_element_by_ios_predicate("label CONTAINS ‘軟件’")? ?1.2.4、模糊匹配:LIKE
? ?模糊匹配也可以稱為通配符匹配,?代表一個字符,*代表多個字符。
? ?示例:現(xiàn)有元素的label屬性:“自動化軟件測試”
? ?label LIKE ‘自動化軟件測試’? ?# 完全匹配
? ?label LIKE ‘自動化?件測試’? ? # ? 匹配一個字符
? ?label LIKE ‘自動化??測試’??? # 兩個?號匹配兩個字符
? ?label LIKE ‘自?化?件測試’
? ?label LIKE ‘*軟件測試’? ? ? # *代表多個字符
? ?label LIKE ‘自動化軟件*’
? ?label LIKE ‘自動化*件測*’
? ?示例:
driver.find_element(MobileBy.IOS_PREDICATE, "label LIKE ‘*軟件測試")? ?1.2.5、邏輯運算符
| 邏輯運算符 | 說明 | 實例 |
| AND | 邏輯與:必須同時滿足所有條件 | type == XCUIElementTypeStaticText AND label CONTAINS '測試 |
| && | type == XCUIElementTypeStaticText && label CONTAINS '測試 | |
| OR | 邏輯或:只需要滿足一個條件即可 | enabled == true OR visible == false |
| || | enabled == true || visible == false | |
| NOT | 邏輯非:取反 | |
| ! |
? ?1.2.6、正則表達(dá)式:MATCHES
? ?以字符串的匹配為例:匹配字符串“自動化軟件測試”,以“自”開頭,然后以“試”結(jié)尾。
? ?表達(dá)式:label MATCHES ‘^自.+試$’
? ?示例:
driver.find_element(MobileBy.IOS_PREDICATE, " label MATCHES ‘^自.+試$’")? ? 符號說明:?^??匹配字符串的開頭
? ? ? ? ? ?.? ?匹配任意字符,除了換行符
? ? ? ? ? ?+??匹配 1 個或多個的表達(dá)式。
? ? ? ? ? ?$??匹配字符串的末尾
結(jié)語
1、進(jìn)入任何行業(yè)都需要不斷地學(xué)習(xí)和努力,軟件測試工作也不例外,后期的你如果能學(xué)習(xí)計算機(jī)、數(shù)據(jù)庫、開發(fā)等知識,將對你的個人提升有極大幫助。
2、時刻保持對行業(yè)的熱情,既然想在這個行業(yè)混,那就就得多去了解行業(yè)的新動態(tài),更新自己的技術(shù)。你得知道想要站得更高,就需要學(xué)習(xí)更高水平的技術(shù)。
希望有勇氣改變的你,能發(fā)展得更好,持續(xù)學(xué)習(xí)必不可少,不要讓自己很容易被替代!!!
努力的人有的是機(jī)會,但不努力的人是一定沒機(jī)會的!!!
軟件測試資料需要的可以私信我關(guān)鍵詞(資料)免費獲取
歡迎留言,或是關(guān)注我的專欄和我交流。
總結(jié)
以上是生活随笔為你收集整理的iOS自动化测试元素定位的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 西门子转以太网模块连接S7-300以太网
- 下一篇: 高校/中职大数据实验室建设方案