Appium學(xué)習(xí)(5)——定位控件

? 通過(guò) uiautomatorviewer.bat工具可以查看控件的屬性璧榄,該工具位于\android-sdk\tools目錄下。需要注意的是笆包,你的手機(jī)設(shè)備或模擬器的API要在16以上目派,也就是Android版本得是4.2以上,因?yàn)檫@個(gè)工具是Google在4.2以后推出來(lái)的喜每,只適用于4.2以后的版本。

*執(zhí)行原理: uiautomatorviewer是發(fā)送dump命令雳攘,讓存放在手機(jī)設(shè)備中/system/bin/uiautomator下的腳本執(zhí)行带兜,獲得一個(gè)uidump.xml的文件,然后將這個(gè)xml文件抓到本地吨灭,本地讀取xml文件就可以了刚照。文件可以看到node節(jié)點(diǎn)的信息:包括package和resource_id等等。

PS:Appium桌面版本也提供定位工具——inspector[放大鏡的圖標(biāo)]喧兄。

? 首先啟動(dòng)模擬器(adb devices查看設(shè)備是否連接)无畔,打開(kāi)uiautomatorviewer.bat工具(功能有:打開(kāi)已保存的截圖;連接設(shè)備桌面吠冤;保存當(dāng)前屏幕截圖):

圖1 uiautomatorviewer.bat

PS:保存截圖后有兩個(gè)文件浑彰,一個(gè)是屏幕截圖一個(gè)是xml格式的屏幕層級(jí)關(guān)系(uix文件),直接打開(kāi)已保存的截圖咨演,就不用每次都連接設(shè)備打開(kāi)應(yīng)用了闸昨。

#id定位:通過(guò)uiautomatorviewer.bat工具可以查看對(duì)象的id屬性——resource-id。

圖2 resource-id

用法:driver.find_element_by_id("com.android.calculator2:id/digit_1")

注意薄风,如果driver.find_element_by_id("com.android.calculator2:id/digit_1")找不到元素時(shí)饵较,方法會(huì)拋出異常,而driver.find_elements_by_id("com.android.calculator2:id/digit_1")則不會(huì)報(bào)錯(cuò)遭赂,其他driver.find_elements_by_XX方法也是這樣循诉。

#name定位:通過(guò)uiautomatorviewer.bat工具可以查看對(duì)象的name屬性——text(Appium1.5以前的,1.8以后取消了)撇他。

圖3 text

用法:driver.find_element_by_name("1")

#appium_desktop不支持driver.find_element_by_name

#class name定位:通過(guò)uiautomatorviewer.bat工具可以查看對(duì)象的class name屬性——class茄猫。

圖4 class

用法:driver.find_element_by_class_name("android.widget.Button")

使用 class name定位一般獲得的view都不止一個(gè),所以需要遍歷一遍得到的 views困肩,然后縮小搜索條件來(lái)獲得目標(biāo)控件划纽。

比如,先定位一組控件?

list = driver.find_elements_by_class_name("android.widget.Button")

# 循環(huán)遍歷所有控件

for i in list:

print(i)

# 操作某一個(gè)控件

list[0].click()

# 點(diǎn)擊第一個(gè)控件

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

#accessibility id定位:通過(guò)uiautomatorviewer.bat工具可以查看對(duì)象的accessibility id屬性——content-desc锌畸。如果這個(gè)屬性不為空則推薦使用勇劣。[iOS中指的是name屬性]

#xpath定位,xpath是xml path的簡(jiǎn)稱(chēng),是功能強(qiáng)大的一種定位方式:通常使用xpath相對(duì)路徑和屬性定位比默。

xpath語(yǔ)法

說(shuō)明:絕對(duì)路徑以"/"號(hào)表示幻捏,相對(duì)路徑則以"http://"表示。當(dāng)xpath的路徑以"/"開(kāi)頭時(shí)命咐,表示讓xpath解析引擎從文檔的根節(jié)點(diǎn)開(kāi)始解析篡九;當(dāng)xpath路徑以"http://"開(kāi)頭時(shí),則表示讓xpath引擎從文檔的任意符合的元素節(jié)點(diǎn)開(kāi)始進(jìn)行解析醋奠。而當(dāng)"/"出現(xiàn)在xpath路徑中時(shí)榛臼,則表示尋找父節(jié)點(diǎn)的直接子節(jié)點(diǎn);當(dāng)"http://"出現(xiàn)在xpath路徑中時(shí)钝域,則表示尋找父節(jié)點(diǎn)下任意符合條件的子節(jié)點(diǎn)讽坏,不管嵌套了多少層級(jí),所以其實(shí)xpath的路徑可以絕對(duì)路徑和相對(duì)路徑混合在一起來(lái)進(jìn)行表示例证,強(qiáng)大吧B肺亍!织咧!

