appium基礎一:連接手機和appium-desktop定位元素


一、獲取手機信息

adb devices獲取手機或模擬器的設備名

aapt dump badging xxxx.apk獲取app的包名、入口等基本信息

如果想要知道手機原生攜帶的app的基本信息,首先是無法獲取到這個apk軟件包,也就無法用aapt的方法來獲取對應的信息。此時可以通過抓取日志的方法獲取基本信息。

舉例:想要獲取到手機功能---設置  的基本信息。最終可以通過代碼或appium客戶端鏈接手機,並自動啟動手機的設置功能

方法:

1、關閉手機后台運行的所有程序

2、打開手機日志

在cmd窗口輸入adb logcat | findstr /i start  查看日志並過濾出來start 類型日志,保持日志監控窗口不動

3、點擊手機中的---設置,查看cmd窗口日志文件

因為先前已經把所有后台運行日志關閉。所有此時打開設置,可以看到日志窗口發生了變化,可以確定這個日至就是設置功能的日志

從上面的日志信息中,可以看到有這樣以穿字符串:com.android.settings/.Settings

這個字符串中的 / 左側即為包名,右側是入口。然后可以把這個包名和程序入口,替換我們代碼中的對應qq的包名和程序入口。替換完成以后,運行程序,就會發現設置自動被啟動了

 

 

二、通過代碼鏈接模擬器/手機

 

from appium import webdriver#導入appium包

#連接手機app初始化的一些信息
desc={}

desc['deviceName']='127.0.0.1:62001'#手機設備名稱,adb devices
desc['platformVersion']='4.4.2'#手機版本,在手機中:設置--關於手機
desc['platformName']='Android' #手機類型,ios或android
#輸入命令,獲取app信息:aapt dump badging C:\Users\83473\Desktop\mobileqq_android.apk
desc['appPackage']='com.tencent.mobileqq'#包名
desc['appActivity']='com.tencent.mobileqq.activity.SplashActivity'#啟動入口
desc["unicodeKeyboard"] = "True"#appium提供的一種輸入法,可以傳中文。測試時直接用這個輸入法
desc["resetKeyboard"] = "True"#程序結束時重置原來的輸入法
desc["noReset"] = "True"#不初始化手機app信息(類似不清楚緩存)


#啟動服務端,再cmd窗口輸入appium.如果appium沒有安裝好,可以打開appium-desktop.也相當於啟動了服務

driver=webdriver.Remote('http://127.0.0.1:4723/wd/hub',desc)#訪問服務接口,並啟動手機app。url參數是當appium啟動后,默認訪問服務地址和接口

啟動服務如下圖:

 

至此,可以直接右鍵運行程序,可以看到模擬器中的qq就啟動了

三、用客戶端鏈接app

 

1、雙擊上面的圖標,打開appium-desktop,點擊start session

 

2、打開后,點擊屏幕右上角的搜索按鈕

 

 

3、然后會打開配置頁面,在本地服務配置信息同上面寫的代碼鏈接配置。填入正確的信息后,點擊startSession

 

 

成功啟動模擬器中的qq程序。如下圖。此時如果模擬器和appium-desktop中界面不同,可點擊刷新按鈕同步下。

四、定位方式

1、id定位

舉例:

點擊定位元素按鈕,點擊左側app界面中的登錄定位元素后,就會出現selected element界面。

 

 此時,右側欄中可以看到,有個id,下拉滾動條會發現還有個resource-id。會發現他們兩個是一樣的。這就是說明,這個id是唯一的,登錄按鈕被唯一定位到,代碼中就可以通過id直接定位===》find_element_by_id('com.tencent.mobileqq:id/btn_login') #通過id定位

 

如果右側欄中只有resource-id,沒有id,說明resource-id不是唯一的,也就是不能通過id定位方式定位元素.  

id一定要用雙引號括起來

 

2、xpath定位

用定位元素按鈕定位某個元素后,右側selected element欄目中找到xpath,復制其對應的內容。通過xpath方法就可以定位

driver.find_element_by_xpath('//android.widget.EditText[@content-desc="請輸入QQ號碼或手機或郵箱"]')

 

 

3、殘障人士提示信息進行定位,也就是content-desc:

先用定位元素按鈕定位某個元素后,右側selected element欄目中,找到content-desc。復制content-desc的值后。通過find_element_by_accessibility_id(),將對應的值作為參數傳入。

driver.find_element_by_accessibility_id('請輸入QQ號碼或手機或郵箱')

4、AndroidUiautomator定位

 這個在運行時,調用的是Android自帶的UI框架UiAutomator的Api。格式固定,介紹幾個常用的格式如下

driver.find_element_by_android_uiautomator('new UiSelector().text("手機號")')
# 包含text文字
driver.find_element_by_android_uiautomator('new UiSelector().textContains("機")')
# 以text什么開始
driver.find_element_by_android_uiautomator('new UiSelector().textStartsWith("手")')
# 正則匹配text
driver.find_element_by_android_uiautomator('new UiSelector().textMatches("^手.*")')
 
# className
driver.find_elements_by_android_uiautomator('new UiSelector().className("android.widget.TextView")')
# classNameMatches
driver.find_elements_by_android_uiautomator('new UiSelector().classNameMatches("^android.widget.*")')
 
# resource-id、resourceIdMatches
driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.syqy.wecash:id/et_content")')
 
# description
driver.find_element_by_android_uiautomator('new UiSelector().description("S 日歷")')
# descriptionStartsWith
driver.find_element_by_android_uiautomator('new UiSelector().descriptionStartsWith("日歷")')
# descriptionMatches
driver.find_element_by_android_uiautomator('new UiSelector().descriptionMatches(".*歷$")')

五、通過不同的定位方式查找元素 

我們也可以通過appium-desktop的search for element功能。通過定位方式和對應的值來查找元素,從而驗證定位方式和值的正確性

可以看到定位方式就是我們第4借說的集中定位方式。選擇一個定位方式,填入對應的值,點擊search

 選中找到的元素,可以看到左側對應手機界面中的元素被選中。從而也證明我們的這種定位方式和對應的值都是沒問題的。可以定位到元素的。

如果是按鈕,就點擊  tap element ,相當於代碼中的click()

如果是輸入框,就在‘enter keys' 中輸入內容,然后點擊sendkeys就可以往已選的元素中輸入內容,相當於代碼中的send_keys()

 

六、錄制

點擊小眼睛圖標的錄制按鈕,可以看到界面展現出來代碼模塊。可以選擇錄制語言=》python或其他

然后和右側selected element 欄目中的tap、send keys、clear 或者 search for element結合操作,根據search for element找到元素定位i,並tap或者sendkeys等操作。這些操作都會被錄制下來並生成python代碼。可直接使用

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM