python+appium自動化測試元素定位

關于app自動化測試,元素定位工具有三個:

appium自帶的Appium Inspector工具

Android ADT原生的工具

python版uiautomator2中的weditor

由于我常用的是前兩個,所以下面只介紹前面兩種元素定位工具(以下內容中均以微博為例子)

一、元素定位工具

(一).Appium Inspector

使用該工具的使用前提:

1.客戶端通過adb devices的dos命令確認是否連接設備

2.當前連接的設備是否被其它應用程序占用

3.已安裝appium desktop(appium的desktop下載地址:http://appium.io/

使用步驟如下:

1.啟動appium服務器,點擊右上角的第一個按鈕(放大鏡按鈕),如下圖:

2.進入后頁面顯示如下圖所示,一般情況下都選擇本地服務

3.參數(shù)設置完成后點擊右下角的Start Session,進入如下圖所示頁面

在該頁面就可以進行元素定位了

(二).uiautomatorviewer—僅限Android設備使用

使用該工具的使用前提:

1.客戶端通過adb devices的adb命令確認是否連接Android設備

2.當前連接的設備是否被其它應用程序占用

3.具有運行Android SDK功能的Windows

4.安裝jdk1.8(由于目前不支持jdk1.8以上的版本,需要使用該工具要安裝jdk1.8的版本)

5.使用Android5.0以上系統(tǒng)

6.確保為設備打開了開發(fā)人員模式,并打開USB調試

安裝:

1.在android studio的啟動頁面當中,選擇右下角的configure -> SDK Manager會彈出如圖:選擇android SDK -> SDK Tools,按圖中勾選,點擊ok進入安裝,安裝完成即可關閉android studio。記住圖中Android SDK Location對應

2.在Android studio中找到SDK,找到uiautomator,存放的位置為:D:\Android-SDK\tools\bin\uiautomatorviewer.bat

使用步驟如下:

1.找到uiautomatorviewer.bat文件,雙擊打開

2.開啟后頁面顯示如下圖:

3.若在定位時出現(xiàn)下圖問題,可以嘗試以下幾種解決方法:

查看手機是否開啟開發(fā)者權限,打開USB調試

在adb命令提示符中輸入adb devices查看手機是否連接到PC端,再使用adb shell是否能進入到手機(exit退出)

應用程序是否被占用

關閉uiautomatorviewer,重新打開是否能定位到

(三).兩種定位工具的區(qū)別

appium inspector需要啟動appium服務器,填寫Appium Desired Capabilities,略顯麻煩,而uiautomatorviewer只需要連接手機

appium inspector實時獲取當前頁面布局,而uiautomatorviewer方便存儲,不需要實時獲取

appium inspector在操作App到下一頁面時,刷新后經(jīng)常會看到在轉圈圈,很久都沒有更新

appium inspector中控件屬性有xpath的絕對定位,而uiautomatorviewer沒有xpath的絕對定位

uiautomatorviewer獲取頁面布局時經(jīng)常會獲取不到

每種工具都有缺陷,選擇最適合自己的就好啦

三、元素定位的方法

下面介紹幾種元素定位方式,常見的元素定位方式是前三種

(一).ID定位

id對應控件屬性列表中的:resource-id

driver.find_element_by_id("com.sina.weibo:id/tv_title_lookaround")

(二).XPATH定位

xpath對應控件屬性列表中的:xpath(絕對定位只有appium inspector中才有)

# 絕對定位

driver.find_element_by_xpath("/hierarchy/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.LinearLayout[2]/android.widget.LinearLayout/android.widget.TextView")

# 相對定位

driver.find_element_by_xpath("http://android.widget.Button[@text='登錄']")

(三).CLASSNAME定位

classname對應控件屬性列表中的:class

注意:由于一個頁面中可能會存在多個按鈕的classname一致,但使用classname定位時,默認選擇頁面中的第一個classname,可以將所有classname相同的元素放置在一個list列表中,點擊你所需要的位置的元素即可(列表中的元素從0開始)

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

(四).accessibility定位

accessibility對應控件屬性列表中的:content-desc

driver.find_element_by_accessibility_id("請輸入手機號或郵箱")

(五).text定位

text對應控件屬性列表中的:text

driver.find_element_by_name("登錄")

(六).其它定位

元素定位除了使用find_element_by_xxx,還可以使用page_source,page_source能夠查找到這個頁面的所有元素,再通過if/else來查找目標元素是否存在于頁面中

page_source = self.driver.page_source

? ? ? ? ? ? if "image_cancel" in page_source:

? ? ? ? ? ? ? ? self.driver.find_element(*locator).click()

? ? ? ? ? ? elif "tips" in page_source:

? ? ? ? ? ? ? ? pass

關于PO模式的元素定位方式,會在后面PO模式時再進行介紹

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容