這些appium常用元素定位技巧,你掌握了幾種?

博為峰網校發表於2018-12-21

今天跟大家分享下Appium的元素定位的一些小技巧。

Appium對於處理原生的android應用直接透過uiautomatorviewer.bat這個工具來獲取元素定位。

這些appium常用元素定位技巧,你掌握了幾種?

在開始appium元素定位的話題之前,首先讓我們瞭解下appium的一些基礎知識:

一、測試物件

appium 是一個自動化測試開源工具,支援iOS和 Android平臺上的原生應用,web應用和混合應用。

移動原生應用: 單純用ios或者android開發語言編寫的、針對具體某類移動裝置、可直接被安裝到裝置裡的應用,一般可透過應用商店獲取;

移動web應用: 使用移動瀏覽器訪問的應用(appium支援iOS上的Safari和Android上的 Chrome),不需要下載到裝置上,而是透過瀏覽器直接訪問;

混合應用: 同時使用網頁語言與程式語言開發,透過應用商店區分移動作業系統分發,使用者需要安裝使用的移動應用。

二、支援平臺及語言

appium是跨平臺的,支援OSX,Windows以及Linux系統。它允許測試人員在不同的平臺(iOS,Android)使用同一套API來寫自動化測試指令碼,這樣大大增加了iOS和Android測試套件間程式碼的複用性 

appium支援多語言,採用C/S設計模式,只要滿足client能夠傳送http請求給server即可

三、元素定位

1.格式:find_element_by_定位方式(value)

我根據手機自帶的計算器來解釋

這些appium常用元素定位技巧,你掌握了幾種?

透過id定位

透過工具獲取到按鈕的 resource-id

driver.find_element_by_id('resource-id')

例項: driver.find_element_by_id(' com.android.bbkcalculator:id/clear')

透過class定位

透過工具獲取到按鈕的class

driver.find_element_by_class_name('class')

例項: driver.find_element_by_class_name(' android.widget.ImageButton ')

透過text定位

appium1.5及之後的版本廢棄了name屬性(如name=百度一下,需要使用uiautomator的定位方式,使用text的內容)

driver.find_element_by_android_uiautomator("text(\中文\)")

例項:driver.find_element_by_android_uiautomator ("text(\"百度一下\")")

備註:需要確認這個中文是當前頁面唯一值,否則還是定位不到,注意寫法,不是直接把中文複製進去

透過xpath定位

driver.find_element_by_xpath("xpath內容 ")

例項:driver.find_element_by_xpath("//android.widget.FrameLayout/android.widget.ImageButton[4]")

以下方式暫時沒有用到,如果有問題以後會更改

透過accessibility_id

在UI Automator Viewer介面上並沒有找到這個欄位,這個對應的欄位是content-desc

driver.find_element_by_accessibility_id("accessibility_id")

沒有找到例項,要是自己寫自動化的APP碰到了,可以用用

透過css_selector定位(webview)

只適用於webview的html頁面,繼承自webdriver,與pc版本的UI測試一致

driver.find_element_by_css_selector()

透過link_text定位(webview)

只適用於webview容器中的html頁面,繼承自webdriver,與pc版本的UI測試一致

driver.find_element_by_link_text()

透過name定位

只適用於webview容器中的html頁面,繼承自webdriver,與pc版本的UI測試一致

driver.find_element_by_name()

2.定位元素的另一種寫法:find_element(by,value)

find_element_by_方式(value)實際呼叫的都是find_element(by,value)

需要匯入這個包:from selenium.webdriver.common.by import By

例如:定位id為ag2的元素

方式一:driver.find_element_by_id("ag2”)

方式二:driver.find_element(By.ID,"ag2")

這個操作的好處是可以直接把操作的by和value放到一個元組裡,然後呼叫通用方法來傳參獲得元素結果。

cateid=(By.ID,"ag2")

driver.find_element(*cateid).click()

by的操作可以是:

By.ID 相當於by_id

By.CLASS_NAME 相當於by_class_name

By.XPATH 相當於by_xpath

By.NAME 相當於by_name

By.TAG_NAME 相當於by_tag_name

By.CSS_SELECTOR 相當於by_css_selector

By.LINK_TEXT 相當於by_link_text

3.find_elements_by_定位方式(value)返回元素陣列

用法與find_element_by_方式(value)一致,但是返回一個陣列。可以透過陣列的索引來訪問具體的某個結果。

例如:透過class_name定位到多個元素,我想點選第一個元素

driver.find_elements_by_class_name("android.widget.RelativeLayout”)[0].click()

4.返回元素陣列的另一種寫法:find_elements(by,value)

用法與find_element(by,value)一致,但是返回一個陣列。可以透過陣列的索引來訪問具體的某個結果。

例如:透過class_name定位到多個元素,我想點選第一個元素

driver.find_elements(By.CLASS_NAME,"android.widget.RelativeLayout”)[0].click()

5.透過元素定位元素

可以先找到某個元素,然後再進一步定位元素

find_element_by_class_xpath(“xxx”).find_element_by_name(“yyy")

四、元素操作

找到元素後可以對元素進行的操作,例如上面講的進一步定位元素

1.click()

//點選操作

也可以用tab實現點選操作

driver.find_element_by_id("com.wuba.zhuanzhuan:id/ae8").click()

2.clear()

//清空輸入框內容

driver.find_element_by_id("com.wuba.zhuanzhuan:id/ij").clear()

3.send(xx)

//輸入框內輸入內容

driver.find_element_by_id("com.wuba.zhuanzhuan:id/ij").send_keys("test content")

4.text

//獲得元素的text內容

print(driver.find_element_by_xpath(" //android.widget.LinearLayout[1]//xxx").text)

四、總結

1、Appium跨平臺,支援Android和IOS自動化測試。 

2、Appium支援多語言,如java、Object-C、JavaScript、Php、Python、Ruby、C#、Clojure等等 

3、支援原生應用,web應用和混合應用 

4、僅僅支援UI測試

歡迎加入  51軟體測試大家庭,在這裡你將獲得【最新行業資訊】,【免費測試工具安裝包】,【軟體測試技術乾貨】,【面試求職技巧】... 51與你共同學習,一起成長!期待你的加入: QQ                     群:                    755431660


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31407649/viewspace-2286086/,如需轉載,請註明出處,否則將追究法律責任。

相關文章