当前位置: 首页 > 后端技术 > Python

谈谈PC端自动化最佳方案——WinAppDriver

时间:2023-03-26 14:45:29 Python

1.前言中提到自动化,你可能会想到App端的Appium、Airtest、AutoJS,或者Web上的自动化框架Selenium、Puppeteer、Cypress等,本文将和大家聊一聊PC端的自动化工具——WinAppDriver2。准备WinAppDriver,全称WindowsApplicationDriver,是一个类似Windows上Selenium的UI自动化驱动服务框架。支持Appium,可以使用Appium-Python-Client依赖库完成Windows桌面程序的自动化。需要注意的是,使用WinAppDriver服务框架完成Windows的自动化,需要满足Windows10或WindowsServer2016及以上版本的要求。另外,它支持的应用程序包括:UWP——UniversalWindowsPlatformWinForms——WindowsFormsWPF——WindowsPresentationFoundationWin32——ClassicWindows在实施之前,我们需要做好以下准备工作2-1打开“开发者模式”关键词搜索“DeveloperSettings”,选择打开“DeveloperMode”2-2安装window组件元素识别工具常用的两个window元素识别工具是:inspect.exe、FlaUInspect,作为官方的组件元素识别工具,集成了inspect.exe在WindowsSDK2-3安装WinAppDriver通过下面的链接下载WinAppDriver应用,并在本地运行2-4搭建Appium环境这部分涉及到NodeJS安装和Appium-搭建Server环境2-5安装依赖最后安装Python依赖库Appium-Python-Client#安装依赖Appium-Python-Clientpip3安装Appium-Python-Client3。下面以PC端的微信为例,谈谈常见的自动化步骤首先,我们在本地开启WinAppDriver服务,让它在后台运行。然后,我们使用Python编写自动化脚本通过ip地址、端口号和PC版绝对路径用Appium打开微信importtime,osfromappiumimportwebdriverfromselenium.webdriverimportActionChainsfromselenium.webdriver.common.keysimportKeysfromtimeimportsleepclassAuto():defopen_weixin(self,host='localhost',port=4723):#打开WinAppDriver服务#注意:如果手动打开,可以注释掉#os.system(r'start""/d"C:\ProgramFiles\WindowsApplicationDriver\""WinAppDriver.exe"')#配置信息#包含:平台名称、系统、应用程序绝对路径desired_caps={'platformName':'Windows','deviceName':'WindowsPC','app':r"D:\ProgramFiles(x86)\Tencent\WeChat\WeChat.exe"}try:#连接WinAppDriver服务并打开目标软件self.driver=webdriver.Remote('http://{}:{}'.format(host,port),desired_caps)exceptExceptionase:raiseAssertionError(e)然后,获取接口元素的属性值nt通过“组件元素识别工具”,进行点击、移动、滑动等常用操作,如:点击“文件传输助手”,发送消息#发送消息给文件传输助手defsend_msg(self,element_name,msg):""":paramelement_name:元素名称value:parammsg::return:"""#通过name属性查找目标元素chat_element=self.weixin_driver.find_element_by_name(target_name)#点击在element上,进入聊天界面chat_element.click()#找到输入框,输入self.weixin_driver.find_element_by_name("input").send_keys(msg)#点击右下角send发送一条消息self.weixin_driver.find_element_by_name("send(S)").click()需要注意的是,如果涉及到界面的滑动,可以使用“ActionChains”移动鼠标,然后使用win32api和win32con模拟屏幕滑动。importwin32apiimportwin32confromappiumimportwebdriverfromselenium.webdriverimportActionChains#模拟屏幕滑动#1.移动到一个元素区域ActionChains(self.weixin_driver).move_to_element(self.weixin_driver.find_element_by_name("element_name")).perform()#2.滑动界面#比如向上滚动模拟滑动win32api。mouse_event(win32con.MOUSEEVENTF_WHEEL,0,0,-500)自动运行完成后,可以主动释放资源,关闭WinAppDriver服务#释放资源,关闭服务deftearDownFunc(self):print("Readytoexit")sleep(2)#1.释放资源self.weixin_driver.quit()#2.关闭WinAppDriver应用os.system('@taskkill/f/imWinAppDriver.exe')4.最后在实际使用过程中,它可能在遇到复杂的桌面应用时,我们可以通过打印驱动对象的“page_source”元素来控制树的值,从而帮助我们快速定位元素,进而完善自动化脚本。包括新手电子书、教程、源码等,免费分享给大家!想上“Python编程学习圈”,发“J”免费领取