关于自动化:聊聊-PC-端自动化最佳方案-WinAppDriver

130次阅读

共计 2648 个字符,预计需要花费 7 分钟才能阅读完成。

1. 前言

一提到自动化,可能大家想到的是 App 端的 Appium、Airtest、AutoJS,亦或是 Selenium、Puppeteer、Cypress 等 Web 端的自动化框架

本篇文章,我将和大家聊聊 PC 端的自动化工具 – WinAppDriver

2. 筹备
WinAppDriver,全称为 Windows Application Driver,它是 Windows 上一个相似 Selenium 的 UI 自动化驱动服务框架

它反对 Appium,能够应用 Appium-Python-Client 依赖库实现对 Windows 桌面程序的自动化操作

须要留神的是,要应用 WinAppDriver 服务框架实现 Windows 的自动化,须要满足 Windows10 或 Windows Server 2016 以上零碎

另外,它反对的应用程序蕴含:

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
2-3 装置 WinAppDriver

通过上面链接下载 WinAppDriver 应用程序,并在本地运行起来

2-4 搭建 Appium 环境

这部分内容波及 NodeJS 装置及 Appium-Server 环境的搭建

2-5 装置依赖

最初装置 Python 依赖库 Appium-Python-Client

# 装置依赖 Appium-Python-Client
pip3 install Appium-Python-Client

3. 实战一下
咱们以操作 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

# 模仿屏幕滑动
# 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 服务

# 开释资源及敞开服务
def tearDownFunc(self):
    print("筹备退出")
    sleep(2)

    # 1、开释资源
    self.weixin_driver.quit()

    # 2、敞开 WinAppDriver 应用程序
    os.system('@taskkill /f /im WinAppDriver.exe')

4. 最初
在理论应用过程中,可能会遇到简单的桌面应用程序,这时咱们能够通过打印驱动对象的「page_source」元素管制树值,以此来帮忙咱们进行疾速定位元素,进而欠缺自动化脚本

最近整顿了几百 G 的 Python 学习材料,蕴含新手入门电子书、教程、源码等等,收费分享给大家!想要的返回“Python 编程学习圈”,发送“J”即可收费取得

正文完
 0