常用連接配置
desired_caps = {
'platformName': 'Android', # 被檢測手機系統 安卓 or 蘋果
'platformVersion': '5.1.1', # 手機安卓版本
# 'deviceName': '127.0.0.1:62001', # 設備名稱,如果是真機,在'設定->關于手機->設備名稱'里查看
'deviceName': 'emulator-5554',
'appPackage': 'com.tencent.mobileqq', # 啟動APP Package名稱
'appActivity': '.activity.SplashActivity', # 啟動Activity的名稱
'noReset': True, # 不重置APP
'newCommandTimeout': 6000, # 加長操作時間,默認一分鐘后自動關閉
# 以上必填,以下選填
'unicodeKeyboard': True, # 使用unicode輸入法,輸入中文時需要使用,填True,看模擬器輸入法,有些需要安裝,有些不需要
'resetKeyboard': True, # 執行完程式回復原來輸入法
# 'automationName': 'UiAutomator2', # 獲取toast資訊彈出框需添加,但需要先配置UiAutomator2
# 'app': r'D:\apk\bili.apk', # 測驗apk包的路徑,如果有了app就不需要APP Package和Activity,反理同之
}
連接Appium Server,初始化自動化環境
from appium import webdriver
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
隱式等待和顯式等待
隱式等待
當發現元素沒有找到的時候, 并不立即回傳找不到元素的錯誤,而是周期性(每隔半秒鐘)重新尋找該元素,直到該元素被找到,或者超出指定最大等待時長,這時才 拋出例外(如果是 find_elements 之類的方法, 則是回傳空串列),
Selenium 的 Webdriver 物件 有個方法叫 implicitly_wait
該方法接受一個引數,用來指定 最大等待時長,
# 設定預設等待時間
driver.implicitly_wait(10)
顯式等待
顧名思義,顯式等待就是運行代碼后設定好固定的等待時間,然后再繼續運行,常用的為 time 模塊的 sleep 方法
該方法接受一個引數,用來指定 最大等待時長,
import time
time.sleep(1)
界面元素查看工具
做 Selenium Web 自動化的時候,要找到元素,我們是通過瀏覽器的開發者工具列來查看元素的特性,根據這些特性(屬性和位置),來定位元素
Appium 要自動化手機應用,同樣需要工具查看界面元素的特征,
常用的查看工具是: Android Sdk包中的 uiautomateviewer 和 Appium
定位元素
Appium是基于Selenium的,所以 和 Selenium 代碼 定位元素的 基本規則相同:
- find_element_by_XXX 方法,回傳符合條件的第一個元素,找不到拋出例外
- find_elements_by_XXX 方法,回傳符合條件的所有元素的串列,找不到回傳空串列
- 通過 WebDriver 物件呼叫這樣的方法,查找范圍是整個界面
- 通過 WebElement 物件呼叫這樣的方法,查找范圍是該節點的子節點
根據ID
在 Selenium Web 自動化教程里,如果能根據 ID 選擇定位元素,最好根據ID,因為通常來說ID是唯一的,所以根據 ID 選擇 效率高,
在安卓應用自動化的時候,同樣可以根據 ID 查找,
但是這個ID ,是安卓應用元素的 resource-id 屬性
使用如下代碼
driver.find_element_by_id('')
根據CLASS NAME
安卓界面元素的 class 屬性 其實就是根據元素的型別,類似 web 里面的 tagname, 所以通常不是唯一的,
通常,我們根據 class 屬性來選擇元素, 是要選擇多個而不是一個,
當然,如果你確定要查找的界面元素的型別在當前界面中只有一個,就可以根據class來唯一選擇,
使用如下代碼
driver.find_elements_by_class_name('android.widget.TextView')
根據ACCESSIBILITY ID
元素的 content-desc 屬性是用來描述該元素的作用的,
如果要查詢的界面元素有 content-desc 屬性,我們可以通過它來定位選擇元素,
使用如下代碼
driver.find_element_by_accessibility_id('')
Xpath
Appium 也支持通過 Xpath 選擇元素,
但是其可靠性和性能不如 Selenium Web 自動化,因為 Web 自動化對 Xpath 的支持是由瀏覽器實作的,而 Appium Xpath 的支持是 Appium Server 實作的,
畢竟,瀏覽器產品的成熟度比 Appium 要高很多,
當然,Xpath是標準語法,所以這里運算式的語法規則和以前學習的Selenium里面Xpath的語法是一樣的,比如
driver.find_element_by_xpath('')
注意:
selenium 自動化中,xpath 運算式中每個節點名是 html 的 tagname,
但是在 appium 中,xpath 運算式每個節點名是元素的 class 屬性值,
比如:要選擇所有的文本節點,就使用如下代碼
driver.find_element_by_xpath('//android.widget.TextView')
Appium鍵盤操作
appium擴展提供了pressKeyCode()方法,該方法Android特有,
常用鍵盤操作鍵:
KEYCODE_HOME 按鍵Home
KEYCODE_MENU 選單鍵
KEYCODE_BACK 回傳鍵
KEYCODE_ENTER 回車鍵
KEYCODE_ESCAPE ESC鍵
KEYCODE_CTRL_LEFT Control+Left
KEYCODE_CTRL_RIGHT Control+Right
比如:
from appium.webdriver.extensions.android.nativekey import AndroidKey
driver.pressKeyCode(AndroidKey.enter)

希望本文對你有所幫助~~如果對軟體測驗、介面測驗、自動化測驗、面試經驗交流感興趣可以加入我們,642830685,免費領取最新軟體測驗大廠面試資料和Python自動化、介面、框架搭建學習資料!技術大牛解惑答疑,同行一起交流,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/224993.html
標籤:其他
