用python撥打電話,先看小視訊
跟selenium操作浏覽器原理類似,這是用appium操作移動裝置的一個自動化功能,自娛自樂,主要是通過小案例引出相關技術
一、環境配置:
1、安裝 jdk 1.8+ ,并配環境變量
2、安裝Android SDK,可以直接下載下傳安裝,也可以通過android-studio裡面安裝,安裝好後配環境變量,配好後cmd後輸入adb執行成功則配好
3、安裝appium 1.8.0,我用的這個版本,還挺穩定,原生和微信H5支援還可以,其他版本試過一些,可能原生支援還行,微信公衆号H5頁面支援不友好
二、檢視元素
sdk安裝好後,找到uiautomatorviewer.bat打開,用來擷取元素id、text等屬性,用于我們定位元素,這點跟selenium那一套基本一緻,不過有一點值得注意的是,安卓app裡面的id并不是唯一的,這個跟在web裡面有差別,用id的時候注意看下是否是唯一進制素

用左上角的工具審查元素,比如*鍵,可以看到id是star,其他按鍵各種元素id檢視方式一緻
三、配置資訊擷取
1、電腦手機通過資料線連接配接好,輸入指令adb devices,擷取手機的裝置識别号
2、指令行輸入:adb shell dumpsys window windows | findstr "Current"
用來擷取目前應用的包名和啟動頁
包名:com.android.contacts
啟動頁:com.android.contacts.activities.TwelveKeyDialer
四、代碼編寫
代碼如下,我這裡有相關引入檔案
import sys
sys.path.insert(0,"C:\\Users\\Administrator\\Desktop\\imooc\\python_call")
from action import Action
from appium import webdriver
action = Action()
# 相關配置
action.desired_caps['platformName'] = 'Android' # 平台
action.desired_caps['platformVersion'] = '7.0' # Android版本
action.desired_caps['deviceName'] = 'a20bc6990604' # 裝置号
action.desired_caps['appPackage'] = 'com.android.contacts' # 包名
action.desired_caps['appActivity'] = 'com.android.contacts.activities.TwelveKeyDialer' # 啟動頁
action.desired_caps['unicodeKeyboard'] = True # 使用unicode編碼方式發送字元串
action.desired_caps['resetKeyboard'] = True # 将鍵盤隐藏起來,預設true
action.desired_caps['noReset'] = True # 應用狀态是否需要重置,預設true
action.desired_caps['automationName'] = 'Uiautomator2' # 自動化引擎,相容原生和H5
# 控制遠端appium
action.driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", action.desired_caps)
# 點選事件
action.click_key("id=>one")
action.click_key("id=>five")
action.click_key("id=>two")
action.click_key("id=>three")
action.click_key("id=>six")
action.click_key("id=>two")
action.click_key("id=>eight")
action.click_key("id=>eight")
action.click_key("id=>eight")
action.click_key("id=>star")
action.click_key("id=>star")
action.click_key("id=>call_sim1")
複制
其中click_key是我自定義的方法,比如傳入id=>star後,根據=>進行split切分,前面是id,後面是id值,有些時候我會用xpath寫法,其實我下面是在項目中涉及很多變量,很多單獨維護了,可能你看起來有點複雜,其實跟selenium差不多,點選方法就是click,找元素就是find_element,然後根據id找的話,要把id值傳進去
byDict = {
"xpath": By.XPATH,
"id": By.ID,
}
複制
def find_ele(self, loc):
print(loc.split("=>")[0],loc.split("=>")[1])
element = WebDriverWait(self.driver, 30).until(
lambda x: x.find_element(byDict[loc.split("=>")[0]], loc.split("=>")[1]))
print(element)
return element
def click_key(self, loc):
self.find_ele(loc).click()
複制
五、運作
啟動appium,以預設0.0.0.0:4723啟動即可,然後運作python程式,即可看到手機撥打電話執行過程。