你們好,我是安果!html
一提到自動化,可能你們想到的是 App 端的 Appium、Airtest、AutoJS,亦或是 Selenium、Puppeteer、Cypress 等 Web 端的自動化框架git
本篇文章,我將和你們聊聊 PC 端的自動化工具 - WinAppDrivergithub
WinAppDriver,全稱爲 Windows Application Driver,它是 Windows 上一個相似 Selenium 的 UI 自動化驅動服務框架web
它支持 Appium,可使用 Appium-Python-Client 依賴庫完成對 Windows 桌面程序的自動化操做windows
項目地址:https://github.com/Microsoft/WinAppDriverapi
須要注意的是,要使用 WinAppDriver 服務框架完成 Windows 的自動化,須要知足 Windows10 或 Windows Server 2016 以上系統微信
另外,它支持的應用程序包含:app
UWP - Universal Windows Platform框架
WinForms - Windows Forms工具
WPF - Windows Presentation Foundation
Win32 - Classic Windows
在實現以前,咱們須要作好如下準備工做
2-1 開啓「 開發者模式 」
關鍵字搜索「 開發者設置 」,選擇開啓「 開發者模式 」
2-2 安裝窗口組件元素識別工具
經常使用的 2 種窗口元素識別工具爲:inspect.exe、FlaUInspect
其中
做爲官方的組件元素識別工具,inspect.exe 集成於 Windows SDK
若是本地不存在該文件,能夠經過下面連接進行安裝
相比 inspect.exe,FlaUInspect 界面更簡潔,功能更易用( 推薦 )
項目地址:https://github.com/FlaUI/FlaUInspect
2-3 安裝 WinAppDriver
經過下面連接下載 WinAppDriver 應用程序,並在本地運行起來
https://github.com/Microsoft/WinAppDriver/releases
2-4 搭建 Appium 環境
這部份內容涉及 NodeJS 安裝及 Appium-Server 環境的搭建
能夠參考:https://www.cnblogs.com/amoyshmily/p/10500687.html
2-5 安裝依賴
最後安裝 Python 依賴庫 Appium-Python-Client
# 安裝依賴 Appium-Python-Client pip3 install Appium-Python-Client
咱們以操做 PC 端的微信爲例,聊聊自動化的常見步驟
首先,咱們在本機打開 WinAppDriver 服務,讓它在後臺運行
而後,咱們使用 Python 編寫自動化腳本
經過 ip 地址、端口號及 PC 版微信的絕對路徑,使用 Appium 打開微信
import time, os from appium import webdriver from selenium.webdriver import ActionChains from selenium.webdriver.common.keys import Keys from time import sleep class Auto(): def open_weixin(self, host='localhost', port=4723): # 打開WinAppDriver服務 # 注意:若是手動開啓,則能夠註釋掉 # os.system(r'start "" /d "C:\Program Files\Windows Application Driver\" "WinAppDriver.exe"') # 配置信息 # 包含:平臺名、系統、應用程序絕對路徑 desired_caps = {'platformName': 'Windows', 'deviceName': 'WindowsPC', 'app': r"D:\Program Files (x86)\Tencent\WeChat\WeChat.exe"} try: # 鏈接WinAppDriver服務,打開目標軟件 self.driver = webdriver.Remote('http://{}:{}'.format(host, port), desired_caps) except Exception as e: raise AssertionError(e)
接着,經過「 組件元素識別工具 」拿到界面元素的屬性值,執行常見的點擊、移動、滑動等操做
好比:點擊「 文件傳輸助手 」,發送一條信息
# 給文件傳輸助手發送一條信息 def send_msg(self, element_name, msg): """ :param element_name:元素name值 :param msg: :return: """ # 經過name屬性,找到目標元素 chat_element = self.weixin_driver.find_element_by_name(target_name) # 點擊元素,進入聊天界面 chat_element.click() # 找到輸入框,並輸入 self.weixin_driver.find_element_by_name("輸入").send_keys(msg) # 點擊右下角的發送,發送消息出去 self.weixin_driver.find_element_by_name("發送(S)").click()
須要注意的是,若是涉及界面的滑動,可使用「 ActionChains 」移動鼠標,而後使用 win32api 和 win32con 模擬屏幕滑動便可
import win32api import win32con from appium import webdriver from selenium.webdriver import ActionChains # 模擬屏幕滑動 # 一、移動到某個元素區域 ActionChains(self.weixin_driver).move_to_element( self.weixin_driver.find_element_by_name("element_name")).perform() # 二、滑動界面 # 好比,向上滾動,模擬滑動 win32api.mouse_event(win32con.MOUSEEVENTF_WHEEL, 0, 0, -500)
完成自動化操做後,就能夠主動釋放資源、關閉 WinAppDriver 服務
# 釋放資源及關閉服務 def tearDownFunc(self): print("準備退出") sleep(2) # 一、釋放資源 self.weixin_driver.quit() # 二、關閉WinAppDriver應用程序 os.system(' @taskkill /f /im WinAppDriver.exe')
在實際使用過程當中,可能會遇到複雜的桌面應用程序,這時咱們能夠經過打印驅動對象的「 page_source」元素控制樹值,以此來幫助咱們進行快速定位元素,進而完善自動化腳本
若是你以爲文章還不錯,請你們 點贊、分享、留言 下,由於這將是我持續輸出更多優質文章的最強動力!