Appium常用定位方式

前言

與Web自動(dòng)化測(cè)試一樣足绅,app自動(dòng)化測(cè)試過(guò)程中最重要一個(gè)環(huán)節(jié)就是元素定位糠溜,只有準(zhǔn)確定位到了元素才能進(jìn)行相關(guān)元素的操作岭辣。appium繼承了selenium的定位方法鼻听,并在其基礎(chǔ)上進(jìn)行了擴(kuò)展财著,以適應(yīng)移動(dòng)端控件的定位。


id 定位

id定位是使用控件的resource-id進(jìn)行定位的撑碴,如下圖所示:


id定位

resourec-id定位方法如下:

driver.find_element_by_id("com.xueqiu.android:id/button_icon")

Class Name 定位

Class Name 定位是使用控件的class屬性進(jìn)行定位的撑教,如下圖所示:


class name定位

class 定位方法如下:

driver.find_element_by_class_name("android.widget.ImageView")

由于class屬性的重復(fù)性很高,不一定能準(zhǔn)確的定位到想要的控件醉拓,我們可以先定位一組控件伟姐,再進(jìn)一步篩選。

# 先定位一組控件
list = driver.find_elements_by_class_name("android.widget.ImageView")
# 循環(huán)遍歷所有控件
for i in list:
  print(i)

# 操作某一個(gè)控件
list[0].click() # 點(diǎn)擊第一個(gè)控件
list[-1].click() # 點(diǎn)擊最后一個(gè)控件

XPath 定位

xpath定位是一種路徑定位方式亿卤,主要是依賴于元素絕對(duì)路徑或者相關(guān)屬性來(lái)定位愤兵,但是絕對(duì)路徑xpath執(zhí)行效率比較低(特別是元素路徑比較深的時(shí)候),一般使用比較少排吴。通常使用xpath相對(duì)路徑和屬性定位秆乳。
xpath定位語(yǔ)法

image.png

xpath方法如下:

# 絕對(duì)定位
driver.find_element_xpath("/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.wid\
get.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout/android.widget.LinearLayout/androi\
d.widget.FrameLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.view.ViewGroup/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.Relati\
veLayout[1]/android.widget.FrameLayout/android.widget.ImageView
")

# 相對(duì)定位
driver.find_element_by_xpath('//android.widget.EditText[@text="請(qǐng)輸入用戶名"]')
driver.find_element_by_xpath('//*[@class="android.widget.EditText" and @index="3"]')
# contains函數(shù)定位(支持模糊匹配)
driver.find_element_by_xpath(//*[contains(@resource-id, 'user_profile_icon') and contains(@class, 'Image')])
# 屬性組合定位
//*[@text='基金' and contains(@resource-id, 'button')]
//*[@text='基金' and @index='1']
# list定位
(//*[@text='基金'])[1]
# 父子關(guān)系定位
//[contains(@resource-id, 'buttons_container')]//[@text='基金']

appium xpath定位與selenium xpath 定位有一點(diǎn)不一樣的是,selenium xpath是通過(guò)元素標(biāo)簽一層一層往下找钻哩,而appium xpath定位是通過(guò)class屬性來(lái)代替標(biāo)簽名屹堰。

層級(jí)定位

層級(jí)定位是先找到該元素的有對(duì)應(yīng)屬性的父元素節(jié)點(diǎn),然后基于父元素進(jìn)行元素定位街氢。
層級(jí)定位方法如下:

# 先定位它的父級(jí)
root_element=driver.find_element_by_id('com.tal.kaoyan:id/activity_register_parentlayout')
# 然后通過(guò)父級(jí)定位它的子級(jí)
root_element.find_element_by_class_name('android.widget.ImageView').click()

Accessibility id 定位

該方法屬于appium擴(kuò)展的定位方法扯键, 它的核心是找到控件的contentDescription屬性。

  • 在Android中珊肃,content-desc屬性對(duì)應(yīng)AccessibilityId定位方式荣刑,如果這個(gè)屬性不為空則推薦使用馅笙。
  • 在iOS中,label和name屬性都對(duì)應(yīng)AccessibilityId定位方式厉亏,如果有則推薦使用董习。

accessibility id定位方法如下:

driver.find_element_by_accessibility_id("天貓超市").click()

Android uiautomator 定位

該方法屬于appium的擴(kuò)展方法,并且只支持Android平臺(tái)叶堆。支持元素全部屬性定位.定位原理是通過(guò)android 自帶的android uiautomator的類庫(kù)去查找元素阱飘。 Appium元素定位方法其實(shí)也是基于Uiautomator來(lái)進(jìn)行封裝的。

Android uiautomator 定位方法如下:

# id 定位
driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.tal.kaoyan:id/login_email_edittext")')

# text定位
driver.find_element_by_android_uiautomator('new UiSelector().text("請(qǐng)輸入用戶名")')

# class name定位
driver.find_element_by_android_uiautomator('new UiSelector().className("android.widget.EditText")')

#組合定位id+text
id_text = 'new UiSelector().resourceId("com.baidu.yuedu:id/webbooktitle").text("小說(shuō)")'
driver.find_element_by_android_uiautomator(id_text).click()

# 滾動(dòng)到指定位置
self.driver.find_element_by_android_uiautomator('new UiScrollable('
                                                    'new UiSelector().scrollable(true).instance(0))'
                                                    '.scrollIntoView('
                                                    'new UiSelector().text("Views").instance(0));').click()

常用api

  • click 點(diǎn)擊
  • send_keys 輸入
  • get_attribute 獲取某個(gè)屬性
  • page_source 頁(yè)面所有元素
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末虱颗,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蔗喂,更是在濱河造成了極大的恐慌忘渔,老刑警劉巖淫僻,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件栅葡,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡喉镰,警方通過(guò)查閱死者的電腦和手機(jī)乖阵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門宣赔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人瞪浸,你說(shuō)我怎么就攤上這事儒将。” “怎么了对蒲?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵钩蚊,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我蹈矮,道長(zhǎng)砰逻,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任泛鸟,我火速辦了婚禮蝠咆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘北滥。我一直安慰自己刚操,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布碑韵。 她就那樣靜靜地躺著赡茸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪祝闻。 梳的紋絲不亂的頭發(fā)上占卧,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天遗菠,我揣著相機(jī)與錄音,去河邊找鬼华蜒。 笑死辙纬,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的叭喜。 我是一名探鬼主播贺拣,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼捂蕴!你這毒婦竟也來(lái)了譬涡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤啥辨,失蹤者是張志新(化名)和其女友劉穎涡匀,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體溉知,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡陨瘩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了级乍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片舌劳。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖玫荣,靈堂內(nèi)的尸體忽然破棺而出甚淡,到底是詐尸還是另有隱情,我是刑警寧澤崇决,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布材诽,位于F島的核電站,受9級(jí)特大地震影響恒傻,放射性物質(zhì)發(fā)生泄漏脸侥。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一盈厘、第九天 我趴在偏房一處隱蔽的房頂上張望睁枕。 院中可真熱鬧,春花似錦沸手、人聲如沸外遇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)跳仿。三九已至,卻和暖如春捐晶,著一層夾襖步出監(jiān)牢的瞬間菲语,已是汗流浹背妄辩。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留山上,地道東北人眼耀。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像佩憾,于是被迫代替她去往敵國(guó)和親哮伟。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353