1. 程式人生 > >移動端自動化測試 -- appium 之Desired Capabilities與 定位控件

移動端自動化測試 -- appium 之Desired Capabilities與 定位控件

ppa imu nor als 一些事 定位在 family lin splash

一、Desired Capabilities

Desired Capabilities 在啟動 session 的時候是必須提供的。

Desired Capabilities 本質上是以 key value 字典的方式存放,客戶端將這些鍵值對發給服務端,告訴服務端我們想要怎麽測試。它告訴 appium Server這樣一些事情:

  • 本次測試是啟動瀏覽器還是啟動移動設備。

  • 是啟動Andorid還是啟動iOS。

  • 啟動Android時,app的package是什麽。

  • 啟動Android時,app的activity是什麽。

固定寫法參考如下:

desired_caps = {}

desired_caps[‘platformName‘] = ‘Android‘
desired_caps[‘platformVersion‘] = ‘4.4.2‘
desired_caps[‘deviceName‘] = ‘127.0.0.1:62001‘
desired_caps[‘appPackage‘] = ‘com.tencent.mobileqq‘
desired_caps[‘appActivity‘] = ‘com.tencent.mobileqq.activity.SplashActivity‘ # android 獨有
desired_caps["unicodeKeyboard"] = "True"

desired_caps["resetKeyboard"] = "True"
desired_caps["noReset"] = "True"
driver = webdriver.Remote(‘http://127.0.0.1:4723/wd/hub‘, desired_caps)

  • deviceName:啟動哪種設備,是真機還是模擬器?iPhone Simulator,iPad Simulator,iPhone Retina 4-inch,Android Emulator,Galaxy S4…

  • automationName:使用哪種自動化引擎。appium(默認)還是Selendroid。

  • platformName:使用哪種移動平臺。iOS, Android, orFirefoxOS。

  • platformVersion:指定平臺的系統版本。例如指的Android平臺,版本為5.1。

  • appActivity:待測試的app的Activity名字。比如MainActivity、.Settings。註意,原生app的話要在activity前加個”.“。

  • appPackage:待測試的app的Java package。比如com.example.android.myApp, com.android.settings。

  • noReset:Don‘t reset app state before this session
  • resetKeyboard:Reset keyboard to its original state, after running Unicode tests with unicodeKeyboard capability. Ignored if used alone. Default false
  • unicodeKeyboard:Enable Unicode input, default false
  • /127.0.0.1:4723 : appium-server 地址

更多的參數配置:https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/caps.md

知識拓展:定位appPackage與appActivity 方法

SDK中下載最新的build-tools,通過aapt dump badging xxx.apk命令來查appPackage與appActivity。

CMD下輸入adb logcat | findstr /i Start,強制停止被測試軟件,再次打開,觀察logcat。(手動打開需要操作的appPackage ,從logcat 最下面開始找)

二、定位控件

appium 通過 uiautomatorviewer.bat 工具來查看控件的屬性。該工具位於 Android SDK 的 /tools/bin/ 目錄下。

1、id 定位

driver.find_element_by_id(‘resource-id‘)

# ID定位於selenium不同,可能存在重復的問題。

# appium-desktop抓取元素時如果出現有id,則可以直接用。

# resource-id可能出現重復,需要具體看下有多少個。 2、class name 定位 driver.find_element_by_class_name(‘class‘) # 對應class字段,有可能存在多個相同class。 # 多個相同class,每次獲取只取第一個遇到的元素。 3、xpath 定位 driver.find_element_by_xpath(‘//android.widget.EditText[@text="手機號"]‘) # Xpath路徑定位,與Web的Xpath定位在有一點點區別 # Native App的定位以class為基準,主要用到參數有text、resource-id、index 4、Accessibility ID定位 --這個方法屬於Appium擴展的定位方法 driver.find_element_by_accessibility_id(‘content-desc‘) # Android對應content-desc IOS對應accessibility identifier # content-desc是給殘障人士定義的特殊字段 5、android uiautomator定位 --這個方法屬於Appium擴展的定位方法 Android的源生測試框架的定位方式,定位速度快 driver.find_element_by_android_uiautomator(‘new UiSelector().text("手機號")‘) # 匹配全部text文字 driver.find_elements_by_android_uiautomator(‘new UiSelector().className("android.widget.TextView")‘) # className 6、iOSPredicateString 僅支持iOS10以上,可以多個屬性同時定位,推薦。(替代XPATH) driver.find_elements_by_ios_predicate("label == ‘登錄‘")

移動端自動化測試 -- appium 之Desired Capabilities與 定位控件