圖5 xpath

常用用法:

driver.find_element_by_xpath("http://android.view.ViewGroup/android.widget.Button[7]")

#查找頁(yè)面上第一個(gè)android.view.ViewGroup元素內(nèi)的第7個(gè)android.widget.Button子元素胀葱,即1

driver.find_element_by_xpath("http://android.view.ViewGroup/android.widget.Button[@text='1']")

#查找頁(yè)面上第一個(gè)android.view.ViewGroup元素內(nèi)的text屬性為1的android.widget.Button子元素,即1

driver.find_element_by_xpath("http://android.view.ViewGroup/android.widget.Button[@class='android.widget.Button'][@index='6']")

#查找頁(yè)面上第一個(gè)android.view.ViewGroup元素內(nèi)的class屬性為android.widget.Button并且index屬性為6的android.widget.Button子元素笙蒙,即1

以上用法是xpath中基于準(zhǔn)確元素屬性的定位抵屿,其實(shí)xpath作為定位神器也可以用于模糊匹配:

*contains定位:

driver.find_element_by_xpath("http://android.widget.Button[contains(@resource-id,'1')]")

#查找頁(yè)面上resource-id屬性包含1的android.widget.Button元素

備注:關(guān)于xpath這種定位方式,webdriver會(huì)將整個(gè)頁(yè)面的所有元素進(jìn)行掃描以定位我們所需要的元素捅位,所以這是一個(gè)非常費(fèi)時(shí)的操作轧葛,如果你的腳本中大量使用xpath做元素定位的話,會(huì)導(dǎo)致你的腳本執(zhí)行速度降低艇搀,所以我們還是慎用的尿扯!

#Android uiautomator 定位:通過(guò)android 自帶的android uiautomator的類(lèi)庫(kù)去查找元素。 Appium元素定位方法其實(shí)也是基于Uiautomator來(lái)進(jìn)行封裝的焰雕。

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

# text定位

driver.find_element_by_android_uiautomator('newUiSelector().text("請(qǐng)輸入用戶名")')

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

#組合定位

id+textid_text='newUiSelector().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('newUiScrollable(''newUiSelector().scrollable(true).instance(0))''.scrollIntoView(''newUiSelector().text("Views").instance(0));').click()

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末衷笋,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子矩屁,更是在濱河造成了極大的恐慌辟宗,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吝秕,死亡現(xiàn)場(chǎng)離奇詭異泊脐,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)烁峭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)晨抡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事耘柱。” “怎么了棍现?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵调煎,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我己肮,道長(zhǎng)士袄,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任谎僻,我火速辦了婚禮娄柳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘艘绍。我一直安慰自己赤拒,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布诱鞠。 她就那樣靜靜地躺著挎挖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪航夺。 梳的紋絲不亂的頭發(fā)上蕉朵,一...
    開(kāi)封第一講書(shū)人閱讀 52,475評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音阳掐,去河邊找鬼始衅。 笑死,一個(gè)胖子當(dāng)著我的面吹牛缭保,可吹牛的內(nèi)容都是我干的汛闸。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼涮俄,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蛉拙!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起彻亲,我...
    開(kāi)封第一講書(shū)人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤孕锄,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后苞尝,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體畸肆,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年宙址,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了轴脐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖大咱,靈堂內(nèi)的尸體忽然破棺而出恬涧,到底是詐尸還是另有隱情,我是刑警寧澤碴巾,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布溯捆,位于F島的核電站,受9級(jí)特大地震影響厦瓢,放射性物質(zhì)發(fā)生泄漏提揍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一煮仇、第九天 我趴在偏房一處隱蔽的房頂上張望劳跃。 院中可真熱鬧,春花似錦浙垫、人聲如沸刨仑。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)贸人。三九已至,卻和暖如春佃声,著一層夾襖步出監(jiān)牢的瞬間艺智,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工圾亏, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留十拣,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓志鹃,卻偏偏與公主長(zhǎng)得像夭问,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子曹铃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容