之前一篇博客已經講述怎樣手動使用appium-desktop啟動測試機上的app,但我們實際跑自動化腳本的過程中,是需要用腳本調用appium啟動app的,接下來就嘗試寫Python腳本啟動app並登陸app。環境為Windows10 + Python3.7 + appium1.18.0 + Android手機 + 今日頭條app + Pycharm
一,連接測試手機,獲取測試機及被測APP配置
具體的獲取方法請參考APP自動化測試之appium連接真機啟動app,配置信息如下:
{
"platformName": "Android",
"platformVersion": "10",
"deviceName": "PCT_AL10",
"appPackage": "com.ss.android.article.news",
"appActivity": ".activity.MainActivity"
}
二,編寫Python腳本啟動app
1,編輯器推薦大家使用PyCharm,下載pycharm社區版本,免費無需破解。
2,因為登陸需要輸入賬號、密碼,所以這里新增了兩個參數。參數unicodeKeyboard即是否啟用Unicode格式輸入字符串,默認值為False,設置為True則表示啟用。參數resetKeyboard即使用unicodeKeyboard功能進行Unicode輸入后,是否將鍵盤重置為原始狀態,默認False。
desired_caps = {
"platformName": "Android",
"platformVersion": "10",
"deviceName": "PCT_AL10",
"appPackage": "com.ss.android.article.news",
"appActivity": ".activity.MainActivity",
"unicodeKeyboard": True,
"resetKeyboard": True,
}
3,傳入desired_caps通過appium啟動app,構造driver對象(即創建一個session)。
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
appium在本機開啟的話則IP為127.0.0.1,端口默認為4723
4,電腦連接手機,開啟appium服務,運行腳本,調試是否能啟動app。
from appium import webdriver
desired_caps = {
"platformName": "Android",
"platformVersion": "10",
"deviceName": "PCT_AL10",
"appPackage": "com.ss.android.article.news",
"appActivity": ".activity.MainActivity",
"unicodeKeyboard": True,
"resetKeyboard": True,
}
# 啟動app
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
我們會看到手機上今日頭條app被打開。
三,通過appium Inspector定位元素,登陸APP
1,登陸操作步驟為:
啟動今日頭條app --> 點擊【我知道了】--> 確定管理權限 --> 點擊底部tab“未登陸” 進入未登錄頁面 --> 點擊 “登陸” --> 點擊“...” --> 選擇密碼登陸 --> 輸入賬號密碼 --> 點擊登陸
2,根據操作步驟,使用appium的Inspector獲取登陸相關操作元素的屬性
[進入appium Inspector頁面](#),先點擊選擇元素按鈕,然后在窗口左側展示的手機頁面上,點擊選擇需要定位的元素,窗口右側會展示該元素的屬性值。手機app頁面切換后,點擊窗口刷新頁面按鈕,左側頁面會刷新。

appium Inspector獲取不到的元素屬性的話,還可以用Android SDK里自帶的工具uiautomatorviewer獲取。后面會專門介紹怎樣獲取元素屬性,這里不詳述。

3,登陸操作腳本
# -*- coding:utf-8 -*-
import time
from appium import webdriver
desired_caps = {
"platformName": "Android",
"platformVersion": "10",
"deviceName": "PCT_AL10",
"appPackage": "com.ss.android.article.news",
"appActivity": ".activity.MainActivity",
"unicodeKeyboard": True,
"resetKeyboard": True,
}
# 啟動app
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
# 登陸操作
driver.find_element_by_id("com.ss.android.article.news:id/chj").click() # 點擊【我知道了】
time.sleep(1)
driver.find_element_by_id("android:id/button1").click() # 點擊權限管理-確定按鈕
time.sleep(1)
driver.find_element_by_xpath("//android.widget.TabWidget/android.widget.RelativeLayout[@index=3]").click() # 點擊未登錄
time.sleep(1)
driver.find_element_by_id("com.ss.android.article.news:id/a1c").click() # 未登錄頁點擊登錄按鈕
time.sleep(1)
driver.find_element_by_id("com.ss.android.article.news:id/bfm").click() # 登錄頁點擊“。。。”
time.sleep(1)
driver.find_element_by_xpath("//android.widget.LinearLayout[@index=4]").click() # 選擇密碼登錄
time.sleep(1)
driver.find_element_by_id("com.ss.android.article.news:id/c7").send_keys("********") # 輸入賬號
time.sleep(1)
driver.find_element_by_id("com.ss.android.article.news:id/ch").send_keys("********") # 輸入密碼
time.sleep(1)
driver.find_element_by_id("com.ss.android.article.news:id/a31").click() # 點擊登錄
time.sleep(5)
我們查看手機,會發現手機正在自動做登錄今日頭條的app操作,且登錄成功。
至此,我們通過編寫一個簡單的Python腳本完成了登錄app的操作,如果加上斷言,就是一條完整的用例。

